aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java36
1 files changed, 24 insertions, 12 deletions
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 0bb79d7e22..1385b16a7b 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
@@ -311,6 +311,16 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
boolean shrinkResources = shouldShrinkResources(ruleContext);
+ NestedSet<Artifact> excludedRuntimeArtifacts = null;
+ if (!androidConfig.includeLibraryResourceJars()) {
+ // Remove the library resource JARs from the binary's runtime classpath.
+ // Resource classes from android_library dependencies are replaced by the binary's resource
+ // class. We remove them only at the top level so that resources included by a library that is
+ // a dependency of a java_library are still included, since these resources are propagated via
+ // android-specific providers and won't show up when we collect the library resource JARs.
+ excludedRuntimeArtifacts = getLibraryResourceJars(ruleContext);
+ }
+
JavaTargetAttributes resourceClasses = androidCommon.init(
javaSemantics,
androidSemantics,
@@ -318,7 +328,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.getConfiguration().isCodeCoverageEnabled(),
true /* collectJavaCompilationArgs */,
true, /* isBinary */
- androidConfig.includeLibraryResourceJars());
+ excludedRuntimeArtifacts);
ruleContext.assertNoErrors();
Function<Artifact, Artifact> derivedJarFunction =
@@ -689,19 +699,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
// The resources jars from android_library rules contain stub ids, so filter those out of the
// transitive jars.
- Iterable<AndroidLibraryResourceClassJarProvider> libraryResourceJarProviders =
- AndroidCommon.getTransitivePrerequisites(
- ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.class);
-
- NestedSetBuilder<Artifact> libraryResourceJarsBuilder = NestedSetBuilder.naiveLinkOrder();
- for (AndroidLibraryResourceClassJarProvider provider : libraryResourceJarProviders) {
- libraryResourceJarsBuilder.addTransitive(provider.getResourceClassJars());
- }
- NestedSet<Artifact> libraryResourceJars = libraryResourceJarsBuilder.build();
-
Iterable<Artifact> filteredJars =
Streams.stream(jars)
- .filter(not(in(libraryResourceJars.toSet())))
+ .filter(not(in(getLibraryResourceJars(ruleContext).toSet())))
.collect(toImmutableList());
AndroidSdkProvider sdk = AndroidSdkProvider.fromRuleContext(ruleContext);
@@ -720,6 +720,18 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ruleContext.registerAction(manifestAction);
}
+ private static NestedSet<Artifact> getLibraryResourceJars(RuleContext ruleContext) {
+ Iterable<AndroidLibraryResourceClassJarProvider> libraryResourceJarProviders =
+ AndroidCommon.getTransitivePrerequisites(
+ ruleContext, Mode.TARGET, AndroidLibraryResourceClassJarProvider.class);
+
+ NestedSetBuilder<Artifact> libraryResourceJarsBuilder = NestedSetBuilder.naiveLinkOrder();
+ for (AndroidLibraryResourceClassJarProvider provider : libraryResourceJarProviders) {
+ libraryResourceJarsBuilder.addTransitive(provider.getResourceClassJars());
+ }
+ return libraryResourceJarsBuilder.build();
+ }
+
/** Generates an uncompressed _deploy.jar of all the runtime jars. */
public static Artifact createDeployJar(
RuleContext ruleContext,