aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
diff options
context:
space:
mode:
authorGravatar Andrew Pellegrini <apell@google.com>2016-06-22 20:46:21 +0000
committerGravatar Lukacs Berki <lberki@google.com>2016-06-23 11:10:23 +0000
commite1a4a812971f604d51bdf098b6117d9ba03da1c8 (patch)
treed53b64a6f80fb82cfa43d65c9b3f2f73b9084cdf /src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
parent6105e2415faa0f36ec6ae3399d90e1a173ef7f58 (diff)
Adds the Android manifest merger as an option for android_binary rules. The merger that is used (legacy or android) is controlled by the manifest_merger attribute on android_binary and the default is controlled by the --android_manifest_merger flag.
RELNOTES: The Android manifest merger is now available as an option for android_binary rules. The merger will honor tools annotations in AndroidManifest.xml and will perform placeholder substitutions using the values specified in android_binary.manifest_values. The merger may be selected by setting the manifest_merger attribute on android_binary. -- MOS_MIGRATED_REVID=125603954
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java48
1 files changed, 48 insertions, 0 deletions
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 cdc30bf39f..d8f7cbb724 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
@@ -98,6 +98,16 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
}
/**
+ * Converter for {@link AndroidManifestMerger}
+ */
+ public static final class AndroidManifestMergerConverter
+ extends EnumConverter<AndroidManifestMerger> {
+ public AndroidManifestMergerConverter() {
+ super(AndroidManifestMerger.class, "android manifest merger");
+ }
+ }
+
+ /**
* Value used to avoid multiple configurations from conflicting.
*
* <p>This is set to {@code ANDROID} in Android configurations and to {@code MAIN} otherwise. This
@@ -139,6 +149,30 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
}
}
+ /** Types of android manifest mergers. */
+ public enum AndroidManifestMerger {
+ LEGACY,
+ ANDROID;
+
+ public static List<String> getAttributeValues() {
+ return ImmutableList.of(LEGACY.name().toLowerCase(), ANDROID.name().toLowerCase(),
+ getRuleAttributeDefault());
+ }
+
+ public static String getRuleAttributeDefault() {
+ return "auto";
+ }
+
+ public static AndroidManifestMerger fromString(String value) {
+ for (AndroidManifestMerger merger : AndroidManifestMerger.values()) {
+ if (merger.name().equalsIgnoreCase(value)) {
+ return merger;
+ }
+ }
+ return null;
+ }
+ }
+
/**
* Android configuration options.
*/
@@ -296,6 +330,14 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
help = "Enables the use of an obfuscation map when generating the main dex jar file")
public boolean useProguardPreviousObfuscationMap;
+ @Option(name = "android_manifest_merger",
+ defaultValue = "legacy",
+ category = "semantics",
+ converter = AndroidManifestMergerConverter.class,
+ help = "Selects the manifest merger to use for android_binary rules. Flag to help the"
+ + "transition to the Android manifest merger from the legacy merger.")
+ public AndroidManifestMerger manifestMerger;
+
@Override
public void addAllLabels(Multimap<String, Label> labelMap) {
if (androidCrosstoolTop != null) {
@@ -366,6 +408,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean allowAndroidLibraryDepsWithoutSrcs;
private final boolean useAndroidResourceShrinking;
private final boolean useProguardPreviousObfuscationMap;
+ private final AndroidManifestMerger manifestMerger;
AndroidConfiguration(Options options, Label androidSdk) {
this.sdk = androidSdk;
@@ -389,6 +432,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.allowAndroidLibraryDepsWithoutSrcs = options.allowAndroidLibraryDepsWithoutSrcs;
this.useAndroidResourceShrinking = options.useAndroidResourceShrinking;
this.useProguardPreviousObfuscationMap = options.useProguardPreviousObfuscationMap;
+ this.manifestMerger = options.manifestMerger;
}
public String getCpu() {
@@ -465,6 +509,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return useProguardPreviousObfuscationMap;
}
+ public AndroidManifestMerger getManifestMerger() {
+ return manifestMerger;
+ }
+
@Override
public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) {
globalMakeEnvBuilder.put("ANDROID_CPU", cpu);