Anbox puts the Android operating system into a container, abstracts hardware access and integrates core system services into a GNU/Linux system. Every Android application will be integrated with your operating system like any other native application.
To achieve our goal we use standard Linux technologies like containers (LXC) to separate the Android operating system from the host. Any Android version is suitable for this approach and we try to keep up with the latest available version from the Android Open Source Project.
The whole source code is available as Open Source and licensed under the terms of the Apache and GPLv3 license.
As Anbox is running an entire Android system, conceptually any application can run.
Anbox puts Android apps into a tightly sealed box without direct access to hardware or your data.
Runs Android without hardware virtualization and seamlessly bridges over hardware acceleration features.
Tightly integrated with the host operating system to offer a rich feature set.
Anbox scales across different form factors similar like Android does. It works on a laptop and a mobile phone.
Projects like Shashlik or Genimobile use an emulator to run the Android environment. The emulator creates an entire emulated system which has its own kernel etc whereas Anbox runs the Android system under the same kernel as the host operating system does. No emulation layer like QEMU is necessary. Everything runs directly on the hardware. This approach also allows a much better integration with the host operating system.
Yes, this is generally possible. However Google doesn't allow anyone to ship its applications as long as the device is not certified and the vendor didn't sign an agreement with Google.
The Anbox project does not have any interest in shipping the Google Play store and we're not allowed to do so. We may add an easy way for our users at a later point which allows easy distribution of Android applications suited for the Anbox runtime environment.
There is no easy way yet for a user to install applications into the Anbox runtime, other than using the Android Debug Bridge (adb). When you have adb installed on your host system you can install applications like this:
$ adb install path/to/my-app.apk
Afterwards your application should be installed as part of the Anbox runtime and can be launched via the host system application launcher.
Google is implementing support in Chrome OS for Android applications in a very similar way as we do. Both approaches are quite similar as both put Android into a lightweight system container based on Linux namespaces and keep a small bridge to allow communication with the host system.
In contrast to Google's implementation, Anbox doesn't allow any direct access to hardware devices. For example it bridges Open GL ES to the host. In Chrome OS the container gets access to the host kernel side of the graphic subsystem to allow fast rendering. In our case, we decided against this to keep an easy way to port Anbox to different platforms. All a host operating system needs to provide is a Open GL / Open GL ES compatible driver to provide proper integration with the graphics subsystem. Other hardware devices like WiFi or Bluetooth will be abstracted in the future via a dedicated APIs between the container and the host.
As we provide a complete Android system generally all applications are supposed to work. However there are a few exceptions:
If your application depends on particular hardware functionality like WiFi, Bluetooth or telephony, we need additional work to bridge those over from the host system. As of right now the only thing you can do is to ensure your application behaves correct when these functionalities are not available.
Anbox uses the freeform mode introduced with Android 7 which allows a multi-window system. Your applications needs to play well within the freeform mode to work well in Anbox. You can find more details in the Android Developer Documentation.
Most likely it's not your fault. Anbox is still in its early days and doesn't have much test coverage across a wide range of different systems yet. If Anbox doesn't start for you, please follow the instructions here and file a bug report so that a developer can look into the problem.
The initial proof-of-concept was done on an Ubuntu Touch based device. Since then Anbox has evolved quite a bit, making desktop devices its main development focus. However, recent experiments show that Anbox still runs fine (with a few tweaks and lifted confinement because of older kernel versions) on mobile devices based on Ubuntu Touch.
We know that other projects like UBports or LuneOS are highly interested in running Anbox as part of their distribution. There is already a close relationship with people from these communities, but concrete plans are not yet available and subject of each community project.
Anbox is currently only distributed as a snap as snaps makes the life for us developers pretty easy. They allow us fast and easy packaging, easy distribution to our users, as well as regular and fast updates. Flatpak would be another alternative but we didn't investigate this yet, nor are we planing to do so in the near future. However, we're happy to accept contributions from the community around Anbox to provide necessary changes to distribute Anbox as a flatpak package too.
One thing which Anbox currently doesn't do is using proper confinement for snaps. Right now it is only usable when installed in the so-called devmode of snaps which disables any confinement. This is something we will work on over the coming months with upstream to allow our snap to be fully confined.
Despite snap confinement being disabled, the Android system still stays separate through the use of Linux namespaces from the host system.
No. Anbox does not need a specific Android image for every device as it is specifically built in a device independent way. Anbox will ship with a single Android image per architecture (amd64, armhf, arm64) and no device specifc modifications are required.
Ready to start using Anbox and what to help develop it? We have development instructions available here which you can follow to get easily started.
If you find any bugs please report them on our Github project.