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