aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-08-08 23:37:30 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-08-09 11:35:05 +0200
commit1e05dd06e31328f78b015c374275f8e6bb258b6d (patch)
tree44776edbbe8fcde336e0a5f496c6ddbc27ca48c4 /src/main/java
parent062fe70189fc622285833311d241021be313680b (diff)
Add flag to use processed resource apk manifest file
RELNOTES: none PiperOrigin-RevId: 164646858
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java6
2 files changed, 21 insertions, 1 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 b94fbab04c..0ce599e980 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
@@ -687,6 +687,16 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
)
public boolean throwOnResourceConflict;
+ @Option(
+ name = "experimental_use_manifest_from_resource_apk",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help = "Android library rule will use the AppManifest from the resource APK"
+ + " in the AAR file."
+ )
+ public boolean useManifestFromResourceApk;
+
@Override
public FragmentOptions getHost(boolean fallback) {
Options host = (Options) super.getHost(fallback);
@@ -765,6 +775,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final boolean generateRobolectricRClass;
private final boolean throwOnResourceConflict;
private final boolean useParallelDex2Oat;
+ private final boolean useManifestFromResourceApk;
AndroidConfiguration(Options options) throws InvalidConfigurationException {
@@ -801,6 +812,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.generateRobolectricRClass = options.generateRobolectricRClass;
this.throwOnResourceConflict = options.throwOnResourceConflict;
this.useParallelDex2Oat = options.useParallelDex2Oat;
+ this.useManifestFromResourceApk = options.useManifestFromResourceApk;
if (!dexoptsSupportedInIncrementalDexing.contains("--no-locals")) {
// TODO(bazel-team): Still needed? See DexArchiveAspect
@@ -929,6 +941,10 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return throwOnResourceConflict;
}
+ boolean useManifestFromResourceApk() {
+ return useManifestFromResourceApk;
+ }
+
@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/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index 4e416083cc..b9a1471ac0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -141,7 +141,11 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
if (definesLocalResources) {
primaryResources = resourceApk.getPrimaryResource();
// applicationManifest has already been checked for nullness above in this method
- ApplicationManifest applicationManifest = androidSemantics.getManifestForRule(ruleContext);
+ ApplicationManifest applicationManifest =
+ ruleContext.getFragment(AndroidConfiguration.class).useManifestFromResourceApk()
+ ? ApplicationManifest.fromExplicitManifest(ruleContext, resourceApk.getManifest())
+ : androidSemantics.getManifestForRule(ruleContext);
+
aar = Aar.create(aarOut, applicationManifest.getManifest());
addAarToProvider(aar, transitiveAars, transitiveAarArtifacts);
} else if (AndroidCommon.getAndroidResources(ruleContext) != null) {