diff options
author | 2016-06-22 20:46:21 +0000 | |
---|---|---|
committer | 2016-06-23 11:10:23 +0000 | |
commit | e1a4a812971f604d51bdf098b6117d9ba03da1c8 (patch) | |
tree | d53b64a6f80fb82cfa43d65c9b3f2f73b9084cdf /src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java | |
parent | 6105e2415faa0f36ec6ae3399d90e1a173ef7f58 (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.java | 48 |
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); |