1*8975f5c5SAndroid Build Coastguard Worker# ANGLE for Android 2*8975f5c5SAndroid Build Coastguard Worker 3*8975f5c5SAndroid Build Coastguard Worker**Important note**: Android builds currently require Linux. 4*8975f5c5SAndroid Build Coastguard Worker 5*8975f5c5SAndroid Build Coastguard Worker## Setting up the ANGLE build for Android 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard WorkerPlease follow the instructions in [DevSetup](DevSetup.md) to check out and bootstrap ANGLE with 8*8975f5c5SAndroid Build Coastguard Workergclient. Then edit your `.gclient` to add `target_os = ['android']` to check out Android 9*8975f5c5SAndroid Build Coastguard Workerdependencies. Then run `gclient sync` to download all required sources and packages. 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard WorkerThe following command will open a text editor to populate GN args for an Android Release build: 12*8975f5c5SAndroid Build Coastguard Worker``` 13*8975f5c5SAndroid Build Coastguard Workergn args out/Android 14*8975f5c5SAndroid Build Coastguard Worker``` 15*8975f5c5SAndroid Build Coastguard Worker 16*8975f5c5SAndroid Build Coastguard WorkerOnce the editor is up, paste the following GN args to generate an Android build, and save the file. 17*8975f5c5SAndroid Build Coastguard Worker``` 18*8975f5c5SAndroid Build Coastguard Workertarget_os = "android" 19*8975f5c5SAndroid Build Coastguard Workertarget_cpu = "arm64" 20*8975f5c5SAndroid Build Coastguard Workeris_component_build = false 21*8975f5c5SAndroid Build Coastguard Workeris_debug = false 22*8975f5c5SAndroid Build Coastguard Workerangle_assert_always_on = true # Recommended for debugging. Turn off for performance. 23*8975f5c5SAndroid Build Coastguard Workeruse_remoteexec = true # Googlers-only! If you're not a Googler remove this. 24*8975f5c5SAndroid Build Coastguard Worker``` 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard WorkerMore targeted GN arg combinations can be found [below](#android-gn-args-combinations). 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard WorkerIf you run into any problems with the above, you can copy the canonical args from CI: 29*8975f5c5SAndroid Build Coastguard Worker - Visit the ANGLE [CI Waterfall](https://ci.chromium.org/p/angle/g/ci/console). 30*8975f5c5SAndroid Build Coastguard Worker - Open any recent Android build. 31*8975f5c5SAndroid Build Coastguard Worker - Expand the for "lookup GN args" step and copy the GN args. 32*8975f5c5SAndroid Build Coastguard Worker - If you are not a Googler, also omit the `use_remoteexec` flag. 33*8975f5c5SAndroid Build Coastguard Worker 34*8975f5c5SAndroid Build Coastguard Worker## Building ANGLE for Android 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard WorkerBuild all ANGLE targets using the following command: 37*8975f5c5SAndroid Build Coastguard Worker 38*8975f5c5SAndroid Build Coastguard Worker``` 39*8975f5c5SAndroid Build Coastguard Workerautoninja -C out/Android 40*8975f5c5SAndroid Build Coastguard Worker``` 41*8975f5c5SAndroid Build Coastguard Worker 42*8975f5c5SAndroid Build Coastguard WorkerMost ANGLE build targets are supported. We do not support the ANGLE samples on 43*8975f5c5SAndroid Build Coastguard WorkerAndroid currently. ANGLE tests will be in your `out/Android` directory, and can 44*8975f5c5SAndroid Build Coastguard Workerbe run with various options. For instance, angle perftests can be run with: 45*8975f5c5SAndroid Build Coastguard Worker 46*8975f5c5SAndroid Build Coastguard Worker``` 47*8975f5c5SAndroid Build Coastguard Worker./out/Android/angle_perftests --verbose --local-output --gtest_filter=DrawCallPerf* 48*8975f5c5SAndroid Build Coastguard Worker``` 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard WorkerAdditional details are in [Android Test Instructions][AndroidTest]. 51*8975f5c5SAndroid Build Coastguard Worker 52*8975f5c5SAndroid Build Coastguard WorkerAdditional Android dEQP notes can be found in [Running dEQP on Android](dEQP.md#Running-dEQP-on-Android). 53*8975f5c5SAndroid Build Coastguard Worker 54*8975f5c5SAndroid Build Coastguard WorkerIf you are targeting WebGL and want to run with ANGLE, you will need to build within a full 55*8975f5c5SAndroid Build Coastguard WorkerChromium checkout. Please follow the [Chromium build instructions for Android][ChromeAndroid]. 56*8975f5c5SAndroid Build Coastguard WorkerAlso refer to the [ANGLE Guide][ANGLEChrome] on how to work with Top of Tree ANGLE in Chromium. 57*8975f5c5SAndroid Build Coastguard WorkerBuild the `chrome_public_apk` target, and follow the [GPU Testing][GPU Testing] doc, using 58*8975f5c5SAndroid Build Coastguard Worker`--browser=android-chromium`. Make sure to set your `CHROMIUM_OUT_DIR` environment variable, so 59*8975f5c5SAndroid Build Coastguard Workerthat your browser is found, otherwise the tests will use the stock browser. 60*8975f5c5SAndroid Build Coastguard Worker 61*8975f5c5SAndroid Build Coastguard Worker[AndroidTest]: https://chromium.googlesource.com/chromium/src/+/main/docs/testing/android_test_instructions.md 62*8975f5c5SAndroid Build Coastguard Worker[GPU Testing]: http://www.chromium.org/developers/testing/gpu-testing#TOC-Running-the-GPU-Tests-Locally 63*8975f5c5SAndroid Build Coastguard Worker[ChromeAndroid]: https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md 64*8975f5c5SAndroid Build Coastguard Worker[ANGLEChrome]: BuildingAngleForChromiumDevelopment.md 65*8975f5c5SAndroid Build Coastguard Worker 66*8975f5c5SAndroid Build Coastguard Worker## Using ANGLE as the Android OpenGL ES driver 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard WorkerStarting with Android 10 (Q), you can load ANGLE as your device's OpenGL ES driver. 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker`== Important Note ==` You can only run this ANGLE with *DEBUGGABLE APPS* or when you have 71*8975f5c5SAndroid Build Coastguard Worker*ROOT ACCESS*. Debuggable apps are [marked debuggable][Debuggable] in the manifest. For root 72*8975f5c5SAndroid Build Coastguard Workeraccess, see the [Android documentation][UserDebug] for how to build from source. 73*8975f5c5SAndroid Build Coastguard Worker 74*8975f5c5SAndroid Build Coastguard WorkerTo build the ANGLE APK, you must first bootstrap your build by following the steps 75*8975f5c5SAndroid Build Coastguard Worker[above](#ANGLE-for-Android). The steps below will result in an APK that contains the ANGLE 76*8975f5c5SAndroid Build Coastguard Workerlibraries and can be installed on any Android 10+ build. 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard WorkerApps can be opted in to ANGLE [one at a time](#ANGLE-for-a-single-OpenGL-ES-app), in 79*8975f5c5SAndroid Build Coastguard Worker[groups](#ANGLE-for-multiple-OpenGL-ES-apps), or [globally](#ANGLE-for-all-OpenGL-ES-apps). The 80*8975f5c5SAndroid Build Coastguard Workerapps must be launched by the Java runtime since the libraries are discovered within an installed 81*8975f5c5SAndroid Build Coastguard Workerpackage. This means ANGLE cannot be used by native executables or SurfaceFlinger at this time. 82*8975f5c5SAndroid Build Coastguard Worker 83*8975f5c5SAndroid Build Coastguard Worker## Building the ANGLE APK 84*8975f5c5SAndroid Build Coastguard Worker 85*8975f5c5SAndroid Build Coastguard WorkerUsing `gn args` from above, you can build the ANGLE apk using: 86*8975f5c5SAndroid Build Coastguard Worker``` 87*8975f5c5SAndroid Build Coastguard Workerautoninja -C out/Android angle_apks 88*8975f5c5SAndroid Build Coastguard Worker``` 89*8975f5c5SAndroid Build Coastguard Worker 90*8975f5c5SAndroid Build Coastguard Worker## Installing the ANGLE APK 91*8975f5c5SAndroid Build Coastguard Worker 92*8975f5c5SAndroid Build Coastguard Worker``` 93*8975f5c5SAndroid Build Coastguard Workeradb install -r -d --force-queryable out/Android/apks/AngleLibraries.apk 94*8975f5c5SAndroid Build Coastguard Worker``` 95*8975f5c5SAndroid Build Coastguard WorkerYou can verify installation by looking for the package name: 96*8975f5c5SAndroid Build Coastguard Worker``` 97*8975f5c5SAndroid Build Coastguard Worker$ adb shell pm path org.chromium.angle 98*8975f5c5SAndroid Build Coastguard Workerpackage:/data/app/org.chromium.angle-HpkUceNFjoLYKPbIVxFWLQ==/base.apk 99*8975f5c5SAndroid Build Coastguard Worker``` 100*8975f5c5SAndroid Build Coastguard Worker 101*8975f5c5SAndroid Build Coastguard WorkerNote that `angle_debug_package` must be set to `org.chromium.angle` for this apk to be loaded. 102*8975f5c5SAndroid Build Coastguard Worker 103*8975f5c5SAndroid Build Coastguard Worker## Selecting ANGLE as the OpenGL ES driver 104*8975f5c5SAndroid Build Coastguard Worker 105*8975f5c5SAndroid Build Coastguard WorkerFor debuggable applications or root users, you can tell the platform to load ANGLE libraries from 106*8975f5c5SAndroid Build Coastguard Workerthe installed package. 107*8975f5c5SAndroid Build Coastguard Worker``` 108*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_debug_package org.chromium.angle 109*8975f5c5SAndroid Build Coastguard Worker``` 110*8975f5c5SAndroid Build Coastguard WorkerRemember that ANGLE can only be used by applications launched by the Java runtime. 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard WorkerNote: Side-loading apk on Cuttlefish currently requires [special setup](#Cuttlefish-setup) 113*8975f5c5SAndroid Build Coastguard Worker 114*8975f5c5SAndroid Build Coastguard Worker## ANGLE driver choices 115*8975f5c5SAndroid Build Coastguard Worker 116*8975f5c5SAndroid Build Coastguard WorkerThere are multiple values you can use for selecting which OpenGL ES driver is loaded by the platform. 117*8975f5c5SAndroid Build Coastguard Worker 118*8975f5c5SAndroid Build Coastguard WorkerThe following values are supported for `angle_gl_driver_selection_values`: 119*8975f5c5SAndroid Build Coastguard Worker - `angle` : Use ANGLE. 120*8975f5c5SAndroid Build Coastguard Worker - `native` : Use the native OpenGL ES driver. 121*8975f5c5SAndroid Build Coastguard Worker - `default` : Use the default driver. This allows the platform to decide which driver to use. 122*8975f5c5SAndroid Build Coastguard Worker 123*8975f5c5SAndroid Build Coastguard WorkerIn each section below, replace `<driver>` with one of the values above. 124*8975f5c5SAndroid Build Coastguard Worker 125*8975f5c5SAndroid Build Coastguard Worker### ANGLE for a *single* OpenGL ES app 126*8975f5c5SAndroid Build Coastguard Worker 127*8975f5c5SAndroid Build Coastguard Worker``` 128*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_selection_pkgs <package name> 129*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_selection_values <driver> 130*8975f5c5SAndroid Build Coastguard Worker``` 131*8975f5c5SAndroid Build Coastguard Worker 132*8975f5c5SAndroid Build Coastguard Worker### ANGLE for *multiple* OpenGL ES apps 133*8975f5c5SAndroid Build Coastguard Worker 134*8975f5c5SAndroid Build Coastguard WorkerSimilar to selecting a single app, you can select multiple applications by listing their package 135*8975f5c5SAndroid Build Coastguard Workernames and driver choice in comma separated lists. Note the lists must be the same length, one 136*8975f5c5SAndroid Build Coastguard Workerdriver choice per package name. 137*8975f5c5SAndroid Build Coastguard Worker``` 138*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_selection_pkgs <package name 1>,<package name 2>,<package name 3>,... 139*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_selection_values <driver 1>,<driver 2>,<driver 3>,... 140*8975f5c5SAndroid Build Coastguard Worker``` 141*8975f5c5SAndroid Build Coastguard Worker 142*8975f5c5SAndroid Build Coastguard Worker### ANGLE for *all* OpenGL ES apps 143*8975f5c5SAndroid Build Coastguard Worker 144*8975f5c5SAndroid Build Coastguard Worker`Note: This method only works on a device with root access.` 145*8975f5c5SAndroid Build Coastguard Worker 146*8975f5c5SAndroid Build Coastguard WorkerEnable: 147*8975f5c5SAndroid Build Coastguard Worker``` 148*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_all_angle 1 149*8975f5c5SAndroid Build Coastguard Worker``` 150*8975f5c5SAndroid Build Coastguard WorkerDisable: 151*8975f5c5SAndroid Build Coastguard Worker``` 152*8975f5c5SAndroid Build Coastguard Workeradb shell settings put global angle_gl_driver_all_angle 0 153*8975f5c5SAndroid Build Coastguard Worker``` 154*8975f5c5SAndroid Build Coastguard Worker 155*8975f5c5SAndroid Build Coastguard Worker## Check for success 156*8975f5c5SAndroid Build Coastguard Worker 157*8975f5c5SAndroid Build Coastguard WorkerCheck to see that ANGLE was loaded by your application: 158*8975f5c5SAndroid Build Coastguard Worker``` 159*8975f5c5SAndroid Build Coastguard Worker$ adb logcat -d | grep ANGLE 160*8975f5c5SAndroid Build Coastguard WorkerV GraphicsEnvironment: ANGLE developer option for <package name>: angle 161*8975f5c5SAndroid Build Coastguard WorkerI GraphicsEnvironment: ANGLE package enabled: org.chromium.angle 162*8975f5c5SAndroid Build Coastguard WorkerI ANGLE : Version (2.1.0.f87fac56d22f), Renderer (Vulkan 1.1.87(Adreno (TM) 615 (0x06010501))) 163*8975f5c5SAndroid Build Coastguard Worker``` 164*8975f5c5SAndroid Build Coastguard Worker 165*8975f5c5SAndroid Build Coastguard WorkerNote that this might be logged by the built-in ANGLE and not the installed apk if `angle_debug_package` wasn't set. 166*8975f5c5SAndroid Build Coastguard Worker 167*8975f5c5SAndroid Build Coastguard Worker## Clean up 168*8975f5c5SAndroid Build Coastguard Worker 169*8975f5c5SAndroid Build Coastguard WorkerSettings persist across reboots, so it is a good idea to delete them when finished. 170*8975f5c5SAndroid Build Coastguard Worker``` 171*8975f5c5SAndroid Build Coastguard Workeradb shell settings delete global angle_debug_package 172*8975f5c5SAndroid Build Coastguard Workeradb shell settings delete global angle_gl_driver_all_angle 173*8975f5c5SAndroid Build Coastguard Workeradb shell settings delete global angle_gl_driver_selection_pkgs 174*8975f5c5SAndroid Build Coastguard Workeradb shell settings delete global angle_gl_driver_selection_values 175*8975f5c5SAndroid Build Coastguard Worker``` 176*8975f5c5SAndroid Build Coastguard Worker 177*8975f5c5SAndroid Build Coastguard Worker## Troubleshooting 178*8975f5c5SAndroid Build Coastguard Worker 179*8975f5c5SAndroid Build Coastguard WorkerIf your application is not debuggable or you are not root, you may see an error like this in the log: 180*8975f5c5SAndroid Build Coastguard Worker``` 181*8975f5c5SAndroid Build Coastguard Worker$ adb logcat -d | grep ANGLE 182*8975f5c5SAndroid Build Coastguard WorkerV GraphicsEnvironment: ANGLE developer option for <package name>: angle 183*8975f5c5SAndroid Build Coastguard WorkerE GraphicsEnvironment: Invalid number of ANGLE packages. Required: 1, Found: 0 184*8975f5c5SAndroid Build Coastguard WorkerE GraphicsEnvironment: Failed to find ANGLE package. 185*8975f5c5SAndroid Build Coastguard Worker``` 186*8975f5c5SAndroid Build Coastguard WorkerDouble check that you are root, or that your application is [marked debuggable][Debuggable]. 187*8975f5c5SAndroid Build Coastguard Worker 188*8975f5c5SAndroid Build Coastguard Worker## Android GN args combinations 189*8975f5c5SAndroid Build Coastguard Worker 190*8975f5c5SAndroid Build Coastguard WorkerThe [above](#angle-gn-args-for-android) GN args only modify default values to generate a Debug 191*8975f5c5SAndroid Build Coastguard Workerbuild for Android. Below are some common configurations used for different scenarios. 192*8975f5c5SAndroid Build Coastguard Worker 193*8975f5c5SAndroid Build Coastguard WorkerTo determine what is different from default, you can point the following command at your target 194*8975f5c5SAndroid Build Coastguard Workerdirectory. It will show the list of gn args in use, where they came from, their current value, 195*8975f5c5SAndroid Build Coastguard Workerand their default values. 196*8975f5c5SAndroid Build Coastguard Worker``` 197*8975f5c5SAndroid Build Coastguard Workergn args --list <dir> 198*8975f5c5SAndroid Build Coastguard Worker``` 199*8975f5c5SAndroid Build Coastguard Worker 200*8975f5c5SAndroid Build Coastguard Worker### Performance config 201*8975f5c5SAndroid Build Coastguard Worker 202*8975f5c5SAndroid Build Coastguard WorkerThis config is designed to get maximum performance by disabling debug configs and validation layers. 203*8975f5c5SAndroid Build Coastguard WorkerNote: The oddly named `is_official_build` is a more aggressive optimization level than `Release`. Its name is historical. 204*8975f5c5SAndroid Build Coastguard Worker``` 205*8975f5c5SAndroid Build Coastguard Workertarget_os = "android" 206*8975f5c5SAndroid Build Coastguard Workertarget_cpu = "arm64" 207*8975f5c5SAndroid Build Coastguard Workerangle_enable_vulkan = true 208*8975f5c5SAndroid Build Coastguard Workeris_component_build = false 209*8975f5c5SAndroid Build Coastguard Workeris_official_build = true 210*8975f5c5SAndroid Build Coastguard Workeris_debug = false 211*8975f5c5SAndroid Build Coastguard Worker``` 212*8975f5c5SAndroid Build Coastguard Worker 213*8975f5c5SAndroid Build Coastguard Worker### Debug config 214*8975f5c5SAndroid Build Coastguard Worker 215*8975f5c5SAndroid Build Coastguard WorkerThis config is useful for quickly ensuring Vulkan is running cleanly. It disables debug, but 216*8975f5c5SAndroid Build Coastguard Workerenables asserts and allows validation errors. 217*8975f5c5SAndroid Build Coastguard Worker``` 218*8975f5c5SAndroid Build Coastguard Workertarget_os = "android" 219*8975f5c5SAndroid Build Coastguard Workertarget_cpu = "arm64" 220*8975f5c5SAndroid Build Coastguard Workeris_component_build = false 221*8975f5c5SAndroid Build Coastguard Workeris_debug = true 222*8975f5c5SAndroid Build Coastguard Worker``` 223*8975f5c5SAndroid Build Coastguard Worker 224*8975f5c5SAndroid Build Coastguard Worker#### Application Compatibility 225*8975f5c5SAndroid Build Coastguard Worker 226*8975f5c5SAndroid Build Coastguard WorkerApplication compatibility may be increased by enabling non-conformant features and extensions with 227*8975f5c5SAndroid Build Coastguard Workera GN arg: 228*8975f5c5SAndroid Build Coastguard Worker 229*8975f5c5SAndroid Build Coastguard Worker``` 230*8975f5c5SAndroid Build Coastguard Workerangle_expose_non_conformant_extensions_and_versions = true 231*8975f5c5SAndroid Build Coastguard Worker``` 232*8975f5c5SAndroid Build Coastguard Worker 233*8975f5c5SAndroid Build Coastguard Worker### Cuttlefish setup 234*8975f5c5SAndroid Build Coastguard Worker 235*8975f5c5SAndroid Build Coastguard WorkerCuttlefish uses ANGLE as a system GL driver, on top of SwiftShader. It also uses SkiaGL (not SkiaVk) 236*8975f5c5SAndroid Build Coastguard Workerdue to a SwiftShader limitation. This enables preloading of GL libs - so in this case, ANGLE - into Zygote, 237*8975f5c5SAndroid Build Coastguard Workerwhich with the current implementation of the loader results in system libs being loaded instead of 238*8975f5c5SAndroid Build Coastguard Workerloading them from the debug apk. To workaround, a custom library name can be set via a GN arg: 239*8975f5c5SAndroid Build Coastguard Worker 240*8975f5c5SAndroid Build Coastguard Worker``` 241*8975f5c5SAndroid Build Coastguard Workerangle_libs_suffix = _angle_in_apk 242*8975f5c5SAndroid Build Coastguard Worker``` 243*8975f5c5SAndroid Build Coastguard Worker 244*8975f5c5SAndroid Build Coastguard Workerand enabled in the platform with this setting (mind the lack of a leading underscore compared to the above): 245*8975f5c5SAndroid Build Coastguard Worker 246*8975f5c5SAndroid Build Coastguard Worker``` 247*8975f5c5SAndroid Build Coastguard Workeradb shell setprop debug.angle.libs.suffix angle_in_apk 248*8975f5c5SAndroid Build Coastguard Worker``` 249*8975f5c5SAndroid Build Coastguard Worker 250*8975f5c5SAndroid Build Coastguard Worker## Accessing ANGLE traces 251*8975f5c5SAndroid Build Coastguard Worker 252*8975f5c5SAndroid Build Coastguard WorkerTo 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). 253*8975f5c5SAndroid Build Coastguard Worker 254*8975f5c5SAndroid Build Coastguard Worker## Command line for launching chrome on Android 255*8975f5c5SAndroid Build Coastguard Worker 256*8975f5c5SAndroid Build Coastguard Worker[This Makefile](https://github.com/phuang/test/blob/main/chromium/Makefile) contains many useful 257*8975f5c5SAndroid Build Coastguard Workercommand lines for launching chrome. 258*8975f5c5SAndroid Build Coastguard Worker 259*8975f5c5SAndroid Build Coastguard WorkerTargets run_chrome_public_apk_* is for launching chrome on Android. 260*8975f5c5SAndroid Build Coastguard Worker 261*8975f5c5SAndroid Build Coastguard WorkerTo use this Makefile, download it into chrome build tree, and use below commands (for more targets please check Makefile) 262*8975f5c5SAndroid Build Coastguard Worker``` 263*8975f5c5SAndroid Build Coastguard Worker# To edit gn args 264*8975f5c5SAndroid Build Coastguard Worker$ make args OUT=out_android/Release # The OUT can be set in Makefile instead of passing it in command line 265*8975f5c5SAndroid Build Coastguard Worker 266*8975f5c5SAndroid Build Coastguard Worker# Build and run chrome on Android device with GLRenderer 267*8975f5c5SAndroid Build Coastguard Worker$ make run_chrome_public_apk_gl 268*8975f5c5SAndroid Build Coastguard Worker 269*8975f5c5SAndroid Build Coastguard Worker# Build and run chrome on Android device with SkiaRenderer 270*8975f5c5SAndroid Build Coastguard Worker$ make run_chrome_public_apk_skia 271*8975f5c5SAndroid Build Coastguard Worker 272*8975f5c5SAndroid Build Coastguard Worker# Run adb logcat 273*8975f5c5SAndroid Build Coastguard Worker$ make adb_logcat 274*8975f5c5SAndroid Build Coastguard Worker 275*8975f5c5SAndroid Build Coastguard Worker# Symbolize Android crash stack 276*8975f5c5SAndroid Build Coastguard Worker$ make android_symbol 277*8975f5c5SAndroid Build Coastguard Worker 278*8975f5c5SAndroid Build Coastguard Worker# Build and run gpu_unittests 279*8975f5c5SAndroid Build Coastguard Worker$ make gpu_unittests GTEST_FILTER="gtest-filters" # If GTEST_FILTER is not specified, all tests will be run. 280*8975f5c5SAndroid Build Coastguard Worker``` 281*8975f5c5SAndroid Build Coastguard Worker 282*8975f5c5SAndroid Build Coastguard Worker[Debuggable]: https://developer.android.com/guide/topics/manifest/application-element#debug 283*8975f5c5SAndroid Build Coastguard Worker[UserDebug]: https://source.android.com/setup/build/building 284