blob: aac73297b5872f2aa27b1a03de0ae4adc8e4cdf6 [file] [log] [blame] [view]
dprankec641a5342017-04-04 02:35:011# Checking out and building Cast for Android
2
3**Note**: it is **not possible** to build a binary functionally
4equivalent to a Chromecast. This is to build a single-page content
5embedder with similar functionality to Cast products.
6
7## Instructions for Google Employees
8
9Are you a Google employee? See
10[go/building-android-cast](https://goto.google.com/building-android-cast) instead.
11
12[TOC]
13
14## System requirements
15
Bruce Dawsonc2661722024-06-12 19:44:2916* An x86-64 machine running Linux with at least 8GB of RAM. More than 16GB is
17 highly recommended.
dprankec641a5342017-04-04 02:35:0118* At least 100GB of free disk space.
19* You must have Git and Python installed already.
20
21Most development is done on Ubuntu. Other distros may or may not work;
Tom Anderson93e49e492019-12-23 19:55:3722see the [Linux instructions](linux/build_instructions.md) for some suggestions.
dprankec641a5342017-04-04 02:35:0123
24Building the Android client on Windows or Mac is not supported and doesn't work.
25
26## Install `depot_tools`
27
28Clone the `depot_tools` repository:
29
30```shell
31$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
32```
33
34Add `depot_tools` to the end of your PATH (you will probably want to put this
35in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools`
36to `/path/to/depot_tools`:
37
38```shell
39$ export PATH="$PATH:/path/to/depot_tools"
40```
41
42## Get the code
43
44Create a `chromium` directory for the checkout and change to it (you can call
45this whatever you like and put it wherever you like, as
46long as the full path has no spaces):
47
48```shell
49$ mkdir ~/chromium && cd ~/chromium
50$ fetch --nohooks android
51```
52
53If you don't want the full repo history, you can save a lot of time by
54adding the `--no-history` flag to `fetch`.
55
56Expect the command to take 30 minutes on even a fast connection, and many
57hours on slower ones.
58
59If you've already installed the build dependencies on the machine (from another
60checkout, for example), you can omit the `--nohooks` flag and `fetch`
61will automatically execute `gclient runhooks` at the end.
62
63When `fetch` completes, it will have created a hidden `.gclient` file and a
64directory called `src` in the working directory. The remaining instructions
65assume you have switched to the `src` directory:
66
67```shell
68$ cd src
69```
70
71### Converting an existing Linux checkout
72
73If you have an existing Linux checkout, you can add Android support by
74appending `target_os = ['android']` to your `.gclient` file (in the
75directory above `src`):
76
77```shell
78$ echo "target_os = [ 'android' ]" >> ../.gclient
79```
80
81Then run `gclient sync` to pull the new Android dependencies:
82
83```shell
84$ gclient sync
85```
86
87(This is the only difference between `fetch android` and `fetch chromium`.)
88
89### Install additional build dependencies
90
91Once you have checked out the code, run
92
93```shell
Ho Cheungfd3ed272023-01-07 02:40:2494$ build/install-build-deps.sh --android
dprankec641a5342017-04-04 02:35:0195```
96
97to get all of the dependencies you need to build on Linux, *plus* all of the
98Android-specific dependencies (you need some of the regular Linux dependencies
99because an Android build includes a bunch of the Linux tools and utilities).
100
101### Run the hooks
102
103Once you've run `install-build-deps` at least once, you can now run the
104Chromium-specific hooks, which will download additional binaries and other
105things you might need:
106
107```shell
108$ gclient runhooks
109```
110
111*Optional*: You can also [install API
112keys](https://www.chromium.org/developers/how-tos/api-keys) if you want your
113build to talk to some Google services, but this is not necessary for most
114development and testing purposes.
115
116## Setting up the build
117
Tom Bridgwatereef401542018-08-17 00:54:43118Chromium uses [Ninja](https://ninja-build.org) as its main build tool along with
Andrew Williamsbbc1a1e2021-07-21 01:51:22119a tool called [GN](https://gn.googlesource.com/gn/+/main/docs/quick_start.md)
Tom Bridgwatereef401542018-08-17 00:54:43120to generate `.ninja` files. You can create any number of *build directories*
121with different configurations. To create a build directory which builds Chrome
122for Android, run:
dprankec641a5342017-04-04 02:35:01123
124```shell
mark a. foltz06a88b12022-07-19 18:43:27125$ gn gen --args='target_os="android" is_cast_android=true' out/Default
dprankec641a5342017-04-04 02:35:01126```
127
128* You only have to run this once for each new build directory, Ninja will
129 update the build files as needed.
130* You can replace `Default` with another name, but
131 it should be a subdirectory of `out`.
132* For other build arguments, including release settings, see [GN build
133 configuration](https://www.chromium.org/developers/gn-build-configuration).
134 The default will be a debug component build matching the current host
135 operating system and CPU.
136* For more info on GN, run `gn help` on the command line or read the
Andrew Williamsbbc1a1e2021-07-21 01:51:22137 [quick start guide](https://gn.googlesource.com/gn/+/main/docs/quick_start.md).
dprankec641a5342017-04-04 02:35:01138
139Also be aware that some scripts (e.g. `tombstones.py`, `adb_gdb.py`)
140require you to set `CHROMIUM_OUTPUT_DIR=out/Default`.
141
Andrew Williams54da9cc2024-01-09 17:32:23142### Faster builds
143
144This section contains some things you can change to speed up your builds,
145sorted so that the things that make the biggest difference are first.
146
147#### Use Reclient
148
149*** note
Jenna Himawan4913cb82025-02-05 15:42:43150**Warning:** If you are a Google employee, do not follow the Reclient instructions
151in this section. Set up remote execution as described in
152[go/building-android-chrome](https://goto.google.com/building-android-chrome)
Andrew Williams54da9cc2024-01-09 17:32:23153instead.
154***
155
156Chromium's build can be sped up significantly by using a remote execution system
157compatible with [REAPI](https://github.com/bazelbuild/remote-apis). This allows
158you to benefit from remote caching and executing many build actions in parallel
159on a shared cluster of workers.
160
161To use Reclient, follow the corresponding
162[Linux build instructions](linux/build_instructions.md#use-reclient).
163
dprankec641a5342017-04-04 02:35:01164## Build cast\_shell\_apk
165
Simeon Anfinrud43f47b72024-09-26 22:57:56166Build `cast_browser_apk` with Ninja using the command:
dprankec641a5342017-04-04 02:35:01167
168```shell
Simeon Anfinrud43f47b72024-09-26 22:57:56169$ autoninja -C out/Default cast_browser_apk
dprankec641a5342017-04-04 02:35:01170```
171
Dirk Pranke8bd55f22018-10-24 21:22:10172(`autoninja` is a wrapper that automatically provides optimal values for the
173arguments passed to `ninja`.)
174
Simeon Anfinrud43f47b72024-09-26 22:57:56175## Installing and Running `cast_browser_apk` on a device
dprankec641a5342017-04-04 02:35:01176
dprankec641a5342017-04-04 02:35:01177### Plug in your Android device
178
179Make sure your Android device is plugged in via USB, and USB Debugging
180is enabled.
181
182To enable USB Debugging:
183
184* Navigate to Settings \> About Phone \> Build number
185* Click 'Build number' 7 times
186* Now navigate back to Settings \> Developer Options
187* Enable 'USB Debugging' and follow the prompts
188
189You may also be prompted to allow access to your PC once your device is
190plugged in.
191
192You can check if the device is connected by running:
193
194```shell
Yun Liuf57cceaf2019-03-18 21:31:23195third_party/android_sdk/public/platform-tools/adb devices
dprankec641a5342017-04-04 02:35:01196```
197
198Which prints a list of connected devices. If not connected, try
199unplugging and reattaching your device.
200
201### Build the APK
202
203```shell
Simeon Anfinrud43f47b72024-09-26 22:57:56204autoninja -C out/Release cast_browser_apk
dprankec641a5342017-04-04 02:35:01205```
206
207And deploy it to your Android device:
208
209```shell
Simeon Anfinrud43f47b72024-09-26 22:57:56210out/Default/bin/cast_browser_apk install
Andrew Grievec81af4a2017-07-26 18:02:13211# Or to install and run:
Simeon Anfinrud43f47b72024-09-26 22:57:56212out/Default/bin/cast_browser_apk run "http://google.com"
dprankec641a5342017-04-04 02:35:01213```
214
215The app will appear on the device as "Chromium".
216
dprankec641a5342017-04-04 02:35:01217### Testing
218
Ken Rockot35028ca2019-05-30 18:50:45219For information on running tests, see
220[Android Test Instructions](testing/android_test_instructions.md).