diff options
author | Googler <noreply@google.com> | 2018-06-08 15:53:50 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-08 15:55:33 -0700 |
commit | 9c68c3a1bd50ee56b5b7592a5f2ff918b16a2bab (patch) | |
tree | 6462d61e72ef6a2cf9565df1eb4219cbc81fb910 /src/main/java/com/google | |
parent | 6dfafd27facf11700047a9be56b8c7a3f201829a (diff) |
Automated rollback of commit 5df8eb24f84a6943e70876c805c77f06e719dcd7.
PiperOrigin-RevId: 199864175
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java | 31 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java | 5 |
2 files changed, 36 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..e6a1261d92 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,34 @@ 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 + || !ruleContext.attributes().get("proguard_generate_mapping", Type.BOOLEAN)) { + return mainDexList; + } + Artifact obfuscatedMainDexList = + AndroidBinary.getDxArtifact(ruleContext, "main_dex_list_obfuscated.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)) |