diff --git a/java/aar.go b/java/aar.go index d5996ba02..a4324e0b5 100644 --- a/java/aar.go +++ b/java/aar.go @@ -439,7 +439,7 @@ func aaptLibs(ctx android.ModuleContext, sdkContext android.SdkContext, classLoa switch depTag { case instrumentationForTag: // Nothing, instrumentationForTag is treated as libTag for javac but not for aapt2. - case libTag: + case sdkLibTag, libTag: if exportPackage != nil { sharedLibs = append(sharedLibs, exportPackage) } diff --git a/java/base.go b/java/base.go index 23b4d46b3..656a08010 100644 --- a/java/base.go +++ b/java/base.go @@ -530,7 +530,7 @@ func (j *Module) checkSdkVersions(ctx android.ModuleContext) { // TODO(satayev): cover other types as well, e.g. imports case *Library, *AndroidLibrary: switch tag { - case bootClasspathTag, libTag, staticLibTag, java9LibTag: + case bootClasspathTag, sdkLibTag, libTag, staticLibTag, java9LibTag: j.checkSdkLinkType(ctx, module.(moduleWithSdkDep), tag.(dependencyTag)) } } @@ -1955,7 +1955,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { if dep, ok := module.(SdkLibraryDependency); ok { switch tag { - case libTag: + case sdkLibTag, libTag: depHeaderJars := dep.SdkHeaderJars(ctx, j.SdkVersion(ctx)) deps.classpath = append(deps.classpath, depHeaderJars...) deps.dexClasspath = append(deps.dexClasspath, depHeaderJars...) @@ -1975,7 +1975,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { switch tag { case bootClasspathTag: deps.bootClasspath = append(deps.bootClasspath, dep.HeaderJars...) - case libTag, instrumentationForTag: + case sdkLibTag, libTag, instrumentationForTag: if _, ok := module.(*Plugin); ok { ctx.ModuleErrorf("a java_plugin (%s) cannot be used as a libs dependency", otherName) } @@ -2048,7 +2048,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps { } } else if dep, ok := module.(android.SourceFileProducer); ok { switch tag { - case libTag: + case sdkLibTag, libTag: checkProducesJars(ctx, dep) deps.classpath = append(deps.classpath, dep.Srcs()...) deps.dexClasspath = append(deps.classpath, dep.Srcs()...) diff --git a/java/droiddoc.go b/java/droiddoc.go index 15585f16a..2173dae30 100644 --- a/java/droiddoc.go +++ b/java/droiddoc.go @@ -267,7 +267,7 @@ func (j *Javadoc) addDeps(ctx android.BottomUpMutatorContext) { ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.bootclasspath...) ctx.AddVariationDependencies(nil, systemModulesTag, sdkDep.systemModules) ctx.AddVariationDependencies(nil, java9LibTag, sdkDep.java9Classpath...) - ctx.AddVariationDependencies(nil, libTag, sdkDep.classpath...) + ctx.AddVariationDependencies(nil, sdkLibTag, sdkDep.classpath...) } } @@ -367,7 +367,7 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps { } else { panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName())) } - case libTag: + case libTag, sdkLibTag: if dep, ok := module.(SdkLibraryDependency); ok { deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.SdkVersion(ctx))...) } else if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { diff --git a/java/java.go b/java/java.go index d04e52a2c..fc2af3b17 100644 --- a/java/java.go +++ b/java/java.go @@ -348,6 +348,7 @@ var ( dataDeviceBinsTag = dependencyTag{name: "dataDeviceBins"} staticLibTag = dependencyTag{name: "staticlib"} libTag = dependencyTag{name: "javalib", runtimeLinked: true} + sdkLibTag = dependencyTag{name: "sdklib", runtimeLinked: true} java9LibTag = dependencyTag{name: "java9lib", runtimeLinked: true} pluginTag = dependencyTag{name: "plugin", toolchain: true} errorpronePluginTag = dependencyTag{name: "errorprone-plugin", toolchain: true} @@ -374,7 +375,7 @@ var ( ) func IsLibDepTag(depTag blueprint.DependencyTag) bool { - return depTag == libTag + return depTag == libTag || depTag == sdkLibTag } func IsStaticLibDepTag(depTag blueprint.DependencyTag) bool { @@ -427,7 +428,7 @@ func sdkDeps(ctx android.BottomUpMutatorContext, sdkContext android.SdkContext, if sdkDep.useModule { ctx.AddVariationDependencies(nil, bootClasspathTag, sdkDep.bootclasspath...) ctx.AddVariationDependencies(nil, java9LibTag, sdkDep.java9Classpath...) - ctx.AddVariationDependencies(nil, libTag, sdkDep.classpath...) + ctx.AddVariationDependencies(nil, sdkLibTag, sdkDep.classpath...) if d.effectiveOptimizeEnabled() && sdkDep.hasStandardLibs() { ctx.AddVariationDependencies(nil, proguardRaiseTag, config.LegacyCorePlatformBootclasspathLibraries...) } @@ -1654,7 +1655,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { if ctx.OtherModuleHasProvider(module, JavaInfoProvider) { dep := ctx.OtherModuleProvider(module, JavaInfoProvider).(JavaInfo) switch tag { - case libTag: + case libTag, sdkLibTag: flags.classpath = append(flags.classpath, dep.HeaderJars...) flags.dexClasspath = append(flags.dexClasspath, dep.HeaderJars...) case staticLibTag: @@ -1664,7 +1665,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) { } } else if dep, ok := module.(SdkLibraryDependency); ok { switch tag { - case libTag: + case libTag, sdkLibTag: flags.classpath = append(flags.classpath, dep.SdkHeaderJars(ctx, j.SdkVersion(ctx))...) } } @@ -2178,7 +2179,7 @@ func addCLCFromDep(ctx android.ModuleContext, depModule android.Module, } depTag := ctx.OtherModuleDependencyTag(depModule) - if depTag == libTag { + if IsLibDepTag(depTag) { // Ok, propagate through non-static library dependencies. } else if tag, ok := depTag.(usesLibraryDependencyTag); ok && tag.sdkVersion == dexpreopt.AnySdkVersion { // Ok, propagate through non-compatibility dependencies. diff --git a/java/robolectric.go b/java/robolectric.go index 71ffdb175..7f2981fa8 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -23,6 +23,7 @@ import ( "android/soong/android" "android/soong/java/config" "android/soong/tradefed" + "github.com/google/blueprint/proptools" ) @@ -166,7 +167,7 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) instrumentedApp.implementationAndResourcesJar, } - for _, dep := range ctx.GetDirectDepsWithTag(libTag) { + handleLibDeps := func(dep android.Module) { m := ctx.OtherModuleProvider(dep, JavaInfoProvider).(JavaInfo) r.libs = append(r.libs, ctx.OtherModuleName(dep)) if !android.InList(ctx.OtherModuleName(dep), config.FrameworkLibraries) { @@ -174,6 +175,13 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) } } + for _, dep := range ctx.GetDirectDepsWithTag(libTag) { + handleLibDeps(dep) + } + for _, dep := range ctx.GetDirectDepsWithTag(sdkLibTag) { + handleLibDeps(dep) + } + r.combinedJar = android.PathForModuleOut(ctx, "robolectric_combined", r.outputFile.Base()) TransformJarsToJar(ctx, r.combinedJar, "combine jars", combinedJarJars, android.OptionalPath{}, false, nil, nil)