From 9c68c3a1bd50ee56b5b7592a5f2ff918b16a2bab Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 8 Jun 2018 15:53:50 -0700 Subject: Automated rollback of commit 5df8eb24f84a6943e70876c805c77f06e719dcd7. PiperOrigin-RevId: 199864175 --- .../build/lib/rules/android/AndroidBinary.java | 31 ++++++++++++++++++++++ .../lib/rules/android/AndroidRuleClasses.java | 5 ++++ 2 files changed, 36 insertions(+) (limited to 'src/main/java/com/google') 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 @@ -943,6 +943,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) -- cgit v1.2.3