# ANGLE for Android

**Important note**: Android builds currently require Linux.

## Setting up the ANGLE build for Android

Please follow the instructions in [DevSetup](DevSetup.md) to check out and bootstrap ANGLE with
gclient. Then edit your `.gclient` to add `target_os = ['android']` to check out Android
dependencies. Then run `gclient sync` to download all required sources and packages.

The following command will open a text editor to populate GN args for an Android Release build:
```
gn args out/Android
```

Once the editor is up, paste the following GN args to generate an Android build, and save the file.
```
target_os = "android"
target_cpu = "arm64"
is_component_build = false
is_debug = false
angle_assert_always_on = true   # Recommended for debugging. Turn off for performance.
use_goma = true                 # Googlers-only! If you're not a Googler remove this.
```

More targeted GN arg combinations can be found [below](#android-gn-args-combinations).

If you run into any problems with the above, you can copy the canonical args from CI:
 - Visit the ANGLE [CI Waterfall](https://ci.chromium.org/p/angle/g/ci/console).
 - Open any recent Android build.
 - Expand the for "lookup GN args" step and copy the GN args.
 - Always omit the `goma_dir` flag.
 - If you are not a Googler, also omit the `use_goma` flag.

## Building ANGLE for Android

Build all ANGLE targets using the following command:

```
autoninja -C out/Android
```

Most ANGLE build targets are supported. We do not support the ANGLE samples on
Android currently. ANGLE tests will be in your `out/Android` directory, and can
be run with various options. For instance, angle perftests can be run with:

```
./out/Android/angle_perftests --verbose --local-output --gtest_filter=DrawCallPerf*
```

Additional details are in [Android Test Instructions][AndroidTest].

Additional Android dEQP notes can be found in [Running dEQP on Android](dEQP.md#Running-dEQP-on-Android).

If you are targeting WebGL and want to run with ANGLE, you will need to build within a full
Chromium checkout. Please follow the [Chromium build instructions for Android][ChromeAndroid].
Also refer to the [ANGLE Guide][ANGLEChrome] on how to work with Top of Tree ANGLE in Chromium.
Build the `chrome_public_apk` target, and follow the [GPU Testing][GPU Testing] doc, using
`--browser=android-chromium`. Make sure to set your `CHROMIUM_OUT_DIR` environment variable, so
that your browser is found, otherwise the tests will use the stock browser.

[AndroidTest]: https://chromium.googlesource.com/chromium/src/+/main/docs/testing/android_test_instructions.md
[GPU Testing]: http://www.chromium.org/developers/testing/gpu-testing#TOC-Running-the-GPU-Tests-Locally
[ChromeAndroid]: https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md
[ANGLEChrome]: BuildingAngleForChromiumDevelopment.md

## Using ANGLE as the Android OpenGL ES driver

Starting with Android 10 (Q), you can load ANGLE as your device's OpenGL ES driver.

`== Important Note ==` You can only run this ANGLE with *DEBUGGABLE APPS* or when you have
*ROOT ACCESS*. Debuggable apps are [marked debuggable][Debuggable] in the manifest. For root
access, see the [Android documentation][UserDebug] for how to build from source.

To build the ANGLE APK, you must first bootstrap your build by following the steps
[above](#ANGLE-for-Android). The steps below will result in an APK that contains the ANGLE
libraries and can be installed on any Android 10+ build.

Apps can be opted in to ANGLE [one at a time](#ANGLE-for-a-single-OpenGL-ES-app), in
[groups](#ANGLE-for-multiple-OpenGL-ES-apps), or [globally](#ANGLE-for-all-OpenGL-ES-apps). The
apps must be launched by the Java runtime since the libraries are discovered within an installed
package. This means ANGLE cannot be used by native executables or SurfaceFlinger at this time.

## Building the ANGLE APK

Using `gn args` from above, you can build the ANGLE apk using:
```
autoninja -C out/Android angle_apks
```

## Installing the ANGLE APK

```
adb install -r -d --force-queryable out/Android/apks/AngleLibraries.apk
```
You can verify installation by looking for the package name:
```
$ adb shell pm path org.chromium.angle
package:/data/app/org.chromium.angle-HpkUceNFjoLYKPbIVxFWLQ==/base.apk
```

Note that `angle_debug_package` must be set to `org.chromium.angle` for this apk to be loaded.

## Selecting ANGLE as the OpenGL ES driver

For debuggable applications or root users, you can tell the platform to load ANGLE libraries from
the installed package.
```
adb shell settings put global angle_debug_package org.chromium.angle
```
Remember that ANGLE can only be used by applications launched by the Java runtime.

## ANGLE driver choices

There are multiple values you can use for selecting which OpenGL ES driver is loaded by the platform.

The following values are supported for `angle_gl_driver_selection_values`:
 - `angle` : Use ANGLE.
 - `native` : Use the native OpenGL ES driver.
 - `default` : Use the default driver. This allows the platform to decide which driver to use.

In each section below, replace `<driver>` with one of the values above.

### ANGLE for a *single* OpenGL ES app

```
adb shell settings put global angle_gl_driver_selection_pkgs <package name>
adb shell settings put global angle_gl_driver_selection_values <driver>
```

### ANGLE for *multiple* OpenGL ES apps

Similar to selecting a single app, you can select multiple applications by listing their package
names and driver choice in comma separated lists.  Note the lists must be the same length, one
driver choice per package name.
```
adb shell settings put global angle_gl_driver_selection_pkgs <package name 1>,<package name 2>,<package name 3>,...
adb shell settings put global angle_gl_driver_selection_values <driver 1>,<driver 2>,<driver 3>,...
```

### ANGLE for *all* OpenGL ES apps

`Note: This method only works on a device with root access.`

Enable:
```
adb shell settings put global angle_gl_driver_all_angle 1
```
Disable:
```
adb shell settings put global angle_gl_driver_all_angle 0
```

## Check for success

Check to see that ANGLE was loaded by your application:
```
$ adb logcat -d | grep ANGLE
V GraphicsEnvironment: ANGLE developer option for <package name>: angle
I GraphicsEnvironment: ANGLE package enabled: org.chromium.angle
I ANGLE   : Version (2.1.0.f87fac56d22f), Renderer (Vulkan 1.1.87(Adreno (TM) 615 (0x06010501)))
```

Note that this might be logged by the built-in ANGLE and not the installed apk if `angle_debug_package` wasn't set.

## Clean up

Settings persist across reboots, so it is a good idea to delete them when finished.
```
adb shell settings delete global angle_debug_package
adb shell settings delete global angle_gl_driver_all_angle
adb shell settings delete global angle_gl_driver_selection_pkgs
adb shell settings delete global angle_gl_driver_selection_values
```

## Troubleshooting

If your application is not debuggable or you are not root, you may see an error like this in the log:
```
$ adb logcat -d | grep ANGLE
V GraphicsEnvironment: ANGLE developer option for <package name>: angle
E GraphicsEnvironment: Invalid number of ANGLE packages. Required: 1, Found: 0
E GraphicsEnvironment: Failed to find ANGLE package.
```
Double check that you are root, or that your application is [marked debuggable][Debuggable].

## Android GN args combinations

The [above](#angle-gn-args-for-android) GN args only modify default values to generate a Debug
build for Android. Below are some common configurations used for different scenarios.

To determine what is different from default, you can point the following command at your target
directory. It will show the list of gn args in use, where they came from, their current value,
and their default values.
```
gn args --list <dir>
```

### Performance config

This config is designed to get maximum performance by disabling debug configs and validation layers.
Note: The oddly named `is_official_build` is a more aggressive optimization level than `Release`. Its name is historical.
```
target_os = "android"
target_cpu = "arm64"
angle_enable_vulkan = true
is_component_build = false
is_official_build = true
is_debug = false
```

### Debug config

This config is useful for quickly ensuring Vulkan is running cleanly. It disables debug, but
enables asserts and allows validation errors.
```
target_os = "android"
target_cpu = "arm64"
is_component_build = false
is_debug = true
```

#### Application Compatibility

Application compatibility may be increased by enabling non-conformant features and extensions with
a GN arg:

```
angle_expose_non_conformant_extensions_and_versions = true
```

## Accessing ANGLE traces

To sync and build the ANGLE traces, jump to [ANGLE Restricted Traces](https://chromium.googlesource.com/angle/angle.git/+/HEAD/src/tests/restricted_traces/README.md#angle-restricted-traces).

## Command line for launching chrome on Android

[This Makefile](https://github.com/phuang/test/blob/main/chromium/Makefile) contains many useful
command lines for launching chrome.

Targets run_chrome_public_apk_* is for launching chrome on Android.

To use this Makefile, download it into chrome build tree, and use below commands (for more targets please check Makefile)
```
# To edit gn args
$ make args OUT=out_android/Release  # The OUT can be set in Makefile instead of passing it in command line

# Build and run chrome on Android device with GLRenderer
$ make run_chrome_public_apk_gl

# Build and run chrome on Android device with SkiaRenderer
$ make run_chrome_public_apk_skia

# Run adb logcat
$ make adb_logcat

# Symbolize Android crash stack
$ make android_symbol

# Build and run gpu_unittests
$ make gpu_unittests GTEST_FILTER="gtest-filters" # If GTEST_FILTER is not specified, all tests will be run.
```

[Debuggable]: https://developer.android.com/guide/topics/manifest/application-element#debug
[UserDebug]: https://source.android.com/setup/build/building
