Loading java/java_test.go +18 −1 Original line number Diff line number Diff line Loading @@ -1157,6 +1157,16 @@ func TestJavaSdkLibrary(t *testing.T) { libs: ["foo", "bar.stubs"], sdk_version: "system_current", } java_sdk_library { name: "barney", srcs: ["c.java"], api_only: true, } java_sdk_library { name: "betty", srcs: ["c.java"], shared_library: false, } java_sdk_library_import { name: "quuz", public: { Loading @@ -1169,10 +1179,17 @@ func TestJavaSdkLibrary(t *testing.T) { jars: ["b.jar"], }, } java_sdk_library_import { name: "wilma", public: { jars: ["b.jar"], }, shared_library: false, } java_library { name: "qux", srcs: ["c.java"], libs: ["baz", "fred", "quuz.stubs"], libs: ["baz", "fred", "quuz.stubs", "wilma", "barney", "betty"], sdk_version: "system_current", } java_library { Loading java/sdk_library.go +62 −20 Original line number Diff line number Diff line Loading @@ -372,7 +372,10 @@ type sdkLibraryProperties struct { // Defaults to "api". Api_dir *string // If set to true there is no runtime library. // Determines whether a runtime implementation library is built; defaults to false. // // If true then it also prevents the module from being used as a shared module, i.e. // it is as is shared_library: false, was set. Api_only *bool // local files that are used within user customized droiddoc options. Loading Loading @@ -532,6 +535,13 @@ type commonToSdkLibraryAndImportProperties struct { // // TODO(b/155480189) - Remove once naming inconsistencies have been resolved. Naming_scheme *string // Specifies whether this module can be used as an Android shared library; defaults // to true. // // An Android shared library is one that can be referenced in a <uses-library> element // in an AndroidManifest.xml. Shared_library *bool } // Common code between sdk library and sdk library import Loading @@ -542,7 +552,7 @@ type commonToSdkLibraryAndImport struct { namingScheme sdkLibraryComponentNamingScheme commonProperties commonToSdkLibraryAndImportProperties commonSdkLibraryProperties commonToSdkLibraryAndImportProperties // Functionality related to this being used as a component of a java_sdk_library. EmbeddableSdkLibraryComponent Loading @@ -551,14 +561,14 @@ type commonToSdkLibraryAndImport struct { func (c *commonToSdkLibraryAndImport) initCommon(moduleBase *android.ModuleBase) { c.moduleBase = moduleBase moduleBase.AddProperties(&c.commonProperties) moduleBase.AddProperties(&c.commonSdkLibraryProperties) // Initialize this as an sdk library component. c.initSdkLibraryComponent(moduleBase) } func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android.DefaultableHookContext) bool { schemeProperty := proptools.StringDefault(c.commonProperties.Naming_scheme, "default") schemeProperty := proptools.StringDefault(c.commonSdkLibraryProperties.Naming_scheme, "default") switch schemeProperty { case "default": c.namingScheme = &defaultNamingScheme{} Loading @@ -569,8 +579,11 @@ func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android return false } // Only track this sdk library if this can be used as a shared library. if c.sharedLibrary() { // Use the name specified in the module definition as the owner. c.sdkLibraryComponentProperties.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.moduleBase.BaseModuleName()) } return true } Loading Loading @@ -740,17 +753,24 @@ func (c *commonToSdkLibraryAndImport) selectHeaderJarsForSdkVersion(ctx android. func (c *commonToSdkLibraryAndImport) sdkComponentPropertiesForChildLibrary() interface{} { componentProps := &struct { SdkLibraryToImplicitlyTrack *string }{ }{} if c.sharedLibrary() { // Mark the stubs library as being components of this java_sdk_library so that // any app that includes code which depends (directly or indirectly) on the stubs // library will have the appropriate <uses-library> invocation inserted into its // manifest if necessary. SdkLibraryToImplicitlyTrack: proptools.StringPtr(c.moduleBase.BaseModuleName()), componentProps.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.moduleBase.BaseModuleName()) } return componentProps } // Check if this can be used as a shared library. func (c *commonToSdkLibraryAndImport) sharedLibrary() bool { return proptools.BoolDefault(c.commonSdkLibraryProperties.Shared_library, true) } // Properties related to the use of a module as an component of a java_sdk_library. type SdkLibraryComponentProperties struct { Loading Loading @@ -907,13 +927,16 @@ func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if module.requiresRuntimeImplementationLibrary() { if module.sharedLibrary() { // Add dependency to the rule for generating the xml permissions file ctx.AddDependency(module, xmlPermissionsFileTag, module.xmlFileName()) } // Only add the deps for the library if it is actually going to be built. module.Library.deps(ctx) } } func (module *SdkLibrary) OutputFiles(tag string) (android.Paths, error) { paths, err := module.commonOutputFiles(tag) Loading @@ -925,8 +948,8 @@ func (module *SdkLibrary) OutputFiles(tag string) (android.Paths, error) { } func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Don't build an implementation library if this is api only. if !proptools.Bool(module.sdkLibraryProperties.Api_only) { // Only build an implementation library if required. if module.requiresRuntimeImplementationLibrary() { module.Library.GenerateAndroidBuildActions(ctx) } Loading @@ -949,7 +972,7 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) } func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { if proptools.Bool(module.sdkLibraryProperties.Api_only) { if !module.requiresRuntimeImplementationLibrary() { return nil } entriesList := module.Library.AndroidMkEntries() Loading Loading @@ -1387,9 +1410,12 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.DefaultableHookCont module.createStubsLibrary(mctx, scope) } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { // for runtime if module.requiresRuntimeImplementationLibrary() { // Only create an XML permissions file that declares the library as being usable // as a shared library if required. if module.sharedLibrary() { module.createXmlFile(mctx) } // record java_sdk_library modules so that they are exported to make javaSdkLibraries := javaSdkLibraries(mctx.Config()) Loading @@ -1414,6 +1440,10 @@ func (module *SdkLibrary) InitSdkLibraryProperties() { module.deviceProperties.IsSDKLibrary = true } func (module *SdkLibrary) requiresRuntimeImplementationLibrary() bool { return !proptools.Bool(module.sdkLibraryProperties.Api_only) } // Defines how to name the individual component modules the sdk library creates. type sdkLibraryComponentNamingScheme interface { stubsLibraryModuleName(scope *apiScope, baseName string) string Loading Loading @@ -1492,6 +1522,18 @@ func SdkLibraryFactory() android.Module { android.AddVisibilityProperty(module, "stubs_source_visibility", &module.sdkLibraryProperties.Stubs_source_visibility) module.SetDefaultableHook(func(ctx android.DefaultableHookContext) { // If no implementation is required then it cannot be used as a shared library // either. if !module.requiresRuntimeImplementationLibrary() { // If shared_library has been explicitly set to true then it is incompatible // with api_only: true. if proptools.Bool(module.commonSdkLibraryProperties.Shared_library) { ctx.PropertyErrorf("api_only/shared_library", "inconsistent settings, shared_library and api_only cannot both be true") } // Set shared_library: false. module.commonSdkLibraryProperties.Shared_library = proptools.BoolPtr(false) } if module.initCommonAfterDefaultsApplied(ctx) { module.CreateInternalModules(ctx) } Loading Loading @@ -1916,7 +1958,7 @@ func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMembe } s.Libs = sdk.properties.Libs s.Naming_scheme = sdk.commonProperties.Naming_scheme s.Naming_scheme = sdk.commonSdkLibraryProperties.Naming_scheme } func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { Loading Loading
java/java_test.go +18 −1 Original line number Diff line number Diff line Loading @@ -1157,6 +1157,16 @@ func TestJavaSdkLibrary(t *testing.T) { libs: ["foo", "bar.stubs"], sdk_version: "system_current", } java_sdk_library { name: "barney", srcs: ["c.java"], api_only: true, } java_sdk_library { name: "betty", srcs: ["c.java"], shared_library: false, } java_sdk_library_import { name: "quuz", public: { Loading @@ -1169,10 +1179,17 @@ func TestJavaSdkLibrary(t *testing.T) { jars: ["b.jar"], }, } java_sdk_library_import { name: "wilma", public: { jars: ["b.jar"], }, shared_library: false, } java_library { name: "qux", srcs: ["c.java"], libs: ["baz", "fred", "quuz.stubs"], libs: ["baz", "fred", "quuz.stubs", "wilma", "barney", "betty"], sdk_version: "system_current", } java_library { Loading
java/sdk_library.go +62 −20 Original line number Diff line number Diff line Loading @@ -372,7 +372,10 @@ type sdkLibraryProperties struct { // Defaults to "api". Api_dir *string // If set to true there is no runtime library. // Determines whether a runtime implementation library is built; defaults to false. // // If true then it also prevents the module from being used as a shared module, i.e. // it is as is shared_library: false, was set. Api_only *bool // local files that are used within user customized droiddoc options. Loading Loading @@ -532,6 +535,13 @@ type commonToSdkLibraryAndImportProperties struct { // // TODO(b/155480189) - Remove once naming inconsistencies have been resolved. Naming_scheme *string // Specifies whether this module can be used as an Android shared library; defaults // to true. // // An Android shared library is one that can be referenced in a <uses-library> element // in an AndroidManifest.xml. Shared_library *bool } // Common code between sdk library and sdk library import Loading @@ -542,7 +552,7 @@ type commonToSdkLibraryAndImport struct { namingScheme sdkLibraryComponentNamingScheme commonProperties commonToSdkLibraryAndImportProperties commonSdkLibraryProperties commonToSdkLibraryAndImportProperties // Functionality related to this being used as a component of a java_sdk_library. EmbeddableSdkLibraryComponent Loading @@ -551,14 +561,14 @@ type commonToSdkLibraryAndImport struct { func (c *commonToSdkLibraryAndImport) initCommon(moduleBase *android.ModuleBase) { c.moduleBase = moduleBase moduleBase.AddProperties(&c.commonProperties) moduleBase.AddProperties(&c.commonSdkLibraryProperties) // Initialize this as an sdk library component. c.initSdkLibraryComponent(moduleBase) } func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android.DefaultableHookContext) bool { schemeProperty := proptools.StringDefault(c.commonProperties.Naming_scheme, "default") schemeProperty := proptools.StringDefault(c.commonSdkLibraryProperties.Naming_scheme, "default") switch schemeProperty { case "default": c.namingScheme = &defaultNamingScheme{} Loading @@ -569,8 +579,11 @@ func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android return false } // Only track this sdk library if this can be used as a shared library. if c.sharedLibrary() { // Use the name specified in the module definition as the owner. c.sdkLibraryComponentProperties.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.moduleBase.BaseModuleName()) } return true } Loading Loading @@ -740,17 +753,24 @@ func (c *commonToSdkLibraryAndImport) selectHeaderJarsForSdkVersion(ctx android. func (c *commonToSdkLibraryAndImport) sdkComponentPropertiesForChildLibrary() interface{} { componentProps := &struct { SdkLibraryToImplicitlyTrack *string }{ }{} if c.sharedLibrary() { // Mark the stubs library as being components of this java_sdk_library so that // any app that includes code which depends (directly or indirectly) on the stubs // library will have the appropriate <uses-library> invocation inserted into its // manifest if necessary. SdkLibraryToImplicitlyTrack: proptools.StringPtr(c.moduleBase.BaseModuleName()), componentProps.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.moduleBase.BaseModuleName()) } return componentProps } // Check if this can be used as a shared library. func (c *commonToSdkLibraryAndImport) sharedLibrary() bool { return proptools.BoolDefault(c.commonSdkLibraryProperties.Shared_library, true) } // Properties related to the use of a module as an component of a java_sdk_library. type SdkLibraryComponentProperties struct { Loading Loading @@ -907,13 +927,16 @@ func (module *SdkLibrary) DepsMutator(ctx android.BottomUpMutatorContext) { } } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { if module.requiresRuntimeImplementationLibrary() { if module.sharedLibrary() { // Add dependency to the rule for generating the xml permissions file ctx.AddDependency(module, xmlPermissionsFileTag, module.xmlFileName()) } // Only add the deps for the library if it is actually going to be built. module.Library.deps(ctx) } } func (module *SdkLibrary) OutputFiles(tag string) (android.Paths, error) { paths, err := module.commonOutputFiles(tag) Loading @@ -925,8 +948,8 @@ func (module *SdkLibrary) OutputFiles(tag string) (android.Paths, error) { } func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) { // Don't build an implementation library if this is api only. if !proptools.Bool(module.sdkLibraryProperties.Api_only) { // Only build an implementation library if required. if module.requiresRuntimeImplementationLibrary() { module.Library.GenerateAndroidBuildActions(ctx) } Loading @@ -949,7 +972,7 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) } func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { if proptools.Bool(module.sdkLibraryProperties.Api_only) { if !module.requiresRuntimeImplementationLibrary() { return nil } entriesList := module.Library.AndroidMkEntries() Loading Loading @@ -1387,9 +1410,12 @@ func (module *SdkLibrary) CreateInternalModules(mctx android.DefaultableHookCont module.createStubsLibrary(mctx, scope) } if !proptools.Bool(module.sdkLibraryProperties.Api_only) { // for runtime if module.requiresRuntimeImplementationLibrary() { // Only create an XML permissions file that declares the library as being usable // as a shared library if required. if module.sharedLibrary() { module.createXmlFile(mctx) } // record java_sdk_library modules so that they are exported to make javaSdkLibraries := javaSdkLibraries(mctx.Config()) Loading @@ -1414,6 +1440,10 @@ func (module *SdkLibrary) InitSdkLibraryProperties() { module.deviceProperties.IsSDKLibrary = true } func (module *SdkLibrary) requiresRuntimeImplementationLibrary() bool { return !proptools.Bool(module.sdkLibraryProperties.Api_only) } // Defines how to name the individual component modules the sdk library creates. type sdkLibraryComponentNamingScheme interface { stubsLibraryModuleName(scope *apiScope, baseName string) string Loading Loading @@ -1492,6 +1522,18 @@ func SdkLibraryFactory() android.Module { android.AddVisibilityProperty(module, "stubs_source_visibility", &module.sdkLibraryProperties.Stubs_source_visibility) module.SetDefaultableHook(func(ctx android.DefaultableHookContext) { // If no implementation is required then it cannot be used as a shared library // either. if !module.requiresRuntimeImplementationLibrary() { // If shared_library has been explicitly set to true then it is incompatible // with api_only: true. if proptools.Bool(module.commonSdkLibraryProperties.Shared_library) { ctx.PropertyErrorf("api_only/shared_library", "inconsistent settings, shared_library and api_only cannot both be true") } // Set shared_library: false. module.commonSdkLibraryProperties.Shared_library = proptools.BoolPtr(false) } if module.initCommonAfterDefaultsApplied(ctx) { module.CreateInternalModules(ctx) } Loading Loading @@ -1916,7 +1958,7 @@ func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMembe } s.Libs = sdk.properties.Libs s.Naming_scheme = sdk.commonProperties.Naming_scheme s.Naming_scheme = sdk.commonSdkLibraryProperties.Naming_scheme } func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { Loading