aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2017-07-20 16:39:08 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-21 09:11:59 +0200
commit1afbac0775d277625a07e318d4eae4627b093225 (patch)
tree3e8659e3d33128026989847d7074eebf2620ff15 /src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
parent79816f6cd178eaeb665fac21f5c6b60f7c52483c (diff)
Allow the aapt2 code paths to be enabled by either flag or attribute.
RELNOTES: None PiperOrigin-RevId: 162613289
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java93
1 files changed, 63 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
index 36ef672877..0fea1e2567 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
@@ -46,13 +46,15 @@ import javax.annotation.Nullable;
/** Represents a AndroidManifest, that may have been merged from dependencies. */
public final class ApplicationManifest {
- public static ApplicationManifest fromResourcesRule(RuleContext ruleContext) {
+
+ public static ApplicationManifest fromResourcesRule(RuleContext ruleContext)
+ throws RuleErrorException {
final AndroidResourcesProvider resources = AndroidCommon.getAndroidResources(ruleContext);
if (resources == null) {
ruleContext.attributeError("manifest", "a resources or manifest attribute is mandatory.");
return null;
}
- return new ApplicationManifest(
+ return fromExplicitManifest(
ruleContext, Iterables.getOnlyElement(resources.getDirectAndroidResources()).getManifest());
}
@@ -82,7 +84,7 @@ public final class ApplicationManifest {
}
ruleContext.registerAction(builder.build(ruleContext));
- return new ApplicationManifest(ruleContext, result);
+ return new ApplicationManifest(ruleContext, result, targetAaptVersion);
}
public ApplicationManifest addMobileInstallStubApplication(RuleContext ruleContext)
@@ -112,7 +114,7 @@ public final class ApplicationManifest {
ruleContext.registerAction(builder.build(ruleContext));
- return new ApplicationManifest(ruleContext, stubManifest);
+ return new ApplicationManifest(ruleContext, stubManifest, targetAaptVersion);
}
public ApplicationManifest addInstantRunStubApplication(RuleContext ruleContext)
@@ -133,28 +135,30 @@ public final class ApplicationManifest {
ruleContext.registerAction(builder.build(ruleContext));
- return new ApplicationManifest(ruleContext, stubManifest);
+ return new ApplicationManifest(ruleContext, stubManifest, targetAaptVersion);
}
- public static ApplicationManifest fromRule(RuleContext ruleContext) {
- return new ApplicationManifest(
+ public static ApplicationManifest fromRule(RuleContext ruleContext) throws RuleErrorException {
+ return fromExplicitManifest(
ruleContext, ruleContext.getPrerequisiteArtifact("manifest", Mode.TARGET));
}
- public static ApplicationManifest fromExplicitManifest(
- RuleContext ruleContext, Artifact manifest) {
- return new ApplicationManifest(ruleContext, manifest);
+ public static ApplicationManifest fromExplicitManifest(RuleContext ruleContext, Artifact manifest)
+ throws RuleErrorException {
+ return new ApplicationManifest(
+ ruleContext, manifest, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
}
/**
* Generates an empty manifest for a rule that does not directly specify resources.
*
- * <p><strong>Note:</strong> This generated manifest can then be used as the primary manifest
- * when merging with dependencies.
+ * <p><strong>Note:</strong> This generated manifest can then be used as the primary manifest when
+ * merging with dependencies.
*
* @return the generated ApplicationManifest
*/
- public static ApplicationManifest generatedManifest(RuleContext ruleContext) {
+ public static ApplicationManifest generatedManifest(RuleContext ruleContext)
+ throws RuleErrorException {
Artifact generatedManifest = ruleContext.getUniqueDirectoryArtifact(
ruleContext.getRule().getName() + "_generated", PathFragment.create("AndroidManifest.xml"),
ruleContext.getBinOrGenfilesDirectory());
@@ -172,7 +176,7 @@ public final class ApplicationManifest {
.registerAction(
FileWriteAction.create(
ruleContext, generatedManifest, contents, /*makeExecutable=*/ false));
- return new ApplicationManifest(ruleContext, generatedManifest);
+ return fromExplicitManifest(ruleContext, generatedManifest);
}
private static ImmutableMap<String, String> getManifestValues(RuleContext context) {
@@ -200,10 +204,13 @@ public final class ApplicationManifest {
private final Artifact manifest;
private final ImmutableMap<String, String> manifestValues;
+ private final AndroidAaptVersion targetAaptVersion;
- private ApplicationManifest(RuleContext ruleContext, Artifact manifest) {
+ private ApplicationManifest(
+ RuleContext ruleContext, Artifact manifest, AndroidAaptVersion targetAaptVersion) {
this.manifest = manifest;
this.manifestValues = getManifestValues(ruleContext);
+ this.targetAaptVersion = targetAaptVersion;
}
public ApplicationManifest mergeWith(RuleContext ruleContext, ResourceDependencies resourceDeps) {
@@ -222,7 +229,7 @@ public final class ApplicationManifest {
ruleContext.getBinOrGenfilesDirectory());
AndroidManifestMergeHelper.createMergeManifestAction(ruleContext, getManifest(),
mergeeManifests.keySet(), ImmutableList.of("all"), outputManifest);
- return new ApplicationManifest(ruleContext, outputManifest);
+ return new ApplicationManifest(ruleContext, outputManifest, targetAaptVersion);
}
} else {
if (!mergeeManifests.isEmpty() || !manifestValues.isEmpty()) {
@@ -241,7 +248,7 @@ public final class ApplicationManifest {
.setManifestOutput(outputManifest)
.setLogOut(mergeLog)
.build(ruleContext);
- return new ApplicationManifest(ruleContext, outputManifest);
+ return new ApplicationManifest(ruleContext, outputManifest, targetAaptVersion);
}
}
return this;
@@ -292,7 +299,7 @@ public final class ApplicationManifest {
.setCustomPackage(customPackage)
.setManifestOutput(outputManifest)
.build(ruleContext);
- return new ApplicationManifest(ruleContext, outputManifest);
+ return new ApplicationManifest(ruleContext, outputManifest, targetAaptVersion);
}
/** Packages up the manifest with assets from the rule and dependent resources. */
@@ -345,14 +352,15 @@ public final class ApplicationManifest {
if (ruleContext.hasErrors()) {
return null;
}
- ResourceContainer.Builder resourceContainer =
+ ResourceContainer.Builder builder =
ResourceContainer.builderFromRule(ruleContext)
.setRTxt(rTxt)
.setSymbols(symbols)
.setJavaPackageFrom(JavaPackageSource.MANIFEST);
if (alwaysExportManifest) {
- resourceContainer.setManifestExported(true);
+ builder.setManifestExported(true);
}
+
return createApk(
ruleContext,
true, /* isLibrary */
@@ -360,7 +368,7 @@ public final class ApplicationManifest {
ImmutableList.<String>of(), /* List<String> uncompressedExtensions */
false, /* crunchPng */
false, /* incremental */
- resourceContainer,
+ builder,
data,
null, /* Artifact proguardCfg */
null, /* Artifact mainDexProguardCfg */
@@ -418,7 +426,8 @@ public final class ApplicationManifest {
RuleContext ruleContext,
Artifact resourceApk,
ResourceDependencies resourceDeps,
- Artifact rTxt,
+ @Nullable Artifact rTxt,
+ ResourceFilter resourceFilter,
List<String> uncompressedExtensions,
boolean crunchPng,
Artifact proguardCfg,
@@ -442,6 +451,13 @@ public final class ApplicationManifest {
"resource_files",
Mode.TARGET,
FileProvider.class)).build();
+ ResourceContainer.Builder builder =
+ ResourceContainer.builderFromRule(ruleContext)
+ .setAssetsAndResourcesFrom(data)
+ .setManifest(getManifest())
+ .setRTxt(rTxt)
+ .setApk(resourceApk);
+
if (ruleContext.hasErrors()) {
return null;
}
@@ -452,9 +468,7 @@ public final class ApplicationManifest {
uncompressedExtensions,
crunchPng,
false /* incremental */,
- ResourceContainer.builderFromRule(ruleContext)
- .setRTxt(rTxt)
- .setApk(resourceApk),
+ builder,
data,
proguardCfg,
mainDexProguardCfg,
@@ -488,6 +502,28 @@ public final class ApplicationManifest {
if (ruleContext.hasErrors()) {
return null;
}
+ ResourceContainer.Builder builder =
+ ResourceContainer.builderFromRule(ruleContext)
+ .setAssetsAndResourcesFrom(data)
+ .setManifest(getManifest())
+ .setSymbols(symbols)
+ .setRTxt(rTxt);
+
+ if (targetAaptVersion == AndroidAaptVersion.AAPT2) {
+
+ builder
+ .setAapt2JavaSourceJar(
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_SOURCE_JAR))
+ .setAapt2RTxt(
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT))
+ .setCompiledSymbols(
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS))
+ .setStaticLibrary(
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+ }
return createApk(
ruleContext,
true /* isLibrary */,
@@ -495,10 +531,7 @@ public final class ApplicationManifest {
ImmutableList.<String>of() /* uncompressedExtensions */,
false /* crunchPng */,
false /* incremental */,
- ResourceContainer.builderFromRule(ruleContext)
- .setRTxt(rTxt)
- .setSymbols(symbols)
- .setApk(null),
+ builder,
data,
null /* proguardCfg */,
null /* mainDexProguardCfg */,
@@ -634,7 +667,7 @@ public final class ApplicationManifest {
.getFragment(AndroidConfiguration.class).throwOnResourceConflict());
if (!incremental) {
builder
- .targetAaptVersion(AndroidAaptVersion.AAPT)
+ .targetAaptVersion(targetAaptVersion)
.setRTxtOut(resourceContainer.getRTxt())
.setSymbols(resourceContainer.getSymbols())
.setSourceJarOut(resourceContainer.getJavaSourceJar());