X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fdocs%2Fbuild-android.md;fp=src%2Ftype3_AndroidCloud%2Fanbox-master%2Fdocs%2Fbuild-android.md;h=9f543eeed62345de626a721093b1e26fc4680b61;hb=e26c1ec581be598521517829adba8c8dd23a768f;hp=0000000000000000000000000000000000000000;hpb=6699c1aea74eeb0eb400e6299079f0c7576f716f;p=iec.git diff --git a/src/type3_AndroidCloud/anbox-master/docs/build-android.md b/src/type3_AndroidCloud/anbox-master/docs/build-android.md new file mode 100644 index 0000000..9f543ee --- /dev/null +++ b/src/type3_AndroidCloud/anbox-master/docs/build-android.md @@ -0,0 +1,117 @@ +# Build Android Image + +For Anbox we're using a minimal customized version of Android but otherwise +base all our work of a recent release of the [Android Open Source Project](https://source.android.com/). + +To rebuild the Android image you need first fetch all relevant sources. This +will take quite a huge amount of your disk space (~40GB). AOSP recommends at +least 100GB of free disk space. Have a look at [their](https://source.android.com/source/requirements.html) pages too. + +In general for building the Anbox Andorid image the instructions found on [the pages +from the AOSP project](https://source.android.com/source/requirements.html) apply. +We will not describe again here of how to build the Android system in general but +only focus on the steps required for Anbox. + +## Fetch all relevant sources + +First setup a new workspace where you will download all sources too. + +``` +$ mkdir $HOME/anbox-work +``` + +Now initialize the repository by download the manifest and start fetching +the sources: + +``` +$ cd $HOME/anbox-work +$ repo init -u https://github.com/anbox/platform_manifests.git -b anbox +$ repo sync -j4 +``` + +This will take quite some time depending on the speed of your internet connection. + +## Build Android + +When all sources are successfully downloaded you can start building Android itself. + +Firstly initialize the environment with the ```envsetup.sh``` script. + +``` +$ . build/envsetup.sh +``` + +Then initialize the build using ```lunch```. + +``` +$ lunch anbox_x86_64-userdebug +``` + +The complete list of supported build targets: + + * anbox_x86_64-userdebug + * anbox_armv7a_neon-userdebug + * anbox_arm64-userdebug + +Now build everything with + +``` +$ make -j8 +``` + +Once the build is done we need to take the results and create an image file +suitable for Anbox. + +``` +$ cd $HOME/anbox-work/vendor/anbox +$ scripts/create-package.sh \ + $PWD/../out/target/product/x86_64/ramdisk.img \ + $PWD/../out/target/product/x86_64/system.img +``` + +This will create an *android.img* file in the current directory. + +With this, you are now able to use your custom image within the Anbox runtime. + +## Run Anbox with self build android.img + +If you have Anbox installed on your system you need to stop it first. If you used +the installer script and the snap you can do this via + +``` +$ initctl stop anbox +$ sudo systemctl stop snap.anbox.container-manager +``` + +It is important that you stop both, the container manager and the session manager. + +Once both services are stopped you can start the container manager with your +custom android.img file by running + +``` +$ datadir=$HOME/anbox-data +$ mkdir -p $datadir/rootfs +$ sudo anbox container-manager \ + --android-image=/path/to/android.img \ + --data-path=$datadir +``` + +This will start the container manager and setup the container rootfs inside the +specified data path. + +``` +$ ls -alh $HOME/anbox-data +total 20K +drwxrwxr-x 5 ubuntu ubuntu 4,0K Feb 22 08:04 . +drwxrwxr-x 16 ubuntu ubuntu 4,0K Feb 22 08:04 .. +drwxr-xr-x 2 100000 100000 4,0K Feb 22 08:04 cache +drwxr-xr-x 2 100000 100000 4,0K Feb 22 08:04 data +drwxr-xr-x 2 root root 4,0K Feb 22 08:04 rootfs +``` + +**NOTE:** If you look into the $HOME/anbox-data/rootfs directory you won't see +anything as the container manager spawns up a private mount namespace which +prevents anything from the outside to see its mount points. + +The *cache* and *data* directories are bind-mounted into the rootfs at *rootfs/data* +and *rootfs/cache*.