Deprecate --experimental_android_use_singlejar_for_multidex.

Also remove the $zip attribute of android_binary and android_test.

RELNOTES: --experimental_android_use_singlejar_for_multidex is now a no-op and will eventually be removed.
PiperOrigin-RevId: 154111305
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 7fbe3a2..1fe14d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -1621,38 +1621,24 @@
   }
 
   /**
-   * Creates an action that copies a .zip file to a specified path, filtering all non-.dex files
-   * out of the output.
+   * Creates an action that copies a .zip file to a specified path, filtering all non-.dex files out
+   * of the output.
    */
-  static void createCleanDexZipAction(RuleContext ruleContext, Artifact inputZip,
-      Artifact outputZip) {
-    if (ruleContext.getFragment(AndroidConfiguration.class).useSingleJarForMultidex()) {
-      ruleContext.registerAction(singleJarSpawnActionBuilder(ruleContext)
-          .addArgument("--exclude_build_data")
-          .addArgument("--dont_change_compression")
-          .addArgument("--sources")
-          .addInputArgument(inputZip)
-          .addArgument("--output")
-          .addOutputArgument(outputZip)
-          .addArgument("--include_prefixes")
-          .addArgument("classes")
-          .setProgressMessage("Trimming " + inputZip.getExecPath().getBaseName())
-          .setMnemonic("TrimDexZip")
-          .build(ruleContext));
-    } else {
-      ruleContext.registerAction(new SpawnAction.Builder()
-          .setExecutable(ruleContext.getExecutablePrerequisite("$zip", Mode.HOST))
-          .addInput(inputZip)
-          .addOutput(outputZip)
-          .addArgument(inputZip.getExecPathString())
-          .addArgument("--out")
-          .addArgument(outputZip.getExecPathString())
-          .addArgument("--copy")
-          .addArgument("classes*.dex")
-          .setProgressMessage("Trimming " + inputZip.getExecPath().getBaseName())
-          .setMnemonic("TrimDexZip")
-          .build(ruleContext));
-    }
+  static void createCleanDexZipAction(
+      RuleContext ruleContext, Artifact inputZip, Artifact outputZip) {
+    ruleContext.registerAction(
+        singleJarSpawnActionBuilder(ruleContext)
+            .addArgument("--exclude_build_data")
+            .addArgument("--dont_change_compression")
+            .addArgument("--sources")
+            .addInputArgument(inputZip)
+            .addArgument("--output")
+            .addOutputArgument(outputZip)
+            .addArgument("--include_prefixes")
+            .addArgument("classes")
+            .setProgressMessage("Trimming " + inputZip.getExecPath().getBaseName())
+            .setMnemonic("TrimDexZip")
+            .build(ruleContext));
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index cece137..f0e2a88 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -460,7 +460,9 @@
       name = "experimental_android_use_singlejar_for_multidex",
       defaultValue = "true",
       optionUsageRestrictions = OptionUsageRestrictions.UNDOCUMENTED,
-      help = "Use SingleJar for multidex dex extraction."
+      deprecationWarning =
+          "This flag is deprecated and is a no-op. It will be removed in a future release.",
+      help = "This flag is deprecated and is a no-op. It will be removed in a future release."
     )
     public boolean useSingleJarForMultidex;
 
@@ -602,7 +604,6 @@
   private final AndroidManifestMerger manifestMerger;
   private final ApkSigningMethod apkSigningMethod;
   private final boolean useSingleJarApkBuilder;
-  private final boolean useSingleJarForMultidex;
   private final ResourceFilter resourceFilter;
   private final boolean useSingleJarForProguardLibraryJars;
   private final boolean compressJavaResources;
@@ -634,7 +635,6 @@
     this.manifestMerger = options.manifestMerger;
     this.apkSigningMethod = options.apkSigningMethod;
     this.useSingleJarApkBuilder = options.useSingleJarApkBuilder;
-    this.useSingleJarForMultidex = options.useSingleJarForMultidex;
     this.useSingleJarForProguardLibraryJars = options.useSingleJarForProguardLibraryJars;
     this.useRexToCompressDexFiles = options.useRexToCompressDexFiles;
     this.resourceFilter = options.resourceFilter;
@@ -737,10 +737,6 @@
     return useSingleJarApkBuilder;
   }
 
-  public boolean useSingleJarForMultidex() {
-    return useSingleJarForMultidex;
-  }
-
   public ResourceFilter getResourceFilter() {
     return resourceFilter;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 6863a92..3715c0c 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -105,7 +105,6 @@
 
   @Test
   public void testMainDexProguardSpecs() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     ConfiguredTarget ct = scratchConfiguredTarget("java/a", "a",
         "android_binary(",
         "    name = 'a',",
@@ -972,19 +971,16 @@
 
   @Test
   public void testDexMainListOpts() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     checkDexMainListOpts("[ '--opt1', '--opt2' ]", "--opt1", "--opt2");
   }
 
   @Test
   public void testDexMainListOptsTokenization() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     checkDexMainListOpts("[ '--opt1', '--opt2 tokenized' ]", "--opt1", "--opt2", "tokenized");
   }
 
   @Test
   public void testDexMainListOptsMakeVariableSubstitution() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     checkDexMainListOpts("[ '--opt1', '$(COMPILATION_MODE)' ]", "--opt1", "fastbuild");
   }
 
@@ -1753,7 +1749,6 @@
 
   @Test
   public void testNoCrunchWithMultidexNative() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     scratch.file("java/r/android/BUILD",
         "android_library(name = 'resources',",
         "                manifest = 'AndroidManifest.xml',",
@@ -2094,8 +2089,7 @@
         "    multidex = 'legacy',",
         "    main_dex_list_opts = ['--hello', '--world'])");
 
-    useConfiguration(
-        "--android_sdk=//sdk:sdk", "--experimental_android_use_singlejar_for_multidex");
+    useConfiguration("--android_sdk=//sdk:sdk");
     ConfiguredTarget a = getConfiguredTarget("//java/a:a");
     Artifact mainDexList = ActionsTestUtil.getFirstArtifactEndingWith(
         actionsTestUtil().artifactClosureOf(getFilesToBuild(a)), "main_dex_list.txt");
@@ -2131,8 +2125,7 @@
         "    manifest = 'AndroidManifest.xml',",
         "    multidex = 'legacy')");
 
-    useConfiguration(
-        "--android_sdk=//sdk:sdk", "--experimental_android_use_singlejar_for_multidex");
+    useConfiguration("--android_sdk=//sdk:sdk");
     ConfiguredTarget a = getConfiguredTarget("//java/a:a");
     Artifact intermediateJar = artifactByPath(ImmutableList.of(getCompressedUnsignedApk(a)),
         ".apk", ".dex.zip", ".dex.zip", "main_dex_list.txt", "_intermediate.jar");
@@ -2146,7 +2139,6 @@
 
   @Test
   public void testMainDexGenerationWithoutProguardMap() throws Exception {
-    useConfiguration("--experimental_android_use_singlejar_for_multidex");
     scratchConfiguredTarget("java/foo", "abin",
         "android_binary(",
         "    name = 'abin',",