| # Android Dev Tips | |
| Just an internal tips page for people working on the memory team. | |
| [TOC] | |
| ## Building clank | |
| See instructions on the official [android build | |
| page](/docs/android_build_instructions.md) for the most up to date info. | |
| However, it will tell you how to build _everything_ which is way way more than | |
| you need and way way harder. In short, you mostly need to do 3 (well, 2) | |
| things: | |
| 1. Create a gn out directory with `target_os="android"` in the GN args | |
| 2. Disable NaCl. (not strictly necessary, but it makes Albert feel better) | |
| 3. Build the `chrome_public_apk` | |
| ## Too much text! I just want to run my thing! | |
| Fine fine. First, ensure only one phone is attached. If you have multiple, | |
| you'll need to pass the device ID everywhere. Also, despite common wisdom, you | |
| do NOT have to root your phone. Anyways...here's command lines to copy-🍝. | |
| Get your environment setup (adb in your path, etc): | |
| ``` | |
| $ source build/android/envsetup.sh | |
| ``` | |
| Incremental build/deploy: | |
| ``` | |
| $ ninja -C out/clank -j1000 chrome_public_apk && ./build/android/adb_install_apk.py --keep_data out/clank/apks/ChromePublic.apk && ( ./build/android/adb_kill_chrome_public ; ./build/android/adb_run_chrome_public ) | |
| ``` | |
| Setting flags (**see next part!**): | |
| ``` | |
| $ ./build/android/adb_chrome_public_command_line --my-happy-flag-here | |
| ``` | |
| Select chromium as the system debug app to pick up flags!: | |
| * Go to the `Developer Options` in Android Settings | |
| * Find the `Select debug app` option. | |
| * Select Chromium (after your first install) | |
| If you neglect to do this AND you do not have a rooted phone, the | |
| `adb_chrome_public_command_line` tool cannot write a command line file into the | |
| right location for your Chrome binary to read. When in doubt, verify the flags | |
| in `about://version`. | |
| ## What is `chrome_public_apk`? | |
| This seems to be the Android moral equivalent of the the `chrome` target on | |
| desktop. It builds the APK that you want to install on your phone to run your | |
| version of chromium. | |
| ## Running logcat without going crazy. | |
| Logcat dumps a lot of system messages on periodic timers which can be noisy. | |
| Often you just want to look at stack traces and things from chrome logs. This | |
| can be filtered with a command like the following: | |
| ``` | |
| adb logcat -s chromium:* ActivityManager:* WindowManager:* libc:* DEBUG:* System.err:* | |
| ``` | |
| The `-s` silences everything that's not explicitly listed by default. | |
| `ActivityManager` shows the android life-cycle events for Chrome. `WindowManager` | |
| shows window changes. `libc` and `DEBUG` show stack traces. `System.err` is the | |
| Java interpretation of the C failures. And `chromium` is obviously the bulk of | |
| the interesting messages. | |
| ## Running telemetry (aka `./tools/perf/run_benchmark`) | |
| Passing in `--device=` with the correct id from `adb devices` will make the | |
| script talk to your phone. You will need to go to the `Developer Options` and | |
| force the screen to not lock. Then you can select the executable to run with | |
| one of: | |
| ``` | |
| --browser=exact --browser-executable=out/clank/apks/ChromePublic.apk | |
| ``` | |
| or if you want to run something already installed on the phone, there's a set of | |
| nifty options to `--browser` like: | |
| ``` | |
| --browser=android-chrome-chrome | |
| --browser=android-chrome-beta | |
| --browser=android-chrome-dev | |
| --browser=android-chrome-canary | |
| --browser=android-chrome-chromium | |
| ``` |