Add imports_sdk_version to prebuilt_apis

This allows setting the prebuilt sdk's generated java_imports
sdk_version to "none".

Test: go tests
Test: m
Bug: 160455085
Merged-In: Id24aca811f0f09692971e63418da6685d8351737
Change-Id: Id24aca811f0f09692971e63418da6685d8351737
This commit is contained in:
Liz Kammer 2020-08-12 14:42:30 -07:00
parent 6a4700842c
commit 7b9cd3be32
3 changed files with 26 additions and 16 deletions

View File

@ -199,7 +199,7 @@ func (prebuilt *Import) AndroidMkEntries() []android.AndroidMkEntries {
entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", !Bool(prebuilt.properties.Installable))
entries.SetPath("LOCAL_SOONG_HEADER_JAR", prebuilt.combinedClasspathFile)
entries.SetPath("LOCAL_SOONG_CLASSES_JAR", prebuilt.combinedClasspathFile)
entries.SetString("LOCAL_SDK_VERSION", prebuilt.sdkVersion().raw)
entries.SetString("LOCAL_SDK_VERSION", prebuilt.makeSdkVersion())
entries.SetString("LOCAL_MODULE_STEM", prebuilt.Stem())
},
},

View File

@ -2464,6 +2464,10 @@ func (j *Import) sdkVersion() sdkSpec {
return sdkSpecFrom(String(j.properties.Sdk_version))
}
func (j *Import) makeSdkVersion() string {
return j.sdkVersion().raw
}
func (j *Import) minSdkVersion() sdkSpec {
return j.sdkVersion()
}

View File

@ -34,6 +34,10 @@ func RegisterPrebuiltApisBuildComponents(ctx android.RegistrationContext) {
type prebuiltApisProperties struct {
// list of api version directories
Api_dirs []string
// The sdk_version of java_import modules generated based on jar files.
// Defaults to "current"
Imports_sdk_version *string
}
type prebuiltApis struct {
@ -74,7 +78,7 @@ func prebuiltApiModuleName(mctx android.LoadHookContext, module string, scope st
return mctx.ModuleName() + "_" + scope + "_" + apiver + "_" + module
}
func createImport(mctx android.LoadHookContext, module string, scope string, apiver string, path string) {
func createImport(mctx android.LoadHookContext, module, scope, apiver, path, sdk_version string) {
props := struct {
Name *string
Jars []string
@ -83,7 +87,7 @@ func createImport(mctx android.LoadHookContext, module string, scope string, api
}{}
props.Name = proptools.StringPtr(prebuiltApiModuleName(mctx, module, scope, apiver))
props.Jars = append(props.Jars, path)
props.Sdk_version = proptools.StringPtr(scope)
props.Sdk_version = proptools.StringPtr(sdk_version)
props.Installable = proptools.BoolPtr(false)
mctx.CreateModule(ImportFactory, &props)
@ -100,10 +104,10 @@ func createFilegroup(mctx android.LoadHookContext, module string, scope string,
mctx.CreateModule(android.FileGroupFactory, &filegroupProps)
}
func getPrebuiltFiles(mctx android.LoadHookContext, name string) []string {
func getPrebuiltFiles(mctx android.LoadHookContext, p *prebuiltApis, name string) []string {
mydir := mctx.ModuleDir() + "/"
var files []string
for _, apiver := range mctx.Module().(*prebuiltApis).properties.Api_dirs {
for _, apiver := range p.properties.Api_dirs {
for _, scope := range []string{"public", "system", "test", "core", "module-lib", "system-server"} {
vfiles, err := mctx.GlobWithDeps(mydir+apiver+"/"+scope+"/"+name, nil)
if err != nil {
@ -115,16 +119,18 @@ func getPrebuiltFiles(mctx android.LoadHookContext, name string) []string {
return files
}
func prebuiltSdkStubs(mctx android.LoadHookContext) {
func prebuiltSdkStubs(mctx android.LoadHookContext, p *prebuiltApis) {
mydir := mctx.ModuleDir() + "/"
// <apiver>/<scope>/<module>.jar
files := getPrebuiltFiles(mctx, "*.jar")
files := getPrebuiltFiles(mctx, p, "*.jar")
sdk_version := proptools.StringDefault(p.properties.Imports_sdk_version, "current")
for _, f := range files {
// create a Import module for each jar file
localPath := strings.TrimPrefix(f, mydir)
module, apiver, scope := parseJarPath(localPath)
createImport(mctx, module, scope, apiver, localPath)
createImport(mctx, module, scope, apiver, localPath, sdk_version)
}
}
@ -139,8 +145,8 @@ func createSystemModules(mctx android.LoadHookContext, apiver string) {
mctx.CreateModule(SystemModulesFactory, &props)
}
func prebuiltSdkSystemModules(mctx android.LoadHookContext) {
for _, apiver := range mctx.Module().(*prebuiltApis).properties.Api_dirs {
func prebuiltSdkSystemModules(mctx android.LoadHookContext, p *prebuiltApis) {
for _, apiver := range p.properties.Api_dirs {
jar := android.ExistentPathForSource(mctx,
mctx.ModuleDir(), apiver, "public", "core-for-system-modules.jar")
if jar.Valid() {
@ -149,10 +155,10 @@ func prebuiltSdkSystemModules(mctx android.LoadHookContext) {
}
}
func prebuiltApiFiles(mctx android.LoadHookContext) {
func prebuiltApiFiles(mctx android.LoadHookContext, p *prebuiltApis) {
mydir := mctx.ModuleDir() + "/"
// <apiver>/<scope>/api/<module>.txt
files := getPrebuiltFiles(mctx, "api/*.txt")
files := getPrebuiltFiles(mctx, p, "api/*.txt")
if len(files) == 0 {
mctx.ModuleErrorf("no api file found under %q", mydir)
@ -200,10 +206,10 @@ func prebuiltApiFiles(mctx android.LoadHookContext) {
}
func createPrebuiltApiModules(mctx android.LoadHookContext) {
if _, ok := mctx.Module().(*prebuiltApis); ok {
prebuiltApiFiles(mctx)
prebuiltSdkStubs(mctx)
prebuiltSdkSystemModules(mctx)
if p, ok := mctx.Module().(*prebuiltApis); ok {
prebuiltApiFiles(mctx, p)
prebuiltSdkStubs(mctx, p)
prebuiltSdkSystemModules(mctx, p)
}
}