aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-06-06 14:32:29 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-06 14:33:48 -0700
commitccaccb2b277a82f7264567563a02ab133a0f6e6f (patch)
tree62f5f3a6a89ec3892d565b4ee630387d0f8e85db /src/main/java/com/google/devtools/build/lib
parent899a3e7ad9853c036bc84b7b6905516df6b7f62b (diff)
Let blaze obfuscate manual main_dex_list according to proguard map.
PiperOrigin-RevId: 199529974
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java5
2 files changed, 34 insertions, 0 deletions
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 96d4fb3e71..f00416a711 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
@@ -1044,6 +1044,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
proguardedJar,
mainDexProguardSpec,
proguardOutputMap);
+ } else if (multidexMode == MultidexMode.MANUAL_MAIN_DEX) {
+ mainDexList =
+ transformDexListThroughProguardMapAction(ruleContext, proguardOutputMap, mainDexList);
}
Artifact classesDex = getDxArtifact(ruleContext, "classes.dex.zip");
@@ -1791,6 +1794,32 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
return mainDexList;
}
+ /** Transforms manual main_dex_list through proguard obfuscation map. */
+ static Artifact transformDexListThroughProguardMapAction(
+ RuleContext ruleContext, @Nullable Artifact proguardOutputMap, Artifact mainDexList)
+ throws InterruptedException {
+ if (proguardOutputMap == null) {
+ return mainDexList;
+ }
+ Artifact obfuscatedMainDexList = AndroidBinary.getDxArtifact(ruleContext, "main_dex_list.txt");
+ SpawnAction.Builder actionBuilder =
+ new SpawnAction.Builder()
+ .setMnemonic("MainDexProguardClasses")
+ .setProgressMessage("Obfuscating main dex classes list")
+ .setExecutable(ruleContext.getExecutablePrerequisite("$dex_list_obfuscator", Mode.HOST))
+ .addInput(mainDexList)
+ .addInput(proguardOutputMap)
+ .addOutput(obfuscatedMainDexList)
+ .addCommandLine(
+ CustomCommandLine.builder()
+ .addExecPath("--input", mainDexList)
+ .addExecPath("--output", obfuscatedMainDexList)
+ .addExecPath("--obfuscation_map", proguardOutputMap)
+ .build());
+ ruleContext.registerAction(actionBuilder.build(ruleContext));
+ return obfuscatedMainDexList;
+ }
+
public static Artifact createMainDexProguardSpec(Label label, ActionConstructionContext context) {
return ProguardHelper.getProguardConfigArtifact(label, context, "main_dex");
}
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 1c5d0116eb..a9264b0c62 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
@@ -944,6 +944,11 @@ public final class AndroidRuleClasses {
.add(attr("proguard_apply_dictionary", LABEL).legacyAllowAnyFileType())
.add(attr(":extra_proguard_specs", LABEL_LIST).value(JavaSemantics.EXTRA_PROGUARD_SPECS))
.add(
+ attr("$dex_list_obfuscator", LABEL)
+ .cfg(HostTransition.INSTANCE)
+ .exec()
+ .value(env.getToolsLabel("//tools/android:dex_list_obfuscator")))
+ .add(
attr(":bytecode_optimizers", LABEL_LIST)
.cfg(HostTransition.INSTANCE)
.value(JavaSemantics.BYTECODE_OPTIMIZERS))