├── .gitignore ├── _static └── images │ └── logo.png ├── architecture ├── architecture.png └── runtime_setup.rst ├── community └── channels.rst ├── userguide ├── advanced │ ├── index.rst │ ├── software_rendering.rst │ ├── rootfs_overlay.rst │ └── network_configuration.rst ├── install_apps.rst ├── install_kernel_modules.rst └── install.rst ├── .travis.yml ├── Makefile ├── index.rst ├── contribute └── bug_report.rst └── conf.py /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /_static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anbox/docs/HEAD/_static/images/logo.png -------------------------------------------------------------------------------- /architecture/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anbox/docs/HEAD/architecture/architecture.png -------------------------------------------------------------------------------- /community/channels.rst: -------------------------------------------------------------------------------- 1 | Channels 2 | ======== 3 | 4 | IRC 5 | ^^^ 6 | 7 | `#anbox on Freenode `_ 8 | 9 | Telegram 10 | ^^^^^^^^ 11 | 12 | https://t.me/anbox 13 | -------------------------------------------------------------------------------- /userguide/advanced/index.rst: -------------------------------------------------------------------------------- 1 | Advanced use 2 | ============ 3 | 4 | This section of the documentation details advanced tasks that power users may want to perform on their Ubuntu Touch device. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :name: toc-userguide-advanced 9 | 10 | rootfs_overlay 11 | software_rendering 12 | network_configuration 13 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | cache: pip 3 | 4 | install: 5 | pip install sphinx sphinx_rtd_theme 6 | 7 | script: 8 | make html 9 | 10 | deploy: 11 | provider: pages 12 | local-dir: build/html/ 13 | skip-cleanup: true 14 | github-token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variable 15 | keep-history: true 16 | fqdn: docs.anbox.io 17 | on: 18 | branch: master 19 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SPHINXPROJ = Anbox 8 | SOURCEDIR = . 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /index.rst: -------------------------------------------------------------------------------- 1 | Welcome to Anbox's documentation! 2 | ================================= 3 | 4 | This is the official documentation of the `Anbox `_ project. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :caption: User Guide 9 | :name: sec-userguide 10 | 11 | userguide/install 12 | userguide/install_kernel_modules 13 | userguide/install_apps 14 | userguide/advanced/index 15 | 16 | .. toctree:: 17 | :maxdepth: 1 18 | :caption: Architecture 19 | :name: sec-architecture 20 | 21 | architecture/runtime_setup 22 | 23 | 24 | .. toctree:: 25 | :maxdepth: 1 26 | :caption: Contribute 27 | :name: sec-contribute 28 | 29 | contribute/bug_report 30 | 31 | .. toctree:: 32 | :maxdepth: 1 33 | :caption: Community 34 | :name: sec-community 35 | 36 | community/channels 37 | -------------------------------------------------------------------------------- /userguide/advanced/software_rendering.rst: -------------------------------------------------------------------------------- 1 | Software Rendering 2 | ================== 3 | 4 | In some use cases (e.g. VirtualBox) it can be helpful to run Anbox with 5 | software rendering rather than with the EGL/GL driver provided by the host 6 | operating system. Anbox includes `Swiftshader `_ 7 | for this which provides a high-performance CPU based implementation of 8 | OpenGL ES and EGL. 9 | 10 | **NOTE:** You need at least revision *114* of the Anbox snap for this. 11 | 12 | To enable software rendering in Anbox the only thing you have to do is 13 | 14 | .. code-block:: text 15 | 16 | $ snap set anbox software-rendering.enable=true 17 | $ snap restart anbox.container-manager 18 | 19 | **BUT** this will stop any running Anbox process. You have to start Anbox 20 | again afterwards. 21 | 22 | Afterwards Anbox will use software rendering. If you want to disable software 23 | rendering it's as simple as 24 | 25 | .. code-block:: text 26 | 27 | $ snap set anbox software-rendering.enable=false 28 | $ snap restart anbox.container-manager 29 | -------------------------------------------------------------------------------- /userguide/install_apps.rst: -------------------------------------------------------------------------------- 1 | Install applications 2 | ==================== 3 | 4 | Installation applications into the Android container provided by Anbox 5 | we currently use the sideloading functionality Android provides. For 6 | this you need to have the Android Debug Bridge (ADB) installed on your 7 | host system. See the `Android documentation `_ 8 | for details. 9 | 10 | If you're running Ubuntu or Fedora you can install ADB from the package archive: 11 | 12 | .. code-block:: text 13 | 14 | # On Ubuntu 15 | $ sudo apt install android-tools-adb 16 | 17 | # On Fedora 18 | $ sudo dnf install android-tools 19 | 20 | Once ADB is installed you're ready to install Android applications. 21 | 22 | Anbox does not provide any functionality to retrieve Android applications. 23 | You need to get them from a source on the internet. Once you have the APK 24 | package for the application you can install it into the Android container 25 | with the following command: 26 | 27 | .. code-block:: text 28 | 29 | $ adb install my-app.apk 30 | 31 | If the Anbox container is not running yet you can start it with loading 32 | the application manager application: 33 | 34 | .. code-block:: text 35 | 36 | $ anbox.appmgr 37 | 38 | 39 | -------------------------------------------------------------------------------- /architecture/runtime_setup.rst: -------------------------------------------------------------------------------- 1 | Runtime setup 2 | ============= 3 | 4 | The Anbox runtime consists mainly of two separate instances: 5 | 6 | * container manager 7 | * session manager 8 | 9 | The container manager has the job of managing the container setup and maintenance 10 | during its lifetime. It has the responsibility to start the LXC environment we're 11 | using to run the Android system. 12 | 13 | The session manager runs inside the session of a user logged into the Linux system. 14 | It will communicate over several sockets with the Android instance running inside 15 | the container and provide integration with the Linux system. It also acts as a 16 | multiplexer to map Android applications into single windows on the desktop 17 | environment. Currently all application windows are owned by the same process 18 | (the session manager). The application logic itself is still in a separate process 19 | inside the Android container. 20 | 21 | The following picture shows an overview over the architecture: 22 | 23 | .. image:: architecture.png 24 | 25 | Application Mapping 26 | ------------------- 27 | 28 | Android applications are mapped into single windows within the desktop environment. 29 | This is achieved by plugging into the Android hwcomposer HAL module which receives 30 | a set of layers to composite on a screen. Anbox tells SurfaceFlinger through its 31 | hwcomposer implementation to get a layer for each application and combines this with 32 | additional information it receives from the Android WindowManager to map individual 33 | layers to applications. For more details please look into the implementation at 34 | 35 | * android/hwcomposer 36 | * src/anbox/graphics/layer_composer.cpp 37 | * src/anbox/wm/manager.cpp 38 | -------------------------------------------------------------------------------- /contribute/bug_report.rst: -------------------------------------------------------------------------------- 1 | Bug reporting 2 | ============= 3 | 4 | If you run into a problem with Anbox creating a bug report is the right way to 5 | get in touch with the developer community. The following will describe the steps 6 | you should follow when reporting a bug. 7 | 8 | Check if the bug is already reported 9 | ------------------------------------ 10 | 11 | The very first thing you should always do is to check the `Anbox bug tracker `_ 12 | for an existing bug report which matches the problem you're experiencing. If one 13 | already exist please don't file a new one but ammend to the existing one. 14 | 15 | Update to the latest version of Anbox 16 | ------------------------------------- 17 | 18 | Before you report a bug you should make sure you can reproduce it with the latest 19 | version of Anbox. To refresh the snap package simply run the following command: 20 | 21 | .. code-block:: text 22 | 23 | $ snap refresh --edge --devmode Anbox 24 | 25 | 26 | Once the refresh is done try to reproduce the bug you've found. If it is still 27 | present continue with the next steps. 28 | 29 | 30 | Collect all necessary information for the bug report 31 | ---------------------------------------------------- 32 | 33 | When you attempt to create a bug report on our github project you will be asked 34 | to provide various information so developers have an easier job to find a solution 35 | for your problem. Please make sure you follow these steps! 36 | 37 | Create the bug report 38 | --------------------- 39 | 40 | Once you have all information together go to the `bug tracker `_ 41 | and create the bug report. 42 | 43 | A developer will confirm and triage your bug, then work can begin on it. If you are 44 | missing any information, you will be asked for it, so make sure to check in often! 45 | -------------------------------------------------------------------------------- /userguide/advanced/rootfs_overlay.rst: -------------------------------------------------------------------------------- 1 | Android rootfs overlay 2 | ====================== 3 | 4 | Anbox provides support to allow customizing the used Android root filesystem. This 5 | is useful for development and debugging purposes but also to add additional functionality 6 | to the Android root filesystem Anbox ships by default. 7 | 8 | Overlaying the default Android filesystem is a powerful feature but needs to be used 9 | carefully as it may introduce bugs and unwanted behavior if used incorrectly. 10 | 11 | The following steps will provide an overview of the basic steps to setup the rootfs 12 | overlay (which is disabled by default) and how to use it. 13 | 14 | Enable Android rootfs overlay 15 | ----------------------------- 16 | 17 | The rootfs overlay support is hidden behind a configuration option of the snap. You 18 | enable it by running the following commands: 19 | 20 | .. code-block:: text 21 | 22 | $ snap set anbox rootfs-overlay.enable=true 23 | $ snap restart anbox.container-manager 24 | 25 | Now the container manager is running and the overlayed rootfs exists within the snap 26 | mount namespace at `/var/snap/anbox/common/combined-rootfs`. To verify everything 27 | is setup correctly you can inspect the `combined-rootfs` this way: 28 | 29 | .. code-block:: text 30 | 31 | $ sudo snap run --shell anbox.container-manager 32 | # ls -alh /var/snap/anbox/common/combined-rootfs 33 | 34 | Extend Android rootfs with additional files 35 | ------------------------------------------- 36 | 37 | Now that the overlay is setup you can start using it. For that you can put any files 38 | into the directory `/var/snap/anbox/common/rootfs-overlay` and they will show up in 39 | the Android root filesystem used by Anbox. 40 | 41 | Once you placed files inside the overlay directory you have to ensure all files have 42 | the right uid/gid assigned. Anbox uses a user namespace where all uid/gid are shifted 43 | to the unprivileged base UID `100000`. This means that UID `100000` on your host system 44 | will be UID `0` inside the Android container. 45 | 46 | The most common case is that all files need to be owned by root inside the Android container. 47 | For that you can simply recursively change the UID/GID of all files in the overlay directory 48 | with the following command: 49 | 50 | .. code-block:: text 51 | 52 | $ sudo chown -R 100000:100000 /var/snap/anbox/common/rootfs-overlay 53 | -------------------------------------------------------------------------------- /userguide/advanced/network_configuration.rst: -------------------------------------------------------------------------------- 1 | Network Configuration 2 | ===================== 3 | 4 | Anbox provides configuration options to change the network configuration of the 5 | Android container and the network bridge used to let the container talk to networks 6 | the host is connected to. 7 | 8 | Network bridge 9 | -------------- 10 | 11 | By default anbox creates a network bridge called `anbox0` 12 | which will forward traffic from the Android container to the network the machine 13 | Anbox is running on is connected to. 14 | 15 | The default configuration of the bridge looks like this: 16 | 17 | .. code-block:: text 18 | 19 | anbox0: flags=4163 mtu 1500 20 | inet 192.168.250.1 netmask 255.255.255.0 broadcast 0.0.0.0 21 | inet6 fe80::743a:9ff:fefd:96ac prefixlen 64 scopeid 0x20 22 | ether 76:3a:09:fd:96:ac txqueuelen 1000 (Ethernet) 23 | RX packets 0 bytes 0 (0.0 B) 24 | RX errors 0 dropped 0 overruns 0 frame 0 25 | TX packets 113 bytes 17698 (17.6 KB) 26 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 27 | 28 | To change the configuration of the bridge the following configuration options exists 29 | on the snap: 30 | 31 | * `bridge.address`: Address of the bridge (default: `192.168.250.1`) 32 | * `bridge.netmask`: Netmask of the bridge (default: `255.255.255.0`) 33 | * `bridge.network`: Network used by bridge (default: `192.168.250.1/24`) 34 | * `bridge.nat.enable`: Enable or disable NAT support on the bridge (default: `true`) 35 | 36 | The values of the configuration items are not validated. If incorrect values are 37 | supplied the bridge may get incorrectly configured and the container wont be able 38 | to access any outside network or will fail to start. 39 | 40 | All configuration items can be changed with the `snap` command. For example: 41 | 42 | .. code-block:: text 43 | 44 | $ snap set anbox bridge.address=192.168.250.2 45 | 46 | Container network configuration 47 | ------------------------------- 48 | 49 | When the bridge configuration is altered the configuration of the container needs to 50 | be adjusted as well. The following configuration options exist for this: 51 | 52 | * `container.network.address`: Address of the container (default: `192.168.250.2`) 53 | * `container.network.gateway`: Gateway the container should use (default: `192.168.250.1`) 54 | * `container.network.dns`: DNS server the container should use (default: `8.8.8.8`) 55 | 56 | All configuration items can be changed with the `snap` command: 57 | 58 | .. code-block:: text 59 | 60 | $ snap set anbox container.network.address=192.168.250.10 61 | -------------------------------------------------------------------------------- /userguide/install_kernel_modules.rst: -------------------------------------------------------------------------------- 1 | Install Kernel Modules 2 | ====================== 3 | 4 | Install with DKMS 5 | ^^^^^^^^^^^^^^^^^ 6 | 7 | In order to support the mandatory kernel subsystems ashmem and binder for the 8 | Android container you have to install two 9 | `DKMS `_ 10 | based kernel modules. The source for the kernel modules is maintained by the 11 | Anbox project `here `_. 12 | 13 | At the moment we only have packages prepared for Ubuntu in a PPA on Launchpad. 14 | If you want to help to get the packages in your favorite distribution please 15 | come and :doc:`talk to us <../community/channels>` or submit a PR with the distribution 16 | specific packaging. 17 | 18 | Install DKMS package from PPA 19 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20 | 21 | .. note:: 22 | Starting with Ubuntu 19.04 binder and ashmem are now build with the standard 23 | Ubuntu kernel (>= 5.0) and you don't have to install the modules from the PPA 24 | anymore. 25 | 26 | In order to add the PPA to your Ubuntu system please run the following commands: 27 | 28 | .. code-block:: text 29 | 30 | $ sudo add-apt-repository ppa:morphis/anbox-support 31 | $ sudo apt update 32 | $ sudo apt install linux-headers-generic anbox-modules-dkms 33 | 34 | .. note:: 35 | In case `add-apt-repository` is missing, install it via: 36 | 37 | .. code-block:: text 38 | 39 | $ sudo apt install software-properties-common 40 | 41 | These will add the PPA to your system and install the `anbox-modules-dkms` 42 | package which contains the ashmem and binder kernel modules. They will be 43 | automatically rebuild every time the kernel packages on your system update. 44 | 45 | .. note:: 46 | Please install the corresponding header package for your running kernel, if 47 | you're not using the default one. 48 | 49 | After you installed the `anbox-modules-dkms` package you have to manually 50 | load the kernel modules. The next time your system starts they will be 51 | automatically loaded. 52 | 53 | .. code-block:: text 54 | 55 | $ sudo modprobe ashmem_linux 56 | $ sudo modprobe binder_linux 57 | 58 | Now you should have two new nodes in your systems `/dev` directory: 59 | 60 | .. code-block:: text 61 | 62 | $ ls -1 /dev/{ashmem,binder} 63 | /dev/ashmem 64 | /dev/binder 65 | 66 | 67 | Install with in-tree modules 68 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 69 | 70 | Android ashmem and binder modules are in linux kernel tree. So it's possible to 71 | build them as in-tree modules. 72 | 73 | You can enable them, by looking at the following configuration, 74 | 75 | * https://github.com/torvalds/linux/blob/master/drivers/android/Kconfig 76 | * https://github.com/torvalds/linux/blob/master/drivers/staging/android/Kconfig 77 | 78 | However if you don't want these modules to be built-in for your kernel, you can apply 79 | the following patches, to build them as modules. 80 | 81 | * https://salsa.debian.org/kernel-team/linux/blob/master/debian/patches/debian/android-enable-building-ashmem-and-binder-as-modules.patch 82 | * https://salsa.debian.org/kernel-team/linux/blob/master/debian/patches/debian/export-symbols-needed-by-android-drivers.patch 83 | 84 | Debian has enabled these modules since kernel 4.17.3. So you don't need to bother 85 | how to install. Currently kernel 4.17.3 and above are only available in 86 | Debian `Unstable `_. 87 | 88 | Other distributions are welcome to take these patches and enable them by default. 89 | -------------------------------------------------------------------------------- /userguide/install.rst: -------------------------------------------------------------------------------- 1 | Install Anbox 2 | ============= 3 | 4 | To install Anbox your system need to support `snaps `_. We 5 | do not officially support any other distribution method of Anbox at the moment 6 | but there are community made packages for various distributions (e.g. Arch Linux). 7 | However please keep in mind that the Anbox project can give not support them 8 | and its solely in the responsibility of the community packager to keep up with 9 | upstream development and update the packaging to any new changes. Please feel 10 | free to report still any bugs you encounter as they may not be related to the 11 | packaging. 12 | 13 | If you don't know about snaps yet head over to `snapcraft.io `_ 14 | to get an introduction of what snaps are, how to install support for them on your 15 | distribution and how to use them. 16 | 17 | On recent Ubuntu versions (>= 19.04), Anbox can be installed in just one step using `snap`. 18 | 19 | On other systems, you may first need to install the following kernel modules. 20 | 21 | Install kernel modules 22 | ^^^^^^^^^^^^^^^^^^^^^^ 23 | 24 | Skip this step if you are running on an Ubuntu system >= 19.04. Otherwise, please follow :doc:`install_kernel_modules` to install the necessary kernel modules. 25 | 26 | After correct installation you should have two new nodes in your systems `/dev` directory: 27 | 28 | .. code-block:: text 29 | 30 | $ ls -1 /dev/{ashmem,binder} 31 | /dev/ashmem 32 | /dev/binder 33 | 34 | 35 | Install the Anbox snap 36 | ^^^^^^^^^^^^^^^^^^^^^^ 37 | 38 | This step will install the Anbox snap from the store and will give you 39 | everything you need to run the full Anbox experience. 40 | 41 | Installing the Anbox snap is very simple: 42 | 43 | .. code-block:: text 44 | 45 | $ snap install --devmode --beta anbox 46 | 47 | If you didn't logged into the Ubuntu Store yet, the `snap` command will 48 | ask you to use `sudo snap ...` in order to install the snap: 49 | 50 | .. code-block:: text 51 | 52 | $ sudo snap install --devmode --beta anbox 53 | 54 | At the moment we require the use of `--devmode` as the Anbox snap is not 55 | yet fully confined. Work has started with the upstream `snapd` project to 56 | get support for full confinement. 57 | 58 | As a side effect of using `--devmode` the snap will not automatically update. 59 | In order to update to a newer version you can run: 60 | 61 | .. code-block:: text 62 | 63 | $ snap refresh --beta --devmode anbox 64 | 65 | Information about the currently available versions of the snap is available 66 | via: 67 | 68 | .. code-block:: text 69 | 70 | $ snap info anbox 71 | 72 | Available snap channels 73 | ^^^^^^^^^^^^^^^^^^^^^^^ 74 | 75 | Currently we only use the beta and edge channels for the Anbox snap. The edge 76 | channel tracks the latest development is always synced with the state of the 77 | master branch on github. The beta channel is updated less frequently to provide 78 | a more stable and bug free experience. 79 | 80 | Once proper confinement for the Anbox snap exists we will also start using the 81 | candidate and stable channels. 82 | 83 | Uninstall Anbox 84 | =============== 85 | 86 | If you want to remove Anbox from your system you first have to remove the snap: 87 | 88 | **NOTE:** By removing the snap you remove all data you stored within the snap 89 | from your system. There is no way to bring it back. 90 | 91 | .. code-block:: text 92 | 93 | $ snap remove anbox 94 | 95 | Once the snap is removed you have to remove the installed kernel modules as well: 96 | 97 | .. code-block:: text 98 | 99 | $ sudo apt install ppa-purge 100 | $ sudo ppa-purge ppa:morphis/anbox-support 101 | 102 | 103 | Once done Anbox is removed from your system. 104 | -------------------------------------------------------------------------------- /conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Configuration file for the Sphinx documentation builder. 4 | # 5 | # This file does only contain a selection of the most common options. For a 6 | # full list see the documentation: 7 | # http://www.sphinx-doc.org/en/master/config 8 | 9 | # -- Path setup -------------------------------------------------------------- 10 | 11 | # If extensions (or modules to document with autodoc) are in another directory, 12 | # add these directories to sys.path here. If the directory is relative to the 13 | # documentation root, use os.path.abspath to make it absolute, like shown here. 14 | # 15 | # import os 16 | # import sys 17 | # sys.path.insert(0, os.path.abspath('.')) 18 | 19 | 20 | # -- Project information ----------------------------------------------------- 21 | 22 | project = u'Anbox' 23 | copyright = u'2018, Anbox Team' 24 | author = u'Anbox Team' 25 | 26 | # The short X.Y version 27 | version = u'' 28 | # The full version, including alpha/beta/rc tags 29 | release = u'' 30 | 31 | 32 | # -- General configuration --------------------------------------------------- 33 | 34 | # If your documentation needs a minimal Sphinx version, state it here. 35 | # 36 | # needs_sphinx = '1.0' 37 | 38 | # Add any Sphinx extension module names here, as strings. They can be 39 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 40 | # ones. 41 | extensions = [ 42 | 'sphinx.ext.githubpages', 43 | ] 44 | 45 | # Add any paths that contain templates here, relative to this directory. 46 | templates_path = ['_templates'] 47 | 48 | # The suffix(es) of source filenames. 49 | # You can specify multiple suffix as a list of string: 50 | # 51 | # source_suffix = ['.rst', '.md'] 52 | source_suffix = '.rst' 53 | 54 | # The master toctree document. 55 | master_doc = 'index' 56 | 57 | # The language for content autogenerated by Sphinx. Refer to documentation 58 | # for a list of supported languages. 59 | # 60 | # This is also used if you do content translation via gettext catalogs. 61 | # Usually you set "language" from the command line for these cases. 62 | language = None 63 | 64 | # List of patterns, relative to source directory, that match files and 65 | # directories to ignore when looking for source files. 66 | # This pattern also affects html_static_path and html_extra_path . 67 | exclude_patterns = [] 68 | 69 | # The name of the Pygments (syntax highlighting) style to use. 70 | pygments_style = 'sphinx' 71 | 72 | 73 | # -- Options for HTML output ------------------------------------------------- 74 | 75 | # The theme to use for HTML and HTML Help pages. See the documentation for 76 | # a list of builtin themes. 77 | # 78 | html_theme = 'sphinx_rtd_theme' 79 | html_logo = '_static/images/logo.png' 80 | 81 | # Theme options are theme-specific and customize the look and feel of a theme 82 | # further. For a list of options available for each theme, see the 83 | # documentation. 84 | # 85 | html_theme_options = { 86 | 'collapse_navigation': False 87 | } 88 | 89 | # Add any paths that contain custom static files (such as style sheets) here, 90 | # relative to this directory. They are copied after the builtin static files, 91 | # so a file named "default.css" will overwrite the builtin "default.css". 92 | html_static_path = ['_static'] 93 | 94 | # Custom sidebar templates, must be a dictionary that maps document names 95 | # to template names. 96 | # 97 | # The default sidebars (for documents that don't match any pattern) are 98 | # defined by theme itself. Builtin themes are using these templates by 99 | # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', 100 | # 'searchbox.html']``. 101 | # 102 | # html_sidebars = {} 103 | 104 | 105 | # -- Options for HTMLHelp output --------------------------------------------- 106 | 107 | # Output file base name for HTML help builder. 108 | htmlhelp_basename = 'Anboxdoc' 109 | 110 | 111 | # -- Options for LaTeX output ------------------------------------------------ 112 | 113 | latex_elements = { 114 | # The paper size ('letterpaper' or 'a4paper'). 115 | # 116 | # 'papersize': 'letterpaper', 117 | 118 | # The font size ('10pt', '11pt' or '12pt'). 119 | # 120 | # 'pointsize': '10pt', 121 | 122 | # Additional stuff for the LaTeX preamble. 123 | # 124 | # 'preamble': '', 125 | 126 | # Latex figure (float) alignment 127 | # 128 | # 'figure_align': 'htbp', 129 | } 130 | 131 | # Grouping the document tree into LaTeX files. List of tuples 132 | # (source start file, target name, title, 133 | # author, documentclass [howto, manual, or own class]). 134 | latex_documents = [ 135 | (master_doc, 'Anbox.tex', u'Anbox Documentation', 136 | u'Anbox Team', 'manual'), 137 | ] 138 | 139 | 140 | # -- Options for manual page output ------------------------------------------ 141 | 142 | # One entry per manual page. List of tuples 143 | # (source start file, name, description, authors, manual section). 144 | man_pages = [ 145 | (master_doc, 'anbox', u'Anbox Documentation', 146 | [author], 1) 147 | ] 148 | 149 | 150 | # -- Options for Texinfo output ---------------------------------------------- 151 | 152 | # Grouping the document tree into Texinfo files. List of tuples 153 | # (source start file, target name, title, author, 154 | # dir menu entry, description, category) 155 | texinfo_documents = [ 156 | (master_doc, 'Anbox', u'Anbox Documentation', 157 | author, 'Anbox', 'One line description of project.', 158 | 'Miscellaneous'), 159 | ] 160 | --------------------------------------------------------------------------------