blob: 15b740268fd8d84f47cf46854aa7a813f1976f3c [file] [log] [blame] [view]
Lukacs Berki99389fd2015-07-20 08:36:28 +00001In order to build these examples, add the following two rules to the top-level `WORKSPACE` file (two directories above this file):
2
3```python
4android_sdk_repository(
5 name="androidsdk",
John Fielddebf73a2015-07-27 14:59:33 +00006 path="<full path to your Android SDK>",
7 api_level=<api level>,
Adam Michaelaa4ca942016-12-21 23:06:37 +00008)
Alex Humeskyf3971202015-07-22 19:01:49 +00009
Lukacs Berki99389fd2015-07-20 08:36:28 +000010android_ndk_repository(
11 name="androidndk",
12 path="<path to your Android NDK>",
Adam Michaelaa4ca942016-12-21 23:06:37 +000013 api_level=<api_level>,
14)
Lukacs Berki99389fd2015-07-20 08:36:28 +000015```
Adam Michaelaa4ca942016-12-21 23:06:37 +000016
17For the `android_sdk_repository` rule, the value of `api_level` corresponds to
18a directory in the SDK containing the specific version of `android.jar` to
19compile against. For example, if `path = "/Users/xyzzy/Library/Android/sdk"` and
20`api_level = 21`, then the directory
21`/Users/xyzzy/Library/Android/sdk/platforms/android-21` must exist.
Lukacs Berki99389fd2015-07-20 08:36:28 +000022
John Fielddebf73a2015-07-27 14:59:33 +000023Similarly, for the `android_ndk_repository` rule, the value of the `api_level`
24attribute corresponds to a directory containing the NDK libraries for that
25API level. For example, if
26`path=/Users/xyzzy/Library/Android/android-ndk-r10e` and
27`api_level=21`, then you your NDK must contain the directory
28`/Users/xyzzy/Library/Android/android-ndk-r10e/platforms/android-21`.
29
Adam Michaelaa4ca942016-12-21 23:06:37 +000030The example `android_binary` depends on
31`@androidsdk//com.android.support:appcompat-v7-25.0.0`, so you will need to
32install the Google Support Libraries version 25.0.0 from the Android SDK
33Manager.
34
John Fielddebf73a2015-07-27 14:59:33 +000035The following command can be used to build the example app:
Lukacs Berki99389fd2015-07-20 08:36:28 +000036
37```
Googler1afdaf42022-06-27 10:38:16 -070038bazel build //examples/android/java/bazel:hello_world --java_language_version=8
Lukacs Berki99389fd2015-07-20 08:36:28 +000039```
40
Lukacs Berki99389fd2015-07-20 08:36:28 +000041We also have a nice way to speed up the edit-compile-install development cycle for physical Android devices and emulators: Bazel knows what code changed since the last build, and can use this knowledge to install only the changed code to the device. This currently works with L devices and changes to Java code and Android resources. To try this out, take an `android_binary` rule and:
Alex Humeskyf3971202015-07-22 19:01:49 +000042
Lukacs Berki99389fd2015-07-20 08:36:28 +000043 * Set the `proguard_specs` attribute to `[]` (the empty list) or just omit it altogether
44 * Set the `multidex` attribute to `native`
45 * Set the `dex_shards` attribute to a number between 2 and 200. This controls the size of chunks the code is split into. As this number is increased, compilation and installation becomes faster but app startup becomes slower. A good initial guess is 10.
46 * Connect your device over USB to your workstation and enable USB debugging on it
Lukacs Berki841cf452015-07-20 09:24:12 +000047 * Run `bazel mobile-install <android_binary rule>`
Lukacs Berki99389fd2015-07-20 08:36:28 +000048 * Edit Java code or Android resources
Damien Martin-Guillerez217e3ad2015-08-25 09:18:36 +000049 * Run `bazel mobile-install --incremental <android_binary rule>`
Lukacs Berki99389fd2015-07-20 08:36:28 +000050
51Note that if you change anything other than Java code or Android resources (C++ code or something on the device), you must omit the `--incremental` command line option. Yes, we know that this is also clunky and we are working on improving it.