diff options
author | Googler <noreply@google.com> | 2016-06-10 22:07:44 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-06-13 08:11:17 +0000 |
commit | 82e992e7ada86b937cd76367a959b041962370e5 (patch) | |
tree | 0614fe14d7ce0e2b0b1d45ebd20b856aa0670b9d /src | |
parent | 6f162c8476ba1ca6a2bb8242ac5980e5adcd4ebd (diff) |
Add addMainDexListActionArguments to AndroidSemantics.
--
MOS_MIGRATED_REVID=124602618
Diffstat (limited to 'src')
4 files changed, 36 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java index 6c026d6d77..ff248d6a01 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java @@ -18,6 +18,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.android.AndroidCommon; import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider; @@ -81,6 +82,10 @@ public class BazelAndroidSemantics implements AndroidSemantics { } @Override + public void addMainDexListActionArguments(RuleContext ruleContext, SpawnAction.Builder builder) { + } + + @Override public Artifact getApkDebugSigningKey(RuleContext ruleContext) { return ruleContext.getPrerequisiteArtifact("$debug_keystore", Mode.HOST); } 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 e31c1bb90d..e36b28d2e3 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 @@ -405,6 +405,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { ? dexWithJack(ruleContext, androidCommon, proguardSpecs) : dex( ruleContext, + androidSemantics, binaryJar, jarToDex, isBinaryJarFiltered, @@ -1052,6 +1053,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { /** Creates one or more classes.dex files that correspond to {@code proguardedJar}. */ private static DexingOutput dex( RuleContext ruleContext, + AndroidSemantics androidSemantics, Artifact binaryJar, Artifact proguardedJar, boolean isBinaryJarFiltered, @@ -1111,7 +1113,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { if (multidexMode == MultidexMode.LEGACY) { // For legacy multidex, we need to generate a list for the dexer's --main-dex-list flag. - mainDexList = createMainDexListAction(ruleContext, proguardedJar, mainDexProguardSpec); + mainDexList = createMainDexListAction( + ruleContext, androidSemantics, proguardedJar, mainDexProguardSpec); } Artifact classesDex = getDxArtifact(ruleContext, "classes.dex.zip"); @@ -1394,7 +1397,11 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { * Returns the file containing the list. */ static Artifact createMainDexListAction( - RuleContext ruleContext, Artifact jar, @Nullable Artifact mainDexProguardSpec) { + RuleContext ruleContext, + AndroidSemantics androidSemantics, + Artifact jar, + @Nullable Artifact mainDexProguardSpec) + throws InterruptedException { // Process the input jar through Proguard into an intermediate, streamlined jar. Artifact strippedJar = AndroidBinary.getDxArtifact(ruleContext, "main_dex_intermediate.jar"); AndroidSdkProvider sdk = AndroidSdkProvider.fromRuleContext(ruleContext); @@ -1431,6 +1438,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { streamlinedBuilder.addInputArgument(spec); } + androidSemantics.addMainDexListActionArguments(ruleContext, streamlinedBuilder); + ruleContext.registerAction(streamlinedBuilder.build(ruleContext)); // Create the main dex classes list. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 3966eee33f..f033771d9a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -290,6 +290,12 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { help = "Enables resource shrinking for android_binary APKs that use proguard.") public boolean useAndroidResourceShrinking; + @Option(name = "experimental_use_proguard_previous_obfuscation_map", + defaultValue = "false", + category = "undocumented", + help = "Enables the use of an obfuscation map when generating the main dex jar file") + public boolean useProguardPreviousObfuscationMap; + @Override public void addAllLabels(Multimap<String, Label> labelMap) { if (androidCrosstoolTop != null) { @@ -359,6 +365,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { private final ImmutableList<String> targetDexoptsThatPreventIncrementalDexing; private final boolean allowAndroidLibraryDepsWithoutSrcs; private final boolean useAndroidResourceShrinking; + private final boolean useProguardPreviousObfuscationMap; AndroidConfiguration(Options options, Label androidSdk) { this.sdk = androidSdk; @@ -381,6 +388,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { ImmutableList.copyOf(options.nonIncrementalPerTargetDexopts); this.allowAndroidLibraryDepsWithoutSrcs = options.allowAndroidLibraryDepsWithoutSrcs; this.useAndroidResourceShrinking = options.useAndroidResourceShrinking; + this.useProguardPreviousObfuscationMap = options.useProguardPreviousObfuscationMap; } public String getCpu() { @@ -453,6 +461,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { return useAndroidResourceShrinking; } + public boolean useProguardPreviousObfuscationMap() { + return useProguardPreviousObfuscationMap; + } + @Override public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) { globalMakeEnvBuilder.put("ANDROID_CPU", cpu); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java index 469d5e77ec..cafde827e6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java @@ -18,6 +18,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.OutputGroupProvider; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; @@ -91,6 +92,13 @@ public interface AndroidSemantics { ImmutableList<String> getDxJvmArguments(); /** + * Configures the builder for generating the output jar used to configure the main dex file. + * @throws InterruptedException + */ + void addMainDexListActionArguments(RuleContext ruleContext, SpawnAction.Builder builder) + throws InterruptedException; + + /** * Returns the artifact for the debug key for signing the APK. */ Artifact getApkDebugSigningKey(RuleContext ruleContext); |