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",