Collect paths to transitive SDK Java library dependencies.
Previously only the names were collected, and later used in the manifest_fixer to add missing <uses-library> entries to the manifest. Now we also need to collect build-time and on-device paths, to be used in class loader context for dexpreopt. This commit only collects paths, but does not pass them to dexpreopt yet. Test: lunch aosp_cf_x86_phone-userdebug && m Bug: 132357300 Change-Id: I34b229ee68f16ba215ba03770feadb4d890ec2bf
This commit is contained in:
69
java/java.go
69
java/java.go
@@ -29,6 +29,7 @@ import (
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/dexpreopt"
|
||||
"android/soong/java/config"
|
||||
"android/soong/tradefed"
|
||||
)
|
||||
@@ -411,8 +412,8 @@ type Module struct {
|
||||
// manifest file to use instead of properties.Manifest
|
||||
overrideManifest android.OptionalPath
|
||||
|
||||
// list of SDK lib names that this java module is exporting
|
||||
exportedSdkLibs []string
|
||||
// map of SDK libs exported by this java module to their build and install paths
|
||||
exportedSdkLibs dexpreopt.LibraryPaths
|
||||
|
||||
// list of plugins that this java module is exporting
|
||||
exportedPluginJars android.Paths
|
||||
@@ -488,14 +489,19 @@ type ApexDependency interface {
|
||||
ImplementationAndResourcesJars() android.Paths
|
||||
}
|
||||
|
||||
type Dependency interface {
|
||||
ApexDependency
|
||||
ImplementationJars() android.Paths
|
||||
ResourceJars() android.Paths
|
||||
// Provides build path and install path to DEX jars.
|
||||
type UsesLibraryDependency interface {
|
||||
DexJarBuildPath() android.Path
|
||||
DexJarInstallPath() android.Path
|
||||
}
|
||||
|
||||
type Dependency interface {
|
||||
ApexDependency
|
||||
UsesLibraryDependency
|
||||
ImplementationJars() android.Paths
|
||||
ResourceJars() android.Paths
|
||||
AidlIncludeDirs() android.Paths
|
||||
ExportedSdkLibs() []string
|
||||
ExportedSdkLibs() dexpreopt.LibraryPaths
|
||||
ExportedPlugins() (android.Paths, []string)
|
||||
SrcJarArgs() ([]string, android.Paths)
|
||||
BaseModuleName() string
|
||||
@@ -973,12 +979,6 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
}
|
||||
}
|
||||
|
||||
// If this is a component library (stubs, etc.) for a java_sdk_library then
|
||||
// add the name of that java_sdk_library to the exported sdk libs to make sure
|
||||
// that, if necessary, a <uses-library> element for that java_sdk_library is
|
||||
// added to the Android manifest.
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, j.OptionalImplicitSdkLibrary()...)
|
||||
|
||||
ctx.VisitDirectDeps(func(module android.Module) {
|
||||
otherName := ctx.OtherModuleName(module)
|
||||
tag := ctx.OtherModuleDependencyTag(module)
|
||||
@@ -998,7 +998,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
case libTag:
|
||||
deps.classpath = append(deps.classpath, dep.SdkHeaderJars(ctx, j.sdkVersion())...)
|
||||
// names of sdk libs that are directly depended are exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, dep.OptionalImplicitSdkLibrary()...)
|
||||
j.exportedSdkLibs.AddLibraryPath(ctx, dep.OptionalImplicitSdkLibrary(), dep.DexJarBuildPath(), dep.DexJarInstallPath())
|
||||
case staticLibTag:
|
||||
ctx.ModuleErrorf("dependency on java_sdk_library %q can only be in libs", otherName)
|
||||
}
|
||||
@@ -1009,7 +1009,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
case libTag, instrumentationForTag:
|
||||
deps.classpath = append(deps.classpath, dep.HeaderJars()...)
|
||||
// sdk lib names from dependencies are re-exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...)
|
||||
j.exportedSdkLibs.AddLibraryPaths(dep.ExportedSdkLibs())
|
||||
deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs()...)
|
||||
pluginJars, pluginClasses := dep.ExportedPlugins()
|
||||
addPlugins(&deps, pluginJars, pluginClasses...)
|
||||
@@ -1021,7 +1021,7 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
deps.staticHeaderJars = append(deps.staticHeaderJars, dep.HeaderJars()...)
|
||||
deps.staticResourceJars = append(deps.staticResourceJars, dep.ResourceJars()...)
|
||||
// sdk lib names from dependencies are re-exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...)
|
||||
j.exportedSdkLibs.AddLibraryPaths(dep.ExportedSdkLibs())
|
||||
deps.aidlIncludeDirs = append(deps.aidlIncludeDirs, dep.AidlIncludeDirs()...)
|
||||
pluginJars, pluginClasses := dep.ExportedPlugins()
|
||||
addPlugins(&deps, pluginJars, pluginClasses...)
|
||||
@@ -1096,8 +1096,6 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
||||
}
|
||||
})
|
||||
|
||||
j.exportedSdkLibs = android.FirstUniqueStrings(j.exportedSdkLibs)
|
||||
|
||||
return deps
|
||||
}
|
||||
|
||||
@@ -1838,8 +1836,7 @@ func (j *Module) AidlIncludeDirs() android.Paths {
|
||||
return j.exportAidlIncludeDirs
|
||||
}
|
||||
|
||||
func (j *Module) ExportedSdkLibs() []string {
|
||||
// exportedSdkLibs is type []string
|
||||
func (j *Module) ExportedSdkLibs() dexpreopt.LibraryPaths {
|
||||
return j.exportedSdkLibs
|
||||
}
|
||||
|
||||
@@ -1972,6 +1969,7 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
j.dexProperties.Uncompress_dex = proptools.BoolPtr(shouldUncompressDex(ctx, &j.dexpreopter))
|
||||
}
|
||||
j.dexpreopter.uncompressedDex = *j.dexProperties.Uncompress_dex
|
||||
j.exportedSdkLibs = make(dexpreopt.LibraryPaths)
|
||||
j.compile(ctx, nil)
|
||||
|
||||
// Collect the module directory for IDE info in java/jdeps.go.
|
||||
@@ -1987,6 +1985,12 @@ func (j *Library) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
j.Stem()+".jar", j.outputFile, extraInstallDeps...)
|
||||
}
|
||||
|
||||
// If this is a component library (stubs, etc.) for a java_sdk_library then
|
||||
// add the name of that java_sdk_library to the exported sdk libs to make sure
|
||||
// that, if necessary, a <uses-library> element for that java_sdk_library is
|
||||
// added to the Android manifest.
|
||||
j.exportedSdkLibs.AddLibraryPath(ctx, j.OptionalImplicitSdkLibrary(), j.DexJarBuildPath(), j.DexJarInstallPath())
|
||||
|
||||
j.distFiles = j.GenerateTaggedDistFiles(ctx)
|
||||
}
|
||||
|
||||
@@ -2537,7 +2541,7 @@ type Import struct {
|
||||
properties ImportProperties
|
||||
|
||||
combinedClasspathFile android.Path
|
||||
exportedSdkLibs []string
|
||||
exportedSdkLibs dexpreopt.LibraryPaths
|
||||
exportAidlIncludeDirs android.Paths
|
||||
}
|
||||
|
||||
@@ -2590,12 +2594,7 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
TransformJetifier(ctx, outputFile, inputFile)
|
||||
}
|
||||
j.combinedClasspathFile = outputFile
|
||||
|
||||
// If this is a component library (impl, stubs, etc.) for a java_sdk_library then
|
||||
// add the name of that java_sdk_library to the exported sdk libs to make sure
|
||||
// that, if necessary, a <uses-library> element for that java_sdk_library is
|
||||
// added to the Android manifest.
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, j.OptionalImplicitSdkLibrary()...)
|
||||
j.exportedSdkLibs = make(dexpreopt.LibraryPaths)
|
||||
|
||||
ctx.VisitDirectDeps(func(module android.Module) {
|
||||
otherName := ctx.OtherModuleName(module)
|
||||
@@ -2606,23 +2605,29 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
switch tag {
|
||||
case libTag, staticLibTag:
|
||||
// sdk lib names from dependencies are re-exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, dep.ExportedSdkLibs()...)
|
||||
j.exportedSdkLibs.AddLibraryPaths(dep.ExportedSdkLibs())
|
||||
}
|
||||
case SdkLibraryDependency:
|
||||
switch tag {
|
||||
case libTag:
|
||||
// names of sdk libs that are directly depended are exported
|
||||
j.exportedSdkLibs = append(j.exportedSdkLibs, otherName)
|
||||
j.exportedSdkLibs.AddLibraryPath(ctx, &otherName, dep.DexJarBuildPath(), dep.DexJarInstallPath())
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
j.exportedSdkLibs = android.FirstUniqueStrings(j.exportedSdkLibs)
|
||||
var installFile android.Path
|
||||
if Bool(j.properties.Installable) {
|
||||
ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"),
|
||||
installFile = ctx.InstallFile(android.PathForModuleInstall(ctx, "framework"),
|
||||
jarName, outputFile)
|
||||
}
|
||||
|
||||
// If this is a component library (impl, stubs, etc.) for a java_sdk_library then
|
||||
// add the name of that java_sdk_library to the exported sdk libs to make sure
|
||||
// that, if necessary, a <uses-library> element for that java_sdk_library is
|
||||
// added to the Android manifest.
|
||||
j.exportedSdkLibs.AddLibraryPath(ctx, j.OptionalImplicitSdkLibrary(), outputFile, installFile)
|
||||
|
||||
j.exportAidlIncludeDirs = android.PathsForModuleSrc(ctx, j.properties.Aidl.Export_include_dirs)
|
||||
}
|
||||
|
||||
@@ -2665,7 +2670,7 @@ func (j *Import) AidlIncludeDirs() android.Paths {
|
||||
return j.exportAidlIncludeDirs
|
||||
}
|
||||
|
||||
func (j *Import) ExportedSdkLibs() []string {
|
||||
func (j *Import) ExportedSdkLibs() dexpreopt.LibraryPaths {
|
||||
return j.exportedSdkLibs
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user