diff options
author | 2018-06-06 14:32:29 -0700 | |
---|---|---|
committer | 2018-06-06 14:33:48 -0700 | |
commit | ccaccb2b277a82f7264567563a02ab133a0f6e6f (patch) | |
tree | 62f5f3a6a89ec3892d565b4ee630387d0f8e85db /src/main/java/com/google | |
parent | 899a3e7ad9853c036bc84b7b6905516df6b7f62b (diff) |
Let blaze obfuscate manual main_dex_list according to proguard map.
PiperOrigin-RevId: 199529974
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 29 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java | 5 |
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)) |