aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-04-18 10:46:09 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-18 10:48:10 -0700
commit76b100e3a9cc20313a49fd7c63c2de3ed4115cc9 (patch)
tree380db37c2b6dc6456e8d3c337686c413bb358e2e /src/main
parentff634f75bc2aadcba577f315ac8548a368c0dccd (diff)
Wire up decoupled data processing for aar_import rule
RELNOTES: none PiperOrigin-RevId: 193381165
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java51
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java4
5 files changed, 42 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
index 434531a670..9972335a77 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java
@@ -88,29 +88,46 @@ public class AarImport implements RuleConfiguredTargetFactory {
ruleContext.registerAction(
createAarResourcesExtractorActions(ruleContext, aar, resources, assets));
- ApplicationManifest androidManifest =
- ApplicationManifest.fromExplicitManifest(ruleContext, androidManifestArtifact);
-
- Artifact resourcesZip =
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP);
-
- ResourceApk resourceApk =
- androidManifest.packAarWithDataAndResources(
- ruleContext,
- AndroidAssets.forAarImport(assets),
- AndroidResources.forAarImport(resources),
- ResourceDependencies.fromRuleDeps(ruleContext, JavaCommon.isNeverLink(ruleContext)),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LOCAL_SYMBOLS),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
- resourcesZip);
+ final ResourceApk resourceApk;
+ if (AndroidResources.decoupleDataProcessing(ruleContext)) {
+ StampedAndroidManifest manifest =
+ AndroidManifest.forAarImport(ruleContext, androidManifestArtifact);
+
+ boolean neverlink = JavaCommon.isNeverLink(ruleContext);
+ ValidatedAndroidResources validatedResources =
+ AndroidResources.forAarImport(resources).process(ruleContext, manifest, neverlink);
+ MergedAndroidAssets mergedAssets =
+ AndroidAssets.forAarImport(assets).process(ruleContext, neverlink);
+
+ resourceApk = ResourceApk.of(validatedResources, mergedAssets);
+ } else {
+ ApplicationManifest androidManifest =
+ ApplicationManifest.fromExplicitManifest(ruleContext, androidManifestArtifact);
+
+ Artifact resourcesZip =
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP);
+
+ resourceApk =
+ androidManifest.packAarWithDataAndResources(
+ ruleContext,
+ AndroidAssets.forAarImport(assets),
+ AndroidResources.forAarImport(resources),
+ ResourceDependencies.fromRuleDeps(ruleContext, JavaCommon.isNeverLink(ruleContext)),
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT),
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LOCAL_SYMBOLS),
+ ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
+ resourcesZip);
+ }
// There isn't really any use case for building an aar_import target on its own, so the files to
// build could be empty. The resources zip and merged jars are added here as a sanity check for
// Bazel developers so that `bazel build java/com/my_aar_import` will fail if the resource
// processing or jar merging steps fail.
NestedSet<Artifact> filesToBuild =
- NestedSetBuilder.<Artifact>stableOrder().add(resourcesZip).add(mergedJar).build();
+ NestedSetBuilder.<Artifact>stableOrder()
+ .add(resourceApk.getValidatedResources().getMergedResources())
+ .add(mergedJar)
+ .build();
Artifact nativeLibs = createAarArtifact(ruleContext, "native_libs.zip");
ruleContext.registerAction(createAarNativeLibsFilterActions(ruleContext, aar, nativeLibs));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index 385aedfb1f..025bac06df 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -189,7 +189,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
final ApplicationManifest applicationManifest;
final ResourceApk resourceApk;
- if (AndroidCommon.getAndroidConfig(ruleContext).decoupleDataProcessing()) {
+ if (AndroidResources.decoupleDataProcessing(ruleContext)) {
StampedAndroidManifest manifest =
AndroidManifest.from(ruleContext, androidSemantics).mergeWithDeps(ruleContext);
applicationManifest =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
index ffab3d23fd..78dec89ede 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java
@@ -88,7 +88,7 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
final ResourceApk resourceApk;
final Artifact unprocessedManifest;
- if (AndroidCommon.getAndroidConfig(ruleContext).decoupleDataProcessing()) {
+ if (AndroidResources.decoupleDataProcessing(ruleContext)) {
StampedAndroidManifest manifest =
StampedAndroidManifest.from(ruleContext, androidSemantics).mergeWithDeps(ruleContext);
unprocessedManifest = manifest.getManifest();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
index e5bdcb873a..5cbb11ad57 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
@@ -34,8 +34,8 @@ public class AndroidManifest {
@Nullable private final String pkg;
private final boolean exported;
- public static AndroidManifest forAarImport(RuleContext ruleContext, Artifact manifest) {
- return new AndroidManifest(manifest, /* pkg = */ null, /* exported = */ true);
+ public static StampedAndroidManifest forAarImport(RuleContext ruleContext, Artifact manifest) {
+ return new StampedAndroidManifest(manifest, /* pkg = */ null, /* exported = */ true);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
index c30f6d9ad2..e48bf0d9ff 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
@@ -99,6 +99,10 @@ public class AndroidResources {
validateManifest(ruleContext);
}
+ public static boolean decoupleDataProcessing(RuleContext ruleContext) {
+ return AndroidCommon.getAndroidConfig(ruleContext).decoupleDataProcessing();
+ }
+
/**
* Validates that there are no targets with resources in the srcs, as they should not be used with
* the Android data logic.