diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java | 24 |
1 files changed, 21 insertions, 3 deletions
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 827586db41..4747929e40 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 @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.Type; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; +import com.google.devtools.build.lib.rules.android.AndroidLibraryAarProvider.Aar; 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.rules.cpp.LinkerInput; @@ -68,6 +69,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { checkIdlRootImport(ruleContext); NestedSet<AndroidResourcesProvider.ResourceContainer> transitiveResources = collectTransitiveResources(ruleContext); + NestedSetBuilder<Aar> transitiveAars = collectTransitiveAars(ruleContext); NestedSet<LinkerInput> transitiveNativeLibraries = AndroidCommon.collectTransitiveNativeLibraries(deps); NestedSet<Artifact> transitiveProguardConfigs = @@ -123,6 +125,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { .setAAROut(aarOut) .build(ruleContext); + Aar aar = new Aar(aarOut, applicationManifest.getManifest()); + RuleConfiguredTargetBuilder builder = new RuleConfiguredTargetBuilder(ruleContext); androidCommon.addTransitiveInfoProviders(builder); androidSemantics.addTransitiveInfoProviders( @@ -141,8 +145,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { .add(AndroidCcLinkParamsProvider.class, new AndroidCcLinkParamsProvider(androidCommon.getCcLinkParamsStore())) .add(ProguardSpecProvider.class, new ProguardSpecProvider(transitiveProguardConfigs)) - .add(AndroidLibraryAarProvider.class, new AndroidLibraryAarProvider(aarOut, - applicationManifest.getManifest())) + .add(AndroidLibraryAarProvider.class, new AndroidLibraryAarProvider(aar, + transitiveAars.add(aar).build())) .addOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL, transitiveProguardConfigs) .build(); } catch (RuleConfigurationException e) { @@ -196,8 +200,10 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { if (AndroidCommon.getAndroidResources(ruleContext) != null) { primaryResources = Iterables.getOnlyElement( AndroidCommon.getAndroidResources(ruleContext).getTransitiveAndroidResources()); + + Aar aar = new Aar(aarOut, primaryResources.getManifest()); targetBuilder.add(AndroidLibraryAarProvider.class, new AndroidLibraryAarProvider( - aarOut, primaryResources.getManifest())); + aar, transitiveAars.add(aar).build())); } else { // there are no local resources and resources attribute was not specified either ApplicationManifest applicationManifest = @@ -238,6 +244,9 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT) .setWorkingDirectory(ruleContext.getUniqueDirectory("_resources")) .build(ruleContext); + + targetBuilder.add(AndroidLibraryAarProvider.class, new AndroidLibraryAarProvider( + null, transitiveAars.build())); } new AarGeneratorBuilder(ruleContext) @@ -342,6 +351,15 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { return builder.build(); } + private NestedSetBuilder<Aar> collectTransitiveAars(RuleContext ruleContext) { + NestedSetBuilder<Aar> builder = NestedSetBuilder.naiveLinkOrder(); + for (AndroidLibraryAarProvider library : + ruleContext.getPrerequisites("deps", Mode.TARGET, AndroidLibraryAarProvider.class)) { + builder.addTransitive(library.getTransitiveAars()); + } + return builder; + } + private boolean hasExplicitlySpecifiedIdlImportRoot(RuleContext ruleContext) { return ruleContext.getRule().isAttributeValueExplicitlySpecified("idl_import_root"); } |