aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java63
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java120
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java93
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java65
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java88
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java2
10 files changed, 135 insertions, 310 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 46f391878e..ab257ac612 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
@@ -96,47 +96,28 @@ public class AarImport implements RuleConfiguredTargetFactory {
ruleContext.registerAction(
createAarResourcesExtractorActions(ruleContext, aar, resources, assets));
- final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext);
- final ResourceApk resourceApk;
- if (AndroidResources.decoupleDataProcessing(dataContext)) {
- StampedAndroidManifest manifest = AndroidManifest.forAarImport(androidManifestArtifact);
-
- boolean neverlink = JavaCommon.isNeverLink(ruleContext);
- ValidatedAndroidResources validatedResources =
- AndroidResources.forAarImport(resources)
- .process(
- ruleContext,
- dataContext,
- manifest,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
- neverlink);
- MergedAndroidAssets mergedAssets =
- AndroidAssets.forAarImport(assets)
- .process(
- dataContext,
- AssetDependencies.fromRuleDeps(ruleContext, neverlink),
- AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
-
- resourceApk = ResourceApk.of(validatedResources, mergedAssets, null, null);
- } else {
- ApplicationManifest androidManifest =
- ApplicationManifest.fromExplicitManifest(ruleContext, androidManifestArtifact);
-
- Artifact resourcesZip =
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP);
-
- resourceApk =
- androidManifest.packAarWithDataAndResources(
- ruleContext,
- dataContext,
- 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);
- }
+ AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext);
+ StampedAndroidManifest manifest = AndroidManifest.forAarImport(androidManifestArtifact);
+
+ boolean neverlink = JavaCommon.isNeverLink(ruleContext);
+
+ ValidatedAndroidResources validatedResources =
+ AndroidResources.forAarImport(resources)
+ .process(
+ ruleContext,
+ dataContext,
+ manifest,
+ DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
+ neverlink);
+
+ MergedAndroidAssets mergedAssets =
+ AndroidAssets.forAarImport(assets)
+ .process(
+ dataContext,
+ AssetDependencies.fromRuleDeps(ruleContext, neverlink),
+ AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
+
+ ResourceApk resourceApk = ResourceApk.of(validatedResources, mergedAssets, null, null);
// 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
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 90c9c6f303..e66fca7247 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
@@ -183,85 +183,47 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
AndroidResources.validateRuleContext(ruleContext);
final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext);
- final ApplicationManifest applicationManifest;
- final ResourceApk resourceApk;
-
- if (AndroidResources.decoupleDataProcessing(dataContext)) {
- StampedAndroidManifest manifest =
- AndroidManifest.fromAttributes(ruleContext, dataContext, androidSemantics)
- .mergeWithDeps(
- dataContext,
- androidSemantics,
- resourceDeps,
- ApplicationManifest.getManifestValues(ruleContext),
- ApplicationManifest.useLegacyMerging(ruleContext));
- applicationManifest =
- ApplicationManifest.fromExplicitManifest(ruleContext, manifest.getManifest());
-
- AndroidAaptVersion aaptVersion = AndroidAaptVersion.chooseTargetAaptVersion(ruleContext);
- resourceApk =
- ProcessedAndroidData.processBinaryDataFrom(
- dataContext,
- ruleContext,
- manifest,
- /* conditionalKeepRules = */ shouldShrinkResourceCycles(
- dataContext.getAndroidConfig(), ruleContext, shrinkResources),
- applicationManifest.getManifestValues(),
- aaptVersion,
- AndroidResources.from(ruleContext, "resource_files"),
- AndroidAssets.from(ruleContext),
- resourceDeps,
- AssetDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
- ResourceFilterFactory.fromRuleContextAndAttrs(ruleContext),
- ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
- ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
- ? ruleContext
- .getPrerequisite("feature_of", Mode.TARGET, ApkInfo.PROVIDER)
- .getApk()
- : null,
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
- ? ruleContext
- .getPrerequisite("feature_after", Mode.TARGET, ApkInfo.PROVIDER)
- .getApk()
- : null,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()))
- .generateRClass(dataContext, aaptVersion);
- } else {
- applicationManifest =
- androidSemantics
- .getManifestForRule(ruleContext)
- .mergeWith(ruleContext, dataContext, androidSemantics, resourceDeps);
-
- Artifact featureOfArtifact =
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
- ? ruleContext.getPrerequisite("feature_of", Mode.TARGET, ApkInfo.PROVIDER).getApk()
- : null;
- Artifact featureAfterArtifact =
- ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
- ? ruleContext.getPrerequisite("feature_after", Mode.TARGET, ApkInfo.PROVIDER).getApk()
- : null;
- resourceApk =
- applicationManifest.packBinaryWithDataAndResources(
- ruleContext,
- dataContext,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK),
- resourceDeps,
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT),
- ResourceFilterFactory.fromRuleContextAndAttrs(ruleContext),
- ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
- ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
- ProguardHelper.getProguardConfigArtifact(ruleContext, ""),
- createMainDexProguardSpec(ruleContext.getLabel(), ruleContext),
- shouldShrinkResourceCycles(
- dataContext.getAndroidConfig(), ruleContext, shrinkResources),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP),
- featureOfArtifact,
- featureAfterArtifact);
- }
+ StampedAndroidManifest manifest =
+ AndroidManifest.fromAttributes(ruleContext, dataContext, androidSemantics)
+ .mergeWithDeps(
+ dataContext,
+ androidSemantics,
+ resourceDeps,
+ ApplicationManifest.getManifestValues(ruleContext),
+ ApplicationManifest.useLegacyMerging(ruleContext));
+ final ApplicationManifest applicationManifest =
+ ApplicationManifest.fromExplicitManifest(ruleContext, manifest.getManifest());
+
+ AndroidAaptVersion aaptVersion = AndroidAaptVersion.chooseTargetAaptVersion(ruleContext);
+ final ResourceApk resourceApk =
+ ProcessedAndroidData.processBinaryDataFrom(
+ dataContext,
+ ruleContext,
+ manifest,
+ /* conditionalKeepRules = */ shouldShrinkResourceCycles(
+ dataContext.getAndroidConfig(), ruleContext, shrinkResources),
+ applicationManifest.getManifestValues(),
+ aaptVersion,
+ AndroidResources.from(ruleContext, "resource_files"),
+ AndroidAssets.from(ruleContext),
+ resourceDeps,
+ AssetDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
+ ResourceFilterFactory.fromRuleContextAndAttrs(ruleContext),
+ ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
+ ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_of")
+ ? ruleContext
+ .getPrerequisite("feature_of", Mode.TARGET, ApkInfo.PROVIDER)
+ .getApk()
+ : null,
+ ruleContext.attributes().isAttributeValueExplicitlySpecified("feature_after")
+ ? ruleContext
+ .getPrerequisite("feature_after", Mode.TARGET, ApkInfo.PROVIDER)
+ .getApk()
+ : null,
+ DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()))
+ .generateRClass(dataContext, aaptVersion);
ruleContext.assertNoErrors();
@@ -339,7 +301,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
MobileInstallResourceApks mobileInstallResourceApks =
AndroidBinaryMobileInstall.createMobileInstallResourceApks(
- ruleContext, dataContext, applicationManifest, resourceDeps);
+ ruleContext, dataContext, applicationManifest);
return createAndroidBinary(
ruleContext,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java
index 88877f93ec..348698f062 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java
@@ -38,8 +38,6 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
import com.google.devtools.build.lib.rules.java.JavaInfo;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.rules.java.JavaTargetAttributes;
-import com.google.devtools.build.lib.rules.java.ProguardHelper;
-import com.google.devtools.build.lib.syntax.Type;
import java.util.Map;
/** Encapsulates the logic for creating actions for mobile-install. */
@@ -60,70 +58,41 @@ public final class AndroidBinaryMobileInstall {
static MobileInstallResourceApks createMobileInstallResourceApks(
RuleContext ruleContext,
AndroidDataContext dataContext,
- ApplicationManifest applicationManifest,
- ResourceDependencies resourceDeps)
+ ApplicationManifest applicationManifest)
throws RuleErrorException, InterruptedException {
final ResourceApk incrementalResourceApk;
final ResourceApk splitResourceApk;
- if (AndroidResources.decoupleDataProcessing(dataContext)) {
- StampedAndroidManifest manifest =
- new StampedAndroidManifest(
- applicationManifest.getManifest(), /* pkg = */ null, /* exported = */ true);
-
- incrementalResourceApk =
- ProcessedAndroidData.processIncrementalBinaryDataFrom(
- ruleContext,
- dataContext,
- manifest.addMobileInstallStubApplication(ruleContext),
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK),
- getMobileInstallArtifact(ruleContext, "merged_incremental_resources.bin"),
- "incremental",
- applicationManifest.getManifestValues())
- // Intentionally skip building an R class JAR - incremental binaries handle this
- // separately.
- .withValidatedResources(null);
-
- splitResourceApk =
- ProcessedAndroidData.processIncrementalBinaryDataFrom(
- ruleContext,
- dataContext,
- manifest.createSplitManifest(ruleContext, "android_resources", false),
- getMobileInstallArtifact(ruleContext, "android_resources.ap_"),
- getMobileInstallArtifact(ruleContext, "merged_split_resources.bin"),
- "incremental_split",
- applicationManifest.getManifestValues())
- // Intentionally skip building an R class JAR - incremental binaries handle this
- // separately.
- .withValidatedResources(null);
- } else {
- incrementalResourceApk =
- applicationManifest
- .addMobileInstallStubApplication(ruleContext)
- .packIncrementalBinaryWithDataAndResources(
- ruleContext,
- dataContext,
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK),
- resourceDeps,
- ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
- ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
- ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental"));
- ruleContext.assertNoErrors();
-
- splitResourceApk =
- applicationManifest
- .createSplitManifest(ruleContext, "android_resources", false)
- .packIncrementalBinaryWithDataAndResources(
- ruleContext,
- dataContext,
- getMobileInstallArtifact(ruleContext, "android_resources.ap_"),
- resourceDeps,
- ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"),
- ruleContext.attributes().get("crunch_png", Type.BOOLEAN),
- ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental_split"));
- }
+ StampedAndroidManifest manifest =
+ new StampedAndroidManifest(
+ applicationManifest.getManifest(), /* pkg = */ null, /* exported = */ true);
+
+ incrementalResourceApk =
+ ProcessedAndroidData.processIncrementalBinaryDataFrom(
+ ruleContext,
+ dataContext,
+ manifest.addMobileInstallStubApplication(ruleContext),
+ ruleContext.getImplicitOutputArtifact(
+ AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK),
+ getMobileInstallArtifact(ruleContext, "merged_incremental_resources.bin"),
+ "incremental",
+ applicationManifest.getManifestValues())
+ // Intentionally skip building an R class JAR - incremental binaries handle this
+ // separately.
+ .withValidatedResources(null);
+
+ splitResourceApk =
+ ProcessedAndroidData.processIncrementalBinaryDataFrom(
+ ruleContext,
+ dataContext,
+ manifest.createSplitManifest(ruleContext, "android_resources", false),
+ getMobileInstallArtifact(ruleContext, "android_resources.ap_"),
+ getMobileInstallArtifact(ruleContext, "merged_split_resources.bin"),
+ "incremental_split",
+ applicationManifest.getManifestValues())
+ // Intentionally skip building an R class JAR - incremental binaries handle this
+ // separately.
+ .withValidatedResources(null);
ruleContext.assertNoErrors();
return new MobileInstallResourceApks(incrementalResourceApk, splitResourceApk);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
index f0eaf20299..ffa414f9e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDataConverter.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.android;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLineItem.ParametrizedMapFn;
@@ -169,7 +170,8 @@ public class AndroidDataConverter<T> extends ParametrizedMapFn<T> {
}
}
- static String rootsToString(ImmutableList<PathFragment> roots) {
+ @VisibleForTesting
+ public static String rootsToString(ImmutableList<PathFragment> roots) {
return roots.stream().map(PathFragment::toString).collect(Collectors.joining("#"));
}
}
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 963ac63576..71cfb3b258 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
@@ -156,53 +156,32 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
// other artifacts.
final ResourceApk resourceApk;
if (definesLocalResources) {
- // By decoupling processing of manifest, resources and assets, we get a higher degree of
- // action parallelism.
- if (androidConfig.decoupleDataProcessing()) {
- StampedAndroidManifest manifest =
- AndroidManifest.fromAttributes(ruleContext, dataContext, androidSemantics)
- .stamp(dataContext);
-
- ValidatedAndroidResources resources =
- AndroidResources.from(ruleContext, "resource_files")
- .process(
- ruleContext,
- dataContext,
- manifest,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
- isNeverLink);
-
- MergedAndroidAssets assets =
- AndroidAssets.from(ruleContext)
- .process(
- dataContext,
- assetDeps,
- AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
-
- resourceApk = ResourceApk.of(resources, assets, null, null);
- } else {
- // Monolithically process all Android data in the same pipeline.
- ApplicationManifest applicationManifest =
- androidSemantics
- .getManifestForRule(ruleContext)
- .renamePackage(dataContext, AndroidCommon.getJavaPackage(ruleContext));
- resourceApk =
- applicationManifest.packLibraryWithDataAndResources(
- ruleContext,
- dataContext,
- resourceDeps,
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_MERGED_SYMBOLS),
- ruleContext.getImplicitOutputArtifact(
- AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP),
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()));
- }
+ StampedAndroidManifest manifest =
+ AndroidManifest.fromAttributes(ruleContext, dataContext, androidSemantics)
+ .stamp(dataContext);
+
+ ValidatedAndroidResources resources =
+ AndroidResources.from(ruleContext, "resource_files")
+ .process(
+ ruleContext,
+ dataContext,
+ manifest,
+ DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
+ isNeverLink);
+
+ MergedAndroidAssets assets =
+ AndroidAssets.from(ruleContext)
+ .process(
+ dataContext, assetDeps, AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
+
+ resourceApk = ResourceApk.of(resources, assets, null, null);
+
if (ruleContext.hasErrors()) {
return null;
}
} else {
- // No local resources, but we still need to process transitive resources.
+ // No local resources, but we still need to process transitive resources in order to export an
+ // aar.
resourceApk =
ResourceApk.processFromTransitiveLibraryData(
dataContext,
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 6e6743ce0e..5700cf35d0 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
@@ -60,7 +60,6 @@ import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
import com.google.devtools.build.lib.rules.java.JavaTargetAttributes;
import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
import com.google.devtools.build.lib.rules.java.OneVersionCheckActionBuilder;
-import com.google.devtools.build.lib.rules.java.ProguardHelper;
import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.OS;
@@ -94,49 +93,18 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
JavaTargetAttributes.Builder attributesBuilder = javaCommon.initCommon();
final AndroidDataContext dataContext = androidSemantics.makeContextForNative(ruleContext);
- final ResourceApk resourceApk;
-
- if (AndroidResources.decoupleDataProcessing(dataContext)) {
- resourceApk =
- buildResourceApk(
- dataContext,
- androidSemantics,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
- AndroidManifest.fromAttributes(ruleContext, dataContext),
- AndroidResources.from(ruleContext, "resource_files"),
- AndroidAssets.from(ruleContext),
- ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
- AssetDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
- ApplicationManifest.getManifestValues(ruleContext),
- AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
- } else {
- // Create the final merged manifest
- ResourceDependencies resourceDependencies =
- ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink= */ false);
-
- ApplicationManifest applicationManifest =
- getApplicationManifest(ruleContext, dataContext, resourceDependencies);
-
- // Create the final merged R class
- resourceApk =
- applicationManifest.packBinaryWithDataAndResources(
- ruleContext,
- dataContext,
- DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK),
- resourceDependencies,
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT),
- ResourceFilterFactory.fromRuleContextAndAttrs(ruleContext),
- ImmutableList.of(), /* list of uncompressed extensions */
- false, /* crunch png */
- ProguardHelper.getProguardConfigArtifact(ruleContext, ""),
- /* mainDexProguardCfg= */ null,
- /* conditionalKeepRules= */ false,
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST),
- ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_ZIP),
- null, /* featureOfArtifact */
- null /* featureAfterArtifact */);
- }
+ final ResourceApk resourceApk =
+ buildResourceApk(
+ dataContext,
+ androidSemantics,
+ DataBinding.contextFrom(ruleContext, dataContext.getAndroidConfig()),
+ AndroidManifest.fromAttributes(ruleContext, dataContext),
+ AndroidResources.from(ruleContext, "resource_files"),
+ AndroidAssets.from(ruleContext),
+ ResourceDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
+ AssetDependencies.fromRuleDeps(ruleContext, /* neverlink = */ false),
+ ApplicationManifest.getManifestValues(ruleContext),
+ AndroidAaptVersion.chooseTargetAaptVersion(ruleContext));
attributesBuilder.addRuntimeClassPathEntry(resourceApk.getResourceJavaClassJar());
@@ -408,38 +376,6 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor
.build();
}
- /**
- * Returns a merged {@link ApplicationManifest} for the rule. The final merged manifest will be
- * merged into the manifest provided on the rule, or into a placeholder manifest if one is not
- * provided
- *
- * @throws InterruptedException
- * @throws RuleErrorException
- */
- private ApplicationManifest getApplicationManifest(
- RuleContext ruleContext,
- AndroidDataContext dataContext,
- ResourceDependencies resourceDependencies)
- throws InterruptedException, RuleErrorException {
- ApplicationManifest applicationManifest;
-
- if (AndroidResources.definesAndroidResources(ruleContext.attributes())) {
- AndroidResources.validateRuleContext(ruleContext);
- ApplicationManifest ruleManifest =
- ApplicationManifest.renamedFromRule(ruleContext, dataContext);
- applicationManifest =
- ruleManifest.mergeWith(
- ruleContext, dataContext, createAndroidSemantics(), resourceDependencies);
- } else {
- // we don't have a manifest, merge like android_library with a stub manifest
- ApplicationManifest dummyManifest = ApplicationManifest.generatedManifest(ruleContext);
- applicationManifest =
- dummyManifest.mergeWith(
- ruleContext, dataContext, createAndroidSemantics(), resourceDependencies);
- }
- return applicationManifest;
- }
-
private static void setUpJavaCommon(
JavaCommon common,
JavaCompilationHelper helper,
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 c78533eb43..654397b4bf 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
@@ -102,10 +102,6 @@ public class AndroidResources {
validateManifest(ruleContext);
}
- public static boolean decoupleDataProcessing(AndroidDataContext dataContext) {
- return dataContext.getAndroidConfig().decoupleDataProcessing();
- }
-
/**
* Validates that there are no targets with resources in the srcs, as they should not be used with
* the Android data logic.
@@ -445,7 +441,7 @@ public class AndroidResources {
@Override
public boolean equals(Object object) {
- if (object == null || getClass() != object.getClass()) {
+ if (!(object instanceof AndroidResources)) {
return false;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
index f139a2b457..3ebefa4383 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
@@ -168,7 +168,7 @@ public class MergedAndroidResources extends ParsedAndroidResources {
@Override
public boolean equals(Object object) {
- if (!super.equals(object)) {
+ if (!super.equals(object) || !(object instanceof MergedAndroidResources)) {
return false;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
index bfb293577d..501079c72d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
@@ -172,7 +172,7 @@ public class ParsedAndroidResources extends AndroidResources
@Override
public boolean equals(Object object) {
- if (!super.equals(object)) {
+ if (!super.equals(object) || !(object instanceof ParsedAndroidResources)) {
return false;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
index 172dcee898..4c151328e9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
@@ -170,7 +170,7 @@ public class ValidatedAndroidResources extends MergedAndroidResources
@Override
public boolean equals(Object object) {
- if (!super.equals(object)) {
+ if (!super.equals(object) || !(object instanceof ValidatedAndroidResources)) {
return false;
}