aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-08-29 21:18:21 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-08-30 08:35:25 +0000
commit5b942ff65ff2ef64dae40f94dfd7c3153e94779c (patch)
treeb16e34438449f43be089e1506a4db2ad5afa6e13 /src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java
parent13c60d05942609e0979087bc9b33931de78bdd76 (diff)
Hook up split-up resource processing tools for android_library
Behind a flag. Flow is: parse -> merge -> validate \--> compile With fewer deps across the merge steps. -- MOS_MIGRATED_REVID=131634115
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.java98
1 files changed, 69 insertions, 29 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 48ee3687b8..1799213b5e 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
@@ -35,6 +35,7 @@ import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidM
import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceContainer;
import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceType;
import com.google.devtools.build.lib.syntax.Type;
+import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.List;
@@ -394,37 +395,72 @@ public final class ApplicationManifest {
return null;
}
- AndroidResourcesProcessorBuilder builder =
- new AndroidResourcesProcessorBuilder(ruleContext)
- .setLibrary(isLibrary)
- .setApkOut(resourceContainer.getApk())
- .setConfigurationFilters(configurationFilters)
- .setUncompressedExtensions(uncompressedExtensions)
- .setCrunchPng(crunchPng)
- .setJavaPackage(resourceContainer.getJavaPackage())
- .setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
- .setManifestOut(manifestOut)
- .setMergedResourcesOut(mergedResources)
- .withPrimary(resourceContainer)
- .withDependencies(resourceDeps)
- .setDensities(densities)
- .setProguardOut(proguardCfg)
- .setMainDexProguardOut(mainDexProguardCfg)
- .setApplicationId(manifestValues.get("applicationId"))
- .setVersionCode(manifestValues.get("versionCode"))
- .setVersionName(manifestValues.get("versionName"));
-
- if (!incremental) {
- builder
- .setRTxtOut(resourceContainer.getRTxt())
- .setSymbolsTxt(resourceContainer.getSymbolsTxt())
- .setSourceJarOut(resourceContainer.getJavaSourceJar());
- }
+ ResourceContainer processed;
+ if (isLibrary && AndroidCommon.getAndroidConfig(ruleContext).useParallelResourceProcessing()) {
+ // android_library should only build the APK one way (!incremental).
+ Preconditions.checkArgument(!incremental);
+ Artifact rJavaClassJar = ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR);
+
+ if (resourceContainer.getSymbolsTxt() != null) {
+ new AndroidResourceParsingActionBuilder(ruleContext)
+ .setParse(data)
+ .setOutput(resourceContainer.getSymbolsTxt())
+ .build(ruleContext);
+ }
- ResourceContainer processed = builder.build(ruleContext);
+ AndroidResourceMergingActionBuilder resourcesMergerBuilder =
+ new AndroidResourceMergingActionBuilder(ruleContext)
+ .setJavaPackage(resourceContainer.getJavaPackage())
+ .withPrimary(resourceContainer)
+ .withDependencies(resourceDeps)
+ .setMergedResourcesOut(mergedResources)
+ .setManifestOut(manifestOut)
+ .setClassJarOut(rJavaClassJar);
+ ResourceContainer merged = resourcesMergerBuilder.build(ruleContext);
+
+ AndroidResourceValidatorActionBuilder validatorBuilder =
+ new AndroidResourceValidatorActionBuilder(ruleContext)
+ .setJavaPackage(merged.getJavaPackage())
+ .setDebug(
+ ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
+ .setMergedResources(mergedResources)
+ .withPrimary(merged)
+ .setSourceJarOut(merged.getJavaSourceJar())
+ .setRTxtOut(merged.getRTxt());
+ processed = validatorBuilder.build(ruleContext);
+ } else {
+ AndroidResourcesProcessorBuilder builder =
+ new AndroidResourcesProcessorBuilder(ruleContext)
+ .setLibrary(isLibrary)
+ .setApkOut(resourceContainer.getApk())
+ .setConfigurationFilters(configurationFilters)
+ .setUncompressedExtensions(uncompressedExtensions)
+ .setCrunchPng(crunchPng)
+ .setJavaPackage(resourceContainer.getJavaPackage())
+ .setDebug(ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT)
+ .setManifestOut(manifestOut)
+ .setMergedResourcesOut(mergedResources)
+ .withPrimary(resourceContainer)
+ .withDependencies(resourceDeps)
+ .setDensities(densities)
+ .setProguardOut(proguardCfg)
+ .setMainDexProguardOut(mainDexProguardCfg)
+ .setApplicationId(manifestValues.get("applicationId"))
+ .setVersionCode(manifestValues.get("versionCode"))
+ .setVersionName(manifestValues.get("versionName"));
+ if (!incremental) {
+ builder
+ .setRTxtOut(resourceContainer.getRTxt())
+ .setSymbolsTxt(resourceContainer.getSymbolsTxt())
+ .setSourceJarOut(resourceContainer.getJavaSourceJar());
+ }
+ processed = builder.build(ruleContext);
+ }
return new ResourceApk(
- resourceApk, processed.getJavaSourceJar(), resourceDeps, processed, processed.getManifest(),
+ resourceApk, processed.getJavaSourceJar(), processed.getJavaClassJar(),
+ resourceDeps, processed, processed.getManifest(),
proguardCfg, mainDexProguardCfg, false);
}
@@ -459,6 +495,7 @@ public final class ApplicationManifest {
return new ResourceApk(
resourceContainer.getApk(),
null /* javaSrcJar */,
+ null /* javaClassJar */,
ResourceDependencies.empty(),
resourceContainer,
manifest,
@@ -545,6 +582,7 @@ public final class ApplicationManifest {
resourceApk,
getManifest(),
javaSourcesJar,
+ null, /* javaClassJar */
resourceContainer.getArtifacts(ResourceType.ASSETS),
resourceContainer.getArtifacts(ResourceType.RESOURCES),
resourceContainer.getRoots(ResourceType.ASSETS),
@@ -554,7 +592,9 @@ public final class ApplicationManifest {
aaptActionHelper.createGenerateProguardAction(proguardCfg, mainDexProguardCfg);
- return new ResourceApk(resourceApk, updatedResources.getJavaSourceJar(),
+ return new ResourceApk(resourceApk,
+ updatedResources.getJavaSourceJar(),
+ updatedResources.getJavaClassJar(),
resourceDeps, updatedResources, manifest, proguardCfg, mainDexProguardCfg, true);
}