Defines binary targets for d8 standalone dexer and d8 incremental dexer. Adds config settings to use them instead of the legacy ones.
RELNOTES: d8 dexers (both standalone and incremental) are now available for use.
PiperOrigin-RevId: 279363766
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
index 4921485..db8aa5c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryRule.java
@@ -41,6 +41,8 @@
ImmutableMap.Builder<String, Label> builder = ImmutableMap.builder();
builder.put("android/sdk", Label.parseAbsoluteUnchecked(prefix + "sdk"));
builder.put(
+ "android/d8_jar_import", Label.parseAbsoluteUnchecked(prefix + "d8_jar_import"));
+ builder.put(
"android/dx_jar_import", Label.parseAbsoluteUnchecked(prefix + "dx_jar_import"));
builder.put("android_sdk_for_testing", Label.parseAbsoluteUnchecked(prefix + "files"));
builder.put(
diff --git a/tools/android/BUILD.tools b/tools/android/BUILD.tools
index 02adb46..caa47f2 100644
--- a/tools/android/BUILD.tools
+++ b/tools/android/BUILD.tools
@@ -34,9 +34,38 @@
actual = "//src/tools/android/java/com/google/devtools/build/android/ziputils:mapper",
)
+# Defines d8_dexbuilder using @<repo>//:d8_jar_import generated by android_sdk_repository rule
+# without needing the SDK repo's name (typically @androidsdk but not required).
+java_binary(
+ name = "d8_dexbuilder",
+ main_class = "com.android.tools.r8.compatdexbuilder.CompatDexBuilder",
+ visibility = ["//visibility:private"],
+ runtime_deps = ["//external:android/d8_jar_import"],
+)
+
+# NOTE: d8 dex builder doesn't support the persistent worker mode at the moment. To use this config,
+# without a build error, --nouse_workers_with_dexbuilder flag must also be specified.
+config_setting(
+ name = "d8_incremental_dexing",
+ values = {
+ "define": "android_incremental_dexing_tool=d8_dexbuilder",
+ },
+)
+
+config_setting(
+ name = "dx_incremental_dexing",
+ values = {
+ "define": "android_incremental_dexing_tool=dx_dexbuilder",
+ },
+)
+
alias(
name = "dexbuilder",
- actual = "//src/tools/android/java/com/google/devtools/build/android/dexer:DexBuilder",
+ actual = select({
+ "d8_incremental_dexing": ":d8_dexbuilder",
+ "dx_incremental_dexing": "//src/tools/android/java/com/google/devtools/build/android/dexer:DexBuilder",
+ "//conditions:default": "//src/tools/android/java/com/google/devtools/build/android/dexer:DexBuilder",
+ }),
)
alias(
diff --git a/tools/android/android_sdk_repository_template.bzl b/tools/android/android_sdk_repository_template.bzl
index 08e6685..29a1aca 100644
--- a/tools/android/android_sdk_repository_template.bzl
+++ b/tools/android/android_sdk_repository_template.bzl
@@ -27,6 +27,16 @@
values = {"host_cpu": "x64_" + name},
)
+ native.config_setting(
+ name = "d8_standalone_dexer",
+ values = {"define": "android_standalone_dexing_tool=d8_compat_dx"},
+ )
+
+ native.config_setting(
+ name = "dx_standalone_dexer",
+ values = {"define": "android_standalone_dexing_tool=dx_compat_dx"},
+ )
+
def create_android_sdk_rules(
name,
build_tools_version,
@@ -118,7 +128,11 @@
":windows": "build-tools/%s/aapt2.exe" % build_tools_directory,
"//conditions:default": ":aapt2_binary",
}),
- dx = ":dx_binary",
+ dx = select({
+ "d8_standalone_dexer": ":d8_compat_dx",
+ "dx_standalone_dexer": ":dx_binary",
+ "//conditions:default": ":dx_binary",
+ }),
main_dex_list_creator = ":main_dex_list_creator",
adb = select({
":windows": "platform-tools/adb.exe",
@@ -263,6 +277,15 @@
name = "dx_jar_import",
jars = ["build-tools/%s/lib/dx.jar" % build_tools_directory],
)
+ java_binary(
+ name = "d8_compat_dx",
+ main_class = "com.android.tools.r8.compatdx.CompatDx",
+ runtime_deps = [":d8_jar_import"],
+ )
+ java_import(
+ name = "d8_jar_import",
+ jars = ["build-tools/%s/lib/d8.jar" % build_tools_directory],
+ )
TAGDIR_TO_TAG_MAP = {
"google_apis_playstore": "playstore",