Add rexopts attribute to android_binary.

RELNOTES: None
PiperOrigin-RevId: 177510583
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 68edd38..d806620 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
@@ -166,6 +166,11 @@
       ruleContext.throwWithAttributeError("rex_package_map",
           "'rex_package_map' can only be used when 'proguard_specs' is also set");
     }
+    if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rexopts")
+        && !ruleContext.attributes().get("rewrite_dexes_with_rex", Type.BOOLEAN)) {
+      ruleContext.throwWithAttributeError(
+          "rexopts", "'rexopts' can only be used when 'rewrite_dexes_with_rex' is also set");
+    }
     if (ruleContext.attributes().isAttributeValueExplicitlySpecified("resources")
       && DataBinding.isEnabled(ruleContext)) {
       ruleContext.throwWithRuleError("Data binding doesn't work with the \"resources\" attribute. "
@@ -520,6 +525,11 @@
           || getMultidexMode(ruleContext) == MultidexMode.LEGACY) {
         commandLine.add("--keep-main-dex");
       }
+      // Pass rexopts to rex as a list of strings without validation
+      if (ruleContext.attributes().isAttributeValueExplicitlySpecified("rexopts")) {
+        List<String> rexopts = ruleContext.getExpander().withDataLocations().tokenized("rexopts");
+        commandLine.addAll(rexopts);
+      }
       rexActionBuilder.addCommandLine(commandLine.build());
       ruleContext.registerAction(rexActionBuilder.build(ruleContext));
     } else {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index efb39ed..bc28f84 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -790,6 +790,7 @@
                   .cfg(HOST)
                   .exec()
                   .value(env.getToolsLabel("//tools/android:rex_wrapper")))
+          .add(attr("rexopts", STRING_LIST))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dexopts) -->
           Additional command-line flags for the dx tool when generating classes.dex.
           Subject to <a href="${link make-variables}">"Make variable"</a> substitution and