Support core library
To support core library, "Openjdk9", "No_standard_libs" and metalava
properties are added to java_sdk_library.
If core_lib is true, dist paths are changed to
apistubs/core/....
impl library name is changed to {module_name}.jar instead of
{module_name}.impl.jar
Bug: 110404779
Test: m -j
Change-Id: Ieb6248ea714b4260333d8bf61573d4f3413f7f24
Merged-In: Ieb6248ea714b4260333d8bf61573d4f3413f7f24
(cherry picked from commit af4907fed7
)
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -33,7 +34,6 @@ var (
|
||||
sdkSystemApiSuffix = ".system"
|
||||
sdkTestApiSuffix = ".test"
|
||||
sdkDocsSuffix = ".docs"
|
||||
sdkImplLibrarySuffix = ".impl"
|
||||
sdkXmlFileSuffix = ".xml"
|
||||
)
|
||||
|
||||
@@ -46,7 +46,6 @@ var (
|
||||
publicApiStubsTag = dependencyTag{name: "public"}
|
||||
systemApiStubsTag = dependencyTag{name: "system"}
|
||||
testApiStubsTag = dependencyTag{name: "test"}
|
||||
implLibTag = dependencyTag{name: "platform"}
|
||||
publicApiFileTag = dependencyTag{name: "publicApi"}
|
||||
systemApiFileTag = dependencyTag{name: "systemApi"}
|
||||
testApiFileTag = dependencyTag{name: "testApi"}
|
||||
@@ -89,20 +88,9 @@ func init() {
|
||||
}
|
||||
|
||||
type sdkLibraryProperties struct {
|
||||
// list of source files used to compile the Java module. May be .java, .logtags, .proto,
|
||||
// or .aidl files.
|
||||
Srcs []string `android:"arch_variant"`
|
||||
|
||||
// list of optional source files that are part of API but not part of runtime library.
|
||||
Api_srcs []string `android:"arch_variant"`
|
||||
|
||||
// list of of java libraries that will be in the classpath
|
||||
Libs []string `android:"arch_variant"`
|
||||
|
||||
// list of java libraries that will be compiled into the resulting runtime jar.
|
||||
// These libraries are not compiled into the stubs jar.
|
||||
Static_libs []string `android:"arch_variant"`
|
||||
|
||||
// List of Java libraries that will be in the classpath when building stubs
|
||||
Stub_only_libs []string `android:"arch_variant"`
|
||||
|
||||
@@ -112,18 +100,9 @@ type sdkLibraryProperties struct {
|
||||
// list of package names that must be hidden from the API
|
||||
Hidden_api_packages []string
|
||||
|
||||
Errorprone struct {
|
||||
// List of javac flags that should only be used when running errorprone.
|
||||
Javacflags []string
|
||||
}
|
||||
|
||||
// Additional droiddoc options
|
||||
Droiddoc_options []string
|
||||
|
||||
// If set to true, compile dex regardless of installable. Defaults to false.
|
||||
// This applies to the stubs lib.
|
||||
Compile_dex *bool
|
||||
|
||||
// the java library (in classpath) for documentation that provides java srcs and srcjars.
|
||||
Srcs_lib *string
|
||||
|
||||
@@ -134,27 +113,32 @@ type sdkLibraryProperties struct {
|
||||
// Defaults to "android.annotation".
|
||||
Srcs_lib_whitelist_pkgs []string
|
||||
|
||||
// a list of top-level directories containing files to merge qualifier annotations
|
||||
// (i.e. those intended to be included in the stubs written) from.
|
||||
Merge_annotations_dirs []string
|
||||
|
||||
// a list of top-level directories containing Java stub files to merge show/hide annotations from.
|
||||
Merge_inclusion_annotations_dirs []string
|
||||
|
||||
// If set to true, the path of dist files is apistubs/core. Defaults to false.
|
||||
Core_lib *bool
|
||||
|
||||
// TODO: determines whether to create HTML doc or not
|
||||
//Html_doc *bool
|
||||
}
|
||||
|
||||
type sdkLibrary struct {
|
||||
android.ModuleBase
|
||||
android.DefaultableModuleBase
|
||||
Library
|
||||
|
||||
properties sdkLibraryProperties
|
||||
deviceProperties CompilerDeviceProperties
|
||||
dexpreoptProperties DexpreoptProperties
|
||||
sdkLibraryProperties sdkLibraryProperties
|
||||
|
||||
publicApiStubsPath android.Paths
|
||||
systemApiStubsPath android.Paths
|
||||
testApiStubsPath android.Paths
|
||||
implLibPath android.Paths
|
||||
|
||||
publicApiStubsImplPath android.Paths
|
||||
systemApiStubsImplPath android.Paths
|
||||
testApiStubsImplPath android.Paths
|
||||
implLibImplPath android.Paths
|
||||
|
||||
publicApiFilePath android.Path
|
||||
systemApiFilePath android.Path
|
||||
@@ -164,16 +148,21 @@ type sdkLibrary struct {
|
||||
func (module *sdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
// Add dependencies to the stubs library
|
||||
ctx.AddVariationDependencies(nil, publicApiStubsTag, module.stubsName(apiScopePublic))
|
||||
ctx.AddVariationDependencies(nil, systemApiStubsTag, module.stubsName(apiScopeSystem))
|
||||
ctx.AddVariationDependencies(nil, testApiStubsTag, module.stubsName(apiScopeTest))
|
||||
ctx.AddVariationDependencies(nil, implLibTag, module.implName())
|
||||
|
||||
ctx.AddVariationDependencies(nil, publicApiFileTag, module.docsName(apiScopePublic))
|
||||
ctx.AddVariationDependencies(nil, systemApiFileTag, module.docsName(apiScopeSystem))
|
||||
ctx.AddVariationDependencies(nil, testApiFileTag, module.docsName(apiScopeTest))
|
||||
|
||||
if !Bool(module.properties.No_standard_libs) {
|
||||
ctx.AddVariationDependencies(nil, systemApiStubsTag, module.stubsName(apiScopeSystem))
|
||||
ctx.AddVariationDependencies(nil, systemApiFileTag, module.docsName(apiScopeSystem))
|
||||
ctx.AddVariationDependencies(nil, testApiFileTag, module.docsName(apiScopeTest))
|
||||
ctx.AddVariationDependencies(nil, testApiStubsTag, module.stubsName(apiScopeTest))
|
||||
}
|
||||
|
||||
module.Library.deps(ctx)
|
||||
}
|
||||
|
||||
func (module *sdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||
module.Library.GenerateAndroidBuildActions(ctx)
|
||||
|
||||
// Record the paths to the header jars of the library (stubs and impl).
|
||||
// When this java_sdk_library is dependened from others via "libs" property,
|
||||
// the recorded paths will be returned depending on the link type of the caller.
|
||||
@@ -192,11 +181,6 @@ func (module *sdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
||||
case testApiStubsTag:
|
||||
module.testApiStubsPath = lib.HeaderJars()
|
||||
module.testApiStubsImplPath = lib.ImplementationJars()
|
||||
case implLibTag:
|
||||
module.implLibPath = lib.HeaderJars()
|
||||
module.implLibImplPath = lib.ImplementationJars()
|
||||
default:
|
||||
ctx.ModuleErrorf("depends on module %q of unknown tag %q", otherName, tag)
|
||||
}
|
||||
}
|
||||
if doc, ok := to.(ApiFilePath); ok {
|
||||
@@ -215,58 +199,62 @@ func (module *sdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
||||
}
|
||||
|
||||
func (module *sdkLibrary) AndroidMk() android.AndroidMkData {
|
||||
return android.AndroidMkData{
|
||||
Custom: func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) {
|
||||
// Create a phony module that installs the impl library, for the case when this lib is
|
||||
// in PRODUCT_PACKAGES.
|
||||
fmt.Fprintln(w, "\ninclude $(CLEAR_VARS)")
|
||||
fmt.Fprintln(w, "LOCAL_PATH :=", moduleDir)
|
||||
fmt.Fprintln(w, "LOCAL_MODULE :=", name)
|
||||
fmt.Fprintln(w, "LOCAL_REQUIRED_MODULES := "+module.implName())
|
||||
fmt.Fprintln(w, "include $(BUILD_PHONY_PACKAGE)")
|
||||
owner := module.ModuleBase.Owner()
|
||||
if owner == "" {
|
||||
data := module.Library.AndroidMk()
|
||||
data.Required = append(data.Required, module.xmlFileName())
|
||||
|
||||
data.Custom = func(w io.Writer, name, prefix, moduleDir string, data android.AndroidMkData) {
|
||||
android.WriteAndroidMkData(w, data)
|
||||
|
||||
module.Library.AndroidMkHostDex(w, name, data)
|
||||
// Create a phony module that installs the impl library, for the case when this lib is
|
||||
// in PRODUCT_PACKAGES.
|
||||
owner := module.ModuleBase.Owner()
|
||||
if owner == "" {
|
||||
if Bool(module.sdkLibraryProperties.Core_lib) {
|
||||
owner = "core"
|
||||
} else {
|
||||
owner = "android"
|
||||
}
|
||||
// Create dist rules to install the stubs libs to the dist dir
|
||||
if len(module.publicApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.publicApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "public",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if len(module.systemApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.systemApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "system",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if len(module.testApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.testApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "test",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if module.publicApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.publicApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "public", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
if module.systemApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.systemApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "system", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
if module.testApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.testApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "test", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
},
|
||||
}
|
||||
// Create dist rules to install the stubs libs to the dist dir
|
||||
if len(module.publicApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.publicApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "public",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if len(module.systemApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.systemApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "system",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if len(module.testApiStubsPath) == 1 {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.testApiStubsImplPath.Strings()[0]+
|
||||
":"+path.Join("apistubs", owner, "test",
|
||||
module.BaseModuleName()+".jar")+")")
|
||||
}
|
||||
if module.publicApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.publicApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "public", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
if module.systemApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.systemApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "system", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
if module.testApiFilePath != nil {
|
||||
fmt.Fprintln(w, "$(call dist-for-goals,sdk win_sdk,"+
|
||||
module.testApiFilePath.String()+
|
||||
":"+path.Join("apistubs", owner, "test", "api",
|
||||
module.BaseModuleName()+".txt")+")")
|
||||
}
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
// Module name of the stubs library
|
||||
@@ -295,7 +283,7 @@ func (module *sdkLibrary) docsName(apiScope apiScope) string {
|
||||
|
||||
// Module name of the runtime implementation library
|
||||
func (module *sdkLibrary) implName() string {
|
||||
return module.BaseModuleName() + sdkImplLibrarySuffix
|
||||
return module.BaseModuleName()
|
||||
}
|
||||
|
||||
// File path to the runtime implementation library
|
||||
@@ -385,6 +373,9 @@ func (module *sdkLibrary) createStubsLibrary(mctx android.TopDownMutatorContext,
|
||||
Device_specific *bool
|
||||
Product_specific *bool
|
||||
Compile_dex *bool
|
||||
No_standard_libs *bool
|
||||
System_modules *string
|
||||
Java_version *string
|
||||
Product_variables struct {
|
||||
Unbundled_build struct {
|
||||
Enabled *bool
|
||||
@@ -393,18 +384,27 @@ func (module *sdkLibrary) createStubsLibrary(mctx android.TopDownMutatorContext,
|
||||
Enabled *bool
|
||||
}
|
||||
}
|
||||
Openjdk9 struct {
|
||||
Srcs []string
|
||||
Javacflags []string
|
||||
}
|
||||
}{}
|
||||
|
||||
props.Name = proptools.StringPtr(module.stubsName(apiScope))
|
||||
// sources are generated from the droiddoc
|
||||
props.Srcs = []string{":" + module.docsName(apiScope)}
|
||||
props.Sdk_version = proptools.StringPtr(module.sdkVersion(apiScope))
|
||||
props.Libs = module.properties.Stub_only_libs
|
||||
props.Libs = module.sdkLibraryProperties.Stub_only_libs
|
||||
// Unbundled apps will use the prebult one from /prebuilts/sdk
|
||||
props.Product_variables.Unbundled_build.Enabled = proptools.BoolPtr(false)
|
||||
props.Product_variables.Pdk.Enabled = proptools.BoolPtr(false)
|
||||
if module.properties.Compile_dex != nil {
|
||||
props.Compile_dex = module.properties.Compile_dex
|
||||
props.No_standard_libs = module.Library.Module.properties.No_standard_libs
|
||||
props.System_modules = module.Library.Module.deviceProperties.System_modules
|
||||
props.Openjdk9.Srcs = module.Library.Module.properties.Openjdk9.Srcs
|
||||
props.Openjdk9.Javacflags = module.Library.Module.properties.Openjdk9.Javacflags
|
||||
props.Java_version = module.Library.Module.properties.Java_version
|
||||
if module.Library.Module.deviceProperties.Compile_dex != nil {
|
||||
props.Compile_dex = module.Library.Module.deviceProperties.Compile_dex
|
||||
}
|
||||
|
||||
if module.SocSpecific() {
|
||||
@@ -422,18 +422,22 @@ func (module *sdkLibrary) createStubsLibrary(mctx android.TopDownMutatorContext,
|
||||
// files
|
||||
func (module *sdkLibrary) createDocs(mctx android.TopDownMutatorContext, apiScope apiScope) {
|
||||
props := struct {
|
||||
Name *string
|
||||
Srcs []string
|
||||
Installable *bool
|
||||
Srcs_lib *string
|
||||
Srcs_lib_whitelist_dirs []string
|
||||
Srcs_lib_whitelist_pkgs []string
|
||||
Libs []string
|
||||
Args *string
|
||||
Api_tag_name *string
|
||||
Api_filename *string
|
||||
Removed_api_filename *string
|
||||
Check_api struct {
|
||||
Name *string
|
||||
Srcs []string
|
||||
Installable *bool
|
||||
Srcs_lib *string
|
||||
Srcs_lib_whitelist_dirs []string
|
||||
Srcs_lib_whitelist_pkgs []string
|
||||
Libs []string
|
||||
Args *string
|
||||
Api_tag_name *string
|
||||
Api_filename *string
|
||||
Removed_api_filename *string
|
||||
No_standard_libs *bool
|
||||
Java_version *string
|
||||
Merge_annotations_dirs []string
|
||||
Merge_inclusion_annotations_dirs []string
|
||||
Check_api struct {
|
||||
Current ApiToCheck
|
||||
Last_released ApiToCheck
|
||||
}
|
||||
@@ -444,19 +448,24 @@ func (module *sdkLibrary) createDocs(mctx android.TopDownMutatorContext, apiScop
|
||||
}{}
|
||||
|
||||
props.Name = proptools.StringPtr(module.docsName(apiScope))
|
||||
props.Srcs = append(props.Srcs, module.properties.Srcs...)
|
||||
props.Srcs = append(props.Srcs, module.properties.Api_srcs...)
|
||||
props.Srcs = append(props.Srcs, module.Library.Module.properties.Srcs...)
|
||||
props.Srcs = append(props.Srcs, module.sdkLibraryProperties.Api_srcs...)
|
||||
props.Installable = proptools.BoolPtr(false)
|
||||
// A droiddoc module has only one Libs property and doesn't distinguish between
|
||||
// shared libs and static libs. So we need to add both of these libs to Libs property.
|
||||
props.Libs = module.properties.Libs
|
||||
props.Libs = append(props.Libs, module.properties.Static_libs...)
|
||||
props.Aidl.Include_dirs = module.deviceProperties.Aidl.Include_dirs
|
||||
props.Aidl.Local_include_dirs = module.deviceProperties.Aidl.Local_include_dirs
|
||||
props.Libs = module.Library.Module.properties.Libs
|
||||
props.Libs = append(props.Libs, module.Library.Module.properties.Static_libs...)
|
||||
props.Aidl.Include_dirs = module.Library.Module.deviceProperties.Aidl.Include_dirs
|
||||
props.Aidl.Local_include_dirs = module.Library.Module.deviceProperties.Aidl.Local_include_dirs
|
||||
props.No_standard_libs = module.Library.Module.properties.No_standard_libs
|
||||
props.Java_version = module.Library.Module.properties.Java_version
|
||||
|
||||
droiddocArgs := " --stub-packages " + strings.Join(module.properties.Api_packages, ":") +
|
||||
" " + android.JoinWithPrefix(module.properties.Hidden_api_packages, " --hide-package ") +
|
||||
" " + android.JoinWithPrefix(module.properties.Droiddoc_options, " ") +
|
||||
props.Merge_annotations_dirs = module.sdkLibraryProperties.Merge_annotations_dirs
|
||||
props.Merge_inclusion_annotations_dirs = module.sdkLibraryProperties.Merge_inclusion_annotations_dirs
|
||||
|
||||
droiddocArgs := " --stub-packages " + strings.Join(module.sdkLibraryProperties.Api_packages, ":") +
|
||||
" " + android.JoinWithPrefix(module.sdkLibraryProperties.Hidden_api_packages, " --hide-package ") +
|
||||
" " + android.JoinWithPrefix(module.sdkLibraryProperties.Droiddoc_options, " ") +
|
||||
" --hide MissingPermission --hide BroadcastBehavior " +
|
||||
"--hide HiddenSuperclass --hide DeprecationMismatch --hide UnavailableSymbol " +
|
||||
"--hide SdkConstant --hide HiddenTypeParameter --hide Todo --hide Typo"
|
||||
@@ -498,55 +507,13 @@ func (module *sdkLibrary) createDocs(mctx android.TopDownMutatorContext, apiScop
|
||||
module.latestApiFilegroupName(apiScope))
|
||||
props.Check_api.Last_released.Removed_api_file = proptools.StringPtr(
|
||||
module.latestRemovedApiFilegroupName(apiScope))
|
||||
props.Srcs_lib = module.properties.Srcs_lib
|
||||
props.Srcs_lib_whitelist_dirs = module.properties.Srcs_lib_whitelist_dirs
|
||||
props.Srcs_lib_whitelist_pkgs = module.properties.Srcs_lib_whitelist_pkgs
|
||||
props.Srcs_lib = module.sdkLibraryProperties.Srcs_lib
|
||||
props.Srcs_lib_whitelist_dirs = module.sdkLibraryProperties.Srcs_lib_whitelist_dirs
|
||||
props.Srcs_lib_whitelist_pkgs = module.sdkLibraryProperties.Srcs_lib_whitelist_pkgs
|
||||
|
||||
mctx.CreateModule(android.ModuleFactoryAdaptor(DroidstubsFactory), &props)
|
||||
}
|
||||
|
||||
// Creates the runtime library. This is not directly linkable from other modules.
|
||||
func (module *sdkLibrary) createImplLibrary(mctx android.TopDownMutatorContext) {
|
||||
props := struct {
|
||||
Name *string
|
||||
Srcs []string
|
||||
Libs []string
|
||||
Static_libs []string
|
||||
Soc_specific *bool
|
||||
Device_specific *bool
|
||||
Product_specific *bool
|
||||
Installable *bool
|
||||
Required []string
|
||||
Errorprone struct {
|
||||
Javacflags []string
|
||||
}
|
||||
IsSDKLibrary bool
|
||||
}{}
|
||||
|
||||
props.Name = proptools.StringPtr(module.implName())
|
||||
props.Srcs = module.properties.Srcs
|
||||
props.Libs = module.properties.Libs
|
||||
props.Static_libs = module.properties.Static_libs
|
||||
props.Installable = proptools.BoolPtr(true)
|
||||
// XML file is installed along with the impl lib
|
||||
props.Required = []string{module.xmlFileName()}
|
||||
props.Errorprone.Javacflags = module.properties.Errorprone.Javacflags
|
||||
props.IsSDKLibrary = true
|
||||
|
||||
if module.SocSpecific() {
|
||||
props.Soc_specific = proptools.BoolPtr(true)
|
||||
} else if module.DeviceSpecific() {
|
||||
props.Device_specific = proptools.BoolPtr(true)
|
||||
} else if module.ProductSpecific() {
|
||||
props.Product_specific = proptools.BoolPtr(true)
|
||||
}
|
||||
|
||||
mctx.CreateModule(android.ModuleFactoryAdaptor(LibraryFactory),
|
||||
&props,
|
||||
&module.deviceProperties,
|
||||
&module.dexpreoptProperties)
|
||||
}
|
||||
|
||||
// Creates the xml file that publicizes the runtime library
|
||||
func (module *sdkLibrary) createXmlFile(mctx android.TopDownMutatorContext) {
|
||||
template := `
|
||||
@@ -607,27 +574,54 @@ func (module *sdkLibrary) createXmlFile(mctx android.TopDownMutatorContext) {
|
||||
mctx.CreateModule(android.ModuleFactoryAdaptor(android.PrebuiltEtcFactory), &etcProps)
|
||||
}
|
||||
|
||||
// to satisfy SdkLibraryDependency interface
|
||||
func (module *sdkLibrary) HeaderJars(linkType linkType) android.Paths {
|
||||
// This module is just a wrapper for the stubs.
|
||||
if linkType == javaSystem {
|
||||
return module.systemApiStubsPath
|
||||
} else if linkType == javaPlatform {
|
||||
return module.implLibPath
|
||||
func (module *sdkLibrary) PrebuiltJars(ctx android.BaseContext, sdkVersion string) android.Paths {
|
||||
var api, v string
|
||||
if sdkVersion == "" {
|
||||
api = "system"
|
||||
v = "current"
|
||||
} else if strings.Contains(sdkVersion, "_") {
|
||||
t := strings.Split(sdkVersion, "_")
|
||||
api = t[0]
|
||||
v = t[1]
|
||||
} else {
|
||||
return module.publicApiStubsPath
|
||||
api = "public"
|
||||
v = sdkVersion
|
||||
}
|
||||
dir := filepath.Join("prebuilts", "sdk", v, api)
|
||||
jar := filepath.Join(dir, module.BaseModuleName()+".jar")
|
||||
jarPath := android.ExistentPathForSource(ctx, jar)
|
||||
return android.Paths{jarPath.Path()}
|
||||
}
|
||||
|
||||
// to satisfy SdkLibraryDependency interface
|
||||
func (module *sdkLibrary) HeaderJars(ctx android.BaseContext, sdkVersion string) android.Paths {
|
||||
// This module is just a wrapper for the stubs.
|
||||
if ctx.Config().UnbundledBuild() {
|
||||
return module.PrebuiltJars(ctx, sdkVersion)
|
||||
} else {
|
||||
if strings.HasPrefix(sdkVersion, "system_") {
|
||||
return module.systemApiStubsPath
|
||||
} else if sdkVersion == "" {
|
||||
return module.Library.HeaderJars()
|
||||
} else {
|
||||
return module.publicApiStubsPath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// to satisfy SdkLibraryDependency interface
|
||||
func (module *sdkLibrary) ImplementationJars(linkType linkType) android.Paths {
|
||||
func (module *sdkLibrary) ImplementationJars(ctx android.BaseContext, sdkVersion string) android.Paths {
|
||||
// This module is just a wrapper for the stubs.
|
||||
if linkType == javaSystem {
|
||||
return module.systemApiStubsImplPath
|
||||
} else if linkType == javaPlatform {
|
||||
return module.implLibImplPath
|
||||
if ctx.Config().UnbundledBuild() {
|
||||
return module.PrebuiltJars(ctx, sdkVersion)
|
||||
} else {
|
||||
return module.publicApiStubsImplPath
|
||||
if strings.HasPrefix(sdkVersion, "system_") {
|
||||
return module.systemApiStubsImplPath
|
||||
} else if sdkVersion == "" {
|
||||
return module.Library.ImplementationJars()
|
||||
} else {
|
||||
return module.publicApiStubsImplPath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -642,28 +636,29 @@ func javaSdkLibraries(config android.Config) *[]string {
|
||||
// once for public API level and once for system API level
|
||||
func sdkLibraryMutator(mctx android.TopDownMutatorContext) {
|
||||
if module, ok := mctx.Module().(*sdkLibrary); ok {
|
||||
if module.properties.Srcs == nil {
|
||||
if module.Library.Module.properties.Srcs == nil {
|
||||
mctx.PropertyErrorf("srcs", "java_sdk_library must specify srcs")
|
||||
}
|
||||
if module.properties.Api_packages == nil {
|
||||
|
||||
if module.sdkLibraryProperties.Api_packages == nil {
|
||||
mctx.PropertyErrorf("api_packages", "java_sdk_library must specify api_packages")
|
||||
}
|
||||
|
||||
// for public API stubs
|
||||
module.createStubsLibrary(mctx, apiScopePublic)
|
||||
module.createDocs(mctx, apiScopePublic)
|
||||
|
||||
// for system API stubs
|
||||
module.createStubsLibrary(mctx, apiScopeSystem)
|
||||
module.createDocs(mctx, apiScopeSystem)
|
||||
if !Bool(module.properties.No_standard_libs) {
|
||||
// for system API stubs
|
||||
module.createStubsLibrary(mctx, apiScopeSystem)
|
||||
module.createDocs(mctx, apiScopeSystem)
|
||||
|
||||
// for test API stubs
|
||||
module.createStubsLibrary(mctx, apiScopeTest)
|
||||
module.createDocs(mctx, apiScopeTest)
|
||||
// for test API stubs
|
||||
module.createStubsLibrary(mctx, apiScopeTest)
|
||||
module.createDocs(mctx, apiScopeTest)
|
||||
|
||||
// for runtime
|
||||
module.createXmlFile(mctx)
|
||||
module.createImplLibrary(mctx)
|
||||
// for runtime
|
||||
module.createXmlFile(mctx)
|
||||
}
|
||||
|
||||
// record java_sdk_library modules so that they are exported to make
|
||||
javaSdkLibraries := javaSdkLibraries(mctx.Config())
|
||||
@@ -675,9 +670,17 @@ func sdkLibraryMutator(mctx android.TopDownMutatorContext) {
|
||||
|
||||
func sdkLibraryFactory() android.Module {
|
||||
module := &sdkLibrary{}
|
||||
module.AddProperties(&module.properties)
|
||||
module.AddProperties(&module.deviceProperties)
|
||||
module.AddProperties(&module.dexpreoptProperties)
|
||||
InitJavaModule(module, android.DeviceSupported)
|
||||
module.AddProperties(
|
||||
&module.sdkLibraryProperties,
|
||||
&module.Library.Module.properties,
|
||||
&module.Library.Module.dexpreoptProperties,
|
||||
&module.Library.Module.deviceProperties,
|
||||
&module.Library.Module.protoProperties,
|
||||
)
|
||||
|
||||
module.Library.Module.properties.Installable = proptools.BoolPtr(true)
|
||||
module.Library.Module.deviceProperties.IsSDKLibrary = true
|
||||
|
||||
InitJavaModule(module, android.HostAndDeviceSupported)
|
||||
return module
|
||||
}
|
||||
|
Reference in New Issue
Block a user