aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
diff options
context:
space:
mode:
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.java60
1 files changed, 32 insertions, 28 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 c9e3daea8c..94e99ac53d 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
@@ -34,9 +34,9 @@ import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.
import com.google.devtools.build.lib.packages.RuleErrorConsumer;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidManifestMerger;
+import com.google.devtools.build.lib.rules.android.DataBinding.DataBindingContext;
import com.google.devtools.build.lib.rules.android.ResourceContainer.Builder.JavaPackageSource;
import com.google.devtools.build.lib.syntax.Type;
-import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -371,6 +371,7 @@ public final class ApplicationManifest {
public ResourceApk packTestWithDataAndResources(
RuleContext ruleContext,
AndroidDataContext dataContext,
+ DataBindingContext dataBindingContext,
Artifact resourceApk,
ResourceDependencies resourceDeps,
@Nullable Artifact rTxt,
@@ -430,7 +431,8 @@ public final class ApplicationManifest {
AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR))
.build(dataContext, processed);
- return ResourceApk.of(finalContainer, resourceDeps, proguardCfg, mainDexProguardCfg);
+ return ResourceApk.of(
+ finalContainer, resourceDeps, proguardCfg, mainDexProguardCfg, dataBindingContext);
}
/** Packages up the manifest with resource and assets from the LocalResourceContainer. */
@@ -494,7 +496,7 @@ public final class ApplicationManifest {
.setStaticLibraryOut(merged.getStaticLibrary())
.build(dataContext, merged);
- return ResourceApk.of(processed, resourceDeps);
+ return ResourceApk.of(processed, resourceDeps, DataBinding.contextFrom(ruleContext));
}
/* Creates an incremental apk from assets and data. */
@@ -552,7 +554,8 @@ public final class ApplicationManifest {
// Intentionally skip building an R class JAR - incremental binaries handle this separately.
- return ResourceApk.of(processed, resourceDeps, proguardCfg, null);
+ return ResourceApk.of(
+ processed, resourceDeps, proguardCfg, null, DataBinding.contextFrom(ruleContext));
}
/** Packages up the manifest with resource and assets from the rule and dependent resources. */
@@ -560,6 +563,7 @@ public final class ApplicationManifest {
public ResourceApk packBinaryWithDataAndResources(
RuleContext ruleContext,
AndroidDataContext dataContext,
+ DataBindingContext dataBindingContext,
Artifact resourceApk,
ResourceDependencies resourceDeps,
@Nullable Artifact rTxt,
@@ -571,7 +575,6 @@ public final class ApplicationManifest {
boolean conditionalKeepRules,
Artifact manifestOut,
Artifact mergedResources,
- @Nullable Artifact dataBindingInfoZip,
@Nullable Artifact featureOf,
@Nullable Artifact featureAfter)
throws InterruptedException, RuleErrorException {
@@ -604,7 +607,7 @@ public final class ApplicationManifest {
"resource cycle shrinking can only be enabled for builds with aapt2");
}
- ResourceContainer processed =
+ final AndroidResourcesProcessorBuilder androidResourcesProcessorBuilder =
new AndroidResourcesProcessorBuilder()
.setLibrary(false)
.setApkOut(resourceContainer.getApk())
@@ -618,8 +621,10 @@ public final class ApplicationManifest {
.withResourceDependencies(resourceDeps)
.setProguardOut(proguardCfg)
.setMainDexProguardOut(mainDexProguardCfg)
- .conditionalKeepRules(conditionalKeepRules)
- .setDataBindingInfoZip(dataBindingInfoZip)
+ .conditionalKeepRules(conditionalKeepRules);
+ dataBindingContext.supplyLayoutInfo(androidResourcesProcessorBuilder::setDataBindingInfoZip);
+ ResourceContainer processed =
+ androidResourcesProcessorBuilder
.setApplicationId(manifestValues.get("applicationId"))
.setVersionCode(manifestValues.get("versionCode"))
.setVersionName(manifestValues.get("versionName"))
@@ -642,7 +647,8 @@ public final class ApplicationManifest {
AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR))
.build(dataContext, processed);
- return ResourceApk.of(finalContainer, resourceDeps, proguardCfg, mainDexProguardCfg);
+ return ResourceApk.of(
+ finalContainer, resourceDeps, proguardCfg, mainDexProguardCfg, dataBindingContext);
}
public ResourceApk packLibraryWithDataAndResources(
@@ -653,7 +659,7 @@ public final class ApplicationManifest {
Artifact symbols,
Artifact manifestOut,
Artifact mergedResources,
- @Nullable Artifact dataBindingInfoZip)
+ DataBindingContext dataBindingContext)
throws InterruptedException, RuleErrorException {
AndroidResources resources = AndroidResources.from(ruleContext, "resource_files");
AndroidAssets assets = AndroidAssets.from(ruleContext);
@@ -683,7 +689,7 @@ public final class ApplicationManifest {
AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
}
- ResourceContainer resourceContainer = builder.build();
+ final ResourceContainer resourceContainer = builder.build();
Artifact rJavaClassJar =
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR);
@@ -701,33 +707,31 @@ public final class ApplicationManifest {
.setOutput(resourceContainer.getSymbols())
.setCompiledSymbolsOutput(resourceContainer.getCompiledSymbols());
- if (dataBindingInfoZip != null && resourceContainer.getCompiledSymbols() != null) {
- PathFragment unusedInfo = dataBindingInfoZip.getRootRelativePath();
+ if (resourceContainer.getCompiledSymbols() != null) {
// TODO(corysmith): Centralize the data binding processing and zipping into a single
// action. Data binding processing needs to be triggered here as well as the merger to
// avoid aapt2 from throwing an error during compilation.
- parsingBuilder
- .setDataBindingInfoZip(
- ruleContext.getDerivedArtifact(
- unusedInfo.replaceName(unusedInfo.getBaseName() + "_unused.zip"),
- dataBindingInfoZip.getRoot()))
- .setManifest(resourceContainer.getManifest())
- .setJavaPackage(resourceContainer.getJavaPackage());
+ dataBindingContext.supplyLayoutInfo(
+ layoutInfo ->
+ parsingBuilder
+ .setDataBindingInfoZip(
+ ruleContext.getUniqueDirectoryArtifact("dummydatabinding", "unused.zip"))
+ .setManifest(resourceContainer.getManifest())
+ .setJavaPackage(resourceContainer.getJavaPackage()));
}
- resourceContainer = parsingBuilder.buildAndUpdate(dataContext, resourceContainer);
+ ResourceContainer parsedResourceContainer =
+ parsingBuilder.buildAndUpdate(dataContext, resourceContainer);
ResourceContainer merged =
new AndroidResourceMergingActionBuilder()
- .setJavaPackage(resourceContainer.getJavaPackage())
+ .setJavaPackage(parsedResourceContainer.getJavaPackage())
.withDependencies(resourceDeps)
.setThrowOnResourceConflict(androidConfiguration.throwOnResourceConflict())
.setUseCompiledMerge(skipParsingAction)
- .setDataBindingInfoZip(dataBindingInfoZip)
.setMergedResourcesOut(mergedResources)
.setManifestOut(manifestOut)
.setClassJarOut(rJavaClassJar)
- .setDataBindingInfoZip(dataBindingInfoZip)
- .build(dataContext, resourceContainer);
+ .build(dataContext, parsedResourceContainer);
ResourceContainer processed =
new AndroidResourceValidatorActionBuilder()
@@ -736,16 +740,16 @@ public final class ApplicationManifest {
.setMergedResources(mergedResources)
.setRTxtOut(merged.getRTxt())
.setSourceJarOut(merged.getJavaSourceJar())
- .setApkOut(resourceContainer.getApk())
- // aapt2 related artifacts. Will be generated if the targetAaptVersion is AAPT2.
+ .setApkOut(parsedResourceContainer.getApk())
.withDependencies(resourceDeps)
+ // aapt2 related artifacts. Will be generated if the targetAaptVersion is AAPT2.
.setCompiledSymbols(merged.getCompiledSymbols())
.setAapt2RTxtOut(merged.getAapt2RTxt())
.setAapt2SourceJarOut(merged.getAapt2JavaSourceJar())
.setStaticLibraryOut(merged.getStaticLibrary())
.build(dataContext, merged);
- return ResourceApk.of(processed, resourceDeps);
+ return ResourceApk.of(processed, resourceDeps, dataBindingContext);
}
public Artifact getManifest() {