blob: 5a3e3023dc0d061247f80078ebdd1bbc26652979 [file] [log] [blame] [view]
# WebView Build Instructions
*** promo
Building WebView for the first time? Please see the [quick
start](quick-start.md) guide first.
***
[TOC]
## Overview
This is meant to be a comprehensive guide for building WebView, within the
limits of what is possible in a **public** chromium checkout. While this is
sufficient for most cases, Googlers may wish to consult [internal
instructions][1] to get a checkout including closed-source code, which is
necessary if:
* You work on features depending on this closed-source code
* You want to use the "downstream" targets (ex. `trichrome_webview_google_apk`),
**or**
* You need to install on a preview Android release
## System requirements, tools, etc.
See general Android instructions for:
* [System
requirements](/docs/android_build_instructions.md#System-requirements)
* [Installing `depot_tools`](/docs/android_build_instructions.md#Install-depot_tools)
* [Getting the code](/docs/android_build_instructions.md#Get-the-code) **or**
[converting a Linux
checkout](/docs/android_build_instructions.md#Converting-an-existing-Linux-checkout)
* [Installing build
dependencies](/docs/android_build_instructions.md#Install-additional-build-dependencies)
**and** [running hooks](/docs/android_build_instructions.md#Run-the-hooks)
## Device setup
For the minimum requirements, please see [Device Setup](device-setup.md).
## Setting up the build
Configure GN args (run `gn args out/Default`) as follows:
```gn
target_os = "android"
# See "Figuring out target_cpu" below
target_cpu = "arm64"
# Not always necessary, see "Changing package name" below
system_webview_package_name = "..."
# Optional: speeds up build time. For instructions, refer to
# https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md#use-reclient
use_remoteexec = true
```
### Figuring out target\_cpu
Please see the [Chromium
instructions](/docs/android_build_instructions.md#Figuring-out-target_cpu).
## Building WebView
[Similarly to
Chrome](/docs/android_build_instructions.md#Multiple-Chrome-APK-Targets),
WebView can be compiled with a variety of build targets.
_TODO(crbug.com/41454956): document the differences between each target._
First, you should figure out your device's integer API level, which determines
which build targets will be compatible with the version of the OS on your
device:
```shell
adb shell getprop ro.build.version.sdk
```
*** promo
**Tip:** you can convert the API level integer to the release's dessert
codename with [this
table](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels).
This developer guide uses API integers and release letters interchangeably.
***
Then you can build one of the following targets:
```shell
autoninja -C out/Default trichrome_webview_apk
```
<!--
TODO(crbug.com/41454956): merge this and the other "Tip" when we
document the Trichrome target in detail.
-->
*** promo
**Tip:** building `trichrome_webview_apk` will automatically build its
dependencies (i.e., `trichrome_library_apk`).
***
### Changing package name
Unlike most Android apps, WebView is part of the Android framework. One of the
consequences of this is that the WebView implementation on the device can only
be provided by a predetermined set of package names (see
[details](webview-providers.md#Package-name)). Depending on the chosen build
target, you may need to change the package name to match one of the following:
<!-- Keep this table in sync with webview-providers.md -->
| API level | Has GMS vs. AOSP? | Allowed package names |
| -------------------- | ----------------- | --------------------- |
| >= Q | AOSP | `com.android.webview` **(default, preinstalled)** |
| >= Q | Has GMS | `com.google.android.webview` **(default, preinstalled)**<br>`com.google.android.webview.beta`<br>`com.google.android.webview.dev`<br>`com.google.android.webview.canary`<br>`com.google.android.webview.debug` **(only userdebug/eng)**<br>`com.android.webview` **(only userdebug/eng)** |
`trichrome_webview_apk` uses `com.android.webview` as the package name by
default. If your device allows this package name, continue to the [next
section](#removing-preinstalled-webview). Otherwise, you can change the package
name for either target by setting the `system_webview_package_name` GN arg (ex.
`system_webview_package_name = "com.google.android.webview"`).
See [internal instructions][1] for the Google-internal build targets
(`trichrome_webview_google_apk`).
*** note
**Note:** TV/car devices have a bug where the release key signed WebView is
preinstalled on all Android images, even those signed with dev-keys. Because
humans cannot access release keys (`use_signing_keys = true` provides "developer
test keys," not release keys), you must remove the preinstalled WebView (see
below).
***
### Removing preinstalled WebView
If WebView is preinstalled (under the chosen package name) in the device's
system image, you'll also need to remove the preinstalled APK (otherwise, you'll
see signature mismatches when installing). **You can skip this step** if
You [chose a package name](#Changing-package-name) which is not marked as
"(preinstalled)."
Otherwise, you can remove the preinstalled WebView like so:
```shell
android_webview/tools/remove_preinstalled_webview.py
```
*** note
If you're using an emulator, make sure to [start it with
`-writable-system`](/docs/android_emulator.md#writable-system-partition)
**before** removing the preinstalled WebView.
***
If the script doesn't work, see the [manual steps](removing-system-apps.md).
## Installing WebView and switching provider
For help connecting your Android device, see the [Chromium
instructions](/docs/android_build_instructions.md#Installing-and-Running-Chromium-on-a-device).
You can install a locally compiled APK like so:
```shell
# Install the APK
out/Default/bin/trichrome_webview_apk install
# Tell Android platform to load a WebView implementation from this APK
out/Default/bin/trichrome_webview_apk set-webview-provider
```
<!--
TODO(crbug.com/41454956): merge this and the other "Tip" when we
document the Trichrome target in detail.
-->
*** promo
**Tip:** `out/Default/bin/trichrome_webview_apk install` will handle installing
all its dependencies (i.e., `trichrome_library_apk`), so you can interact with
this target the same as you would interact with any other WebView build target.
***
## Start running an app
See [Start running an app](quick-start.md#start-running-an-app) from the quick
start.
## Troubleshooting
Please see the [Troubleshooting](quick-start.md#troubleshooting) section in the
quick start.
_TODO(ntfschr): document cases here which could arise generally, but wouldn't
for the quick start._
[1]: http://go/clank-webview/build_instructions.md
[2]: https://groups.google.com/a/chromium.org/forum/#!forum/android-webview-dev