Supported features (AOSP vs AAOS)

Note: With the latest 1.23.0 release, the Anbox Cloud documentation is moved to https://documentation.ubuntu.com/anbox-cloud/en/latest/. Hence, the information in this discourse post may be obsolete. The documentation posts on discourse will be unlisted and archived shortly.
Discourse will still be used for user engagement and release announcements.

Anbox Cloud provides images based on the Android Open Source Project (AOSP), an operating system typically used in mobile devices or an Anbox Cloud AAOS image which is based on the Android Automotive OS (AAOS), an infotainment platform used in automobiles. Supported Anbox features differ depending what a given image is based on.

The following table lists some Anbox features and whether they are supported for a given base.

Feature AOSP AAOS
boot-package and boot-activity in application manifest -
Install app as system app -
Custom Android ID -
VHAL HTTP API -
VhalConnector in Platform SDK API -
Custom images -

Feature flags

Some features which are not enabled by default but can be conditionally enabled. The features are enabled by flags which are configured through AMS. You can configure the feature flags either globally for all instances or per application.

To configure a feature globally for all instances, use a command similar to the following:

amc config set instance.features foo,bar

To configure a feature for one application in the manifest, use a syntax similar to the following:

name: my-app
resources:
  cpus: 4
  memory: 3GB
  disk-size: 3GB
features: ["foo", "bar"]

System UI

since 1.10.2

By default, Anbox hides the Android system UI when an application is running in foreground mode. In some use cases, however, it’s required to have the system UI available for navigation purposes. This can be enabled with the enable_system_ui feature flag.

The feature flag will be considered by all new launched instances once set.

Virtual Keyboard

since 1.9.0

The Android virtual keyboard is disabled by default but can be enabled with the enable_virtual_keyboard feature flag.

For the feature to be considered, applications must be manually updated, because changes to allow the feature to work are only applied during the application bootstrap process.

Client-Side Virtual Keyboard

since 1.11.0

The client-side virtual keyboard is disabled by default but can be enabled with the enable_anbox_ime feature flag. It requires the client application to embed Anbox WebView which interacts with the client-side virtual keyboard for text editing and sends the text to the Android container.

For the feature to be considered, applications must be manually updated, because changes to allow the feature to work are only applied during the application bootstrap process.

WiFi

since 1.13.0

By default, Anbox sets up a virtual WiFi device, which sits on top of an Ethernet connection and simulates a real WiFi connection. This WiFi support can be optionally disabled with the disable_wifi feature flag.

The feature flag will be considered by all newly launched instances once set.

Android reboot

since 1.12.0

By default, Android is not allowed to reboot. With the allow_android_reboot feature flag, this can be allowed.

Note that you must disable the watchdog if reboots are allowed.

The feature flag will be considered by all newly launched instances once set.

Development settings

since 1.18.0

The Android development settings (which include an ADB connection) are enabled by default. Some applications require these settings to be disabled, which you can do with the disable_development_settings feature flag.

Once set, this feature flag will be considered by all newly launched instances.

Custom Android ID

since 1.18.0, supported on AOSP images only

To enable the Android container to use a custom Android ID, add the feature flag android.allow_custom_android_id upon application creation. A system app can influence the Android ID of a specific app during the Android runtime by setting the system property in the format of:

`anbox.custom_android_id.<index>=<package_name>:<android_id>`
  • The <index> is a number in the range from 0 to 126, which allows you to have multiple overrides for different packages. If the same <package_name> with the different <android_id> is given for multiple system properties anbox.custom_android_id.<index>, the Android ID read from the system property which has the highest suffixing index that will be used in the end.
  • The <package_name> is the package name of the application.
  • The <android_id> is a unique ID that represents the Android ID for the targeting application. It must be at least 16 characters in length.

Once set, this feature flag will be considered by all newly launched instances.

GL Async Swap Support

since 1.21.0

GL Async swap support is disabled by default for explicit signals of buffer swaps completion. To enable the GL async swap feature, add the feature flag emugl.enable_async_swap_support upon application creation. Once the async swap support is enabled, Anbox Cloud will use the host GL driver fence commands and file descriptors to synchronise the finished frames between the host and guest instead fully relying on the host GPU driver to do so. The environment variable ANBOX_ASYNC_SWAP_ENABLED_PACKAGES that accepts a comma-separated list of package names can be used to allow certain packages to use the GL async swap feature.

Once set, this feature flag will be considered by all newly launched instances.

WebRTC ICE candidate logging

since 1.20.2

Warning:

Enabling this will print IP addresses of WebRTC clients connecting to the Anbox Cloud instances in the logs without anonymization in clear text.

For debugging purposes, Anbox Cloud can log ICE candidates from the server and client inside the system log of an instance. This is disabled by default and needs to be explicitly turned on with the feature flag webrtc.enable_ice_logging.

Once set, this feature flag will be considered by all newly launched instances.