aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-06-10 22:07:44 +0000
committerGravatar Yue Gan <yueg@google.com>2016-06-13 08:11:17 +0000
commit82e992e7ada86b937cd76367a959b041962370e5 (patch)
tree0614fe14d7ce0e2b0b1d45ebd20b856aa0670b9d /src
parent6f162c8476ba1ca6a2bb8242ac5980e5adcd4ebd (diff)
Add addMainDexListActionArguments to AndroidSemantics.
-- MOS_MIGRATED_REVID=124602618
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidSemantics.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSemantics.java8
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);