diff options
Diffstat (limited to 'java/sdk_library.go')
-rw-r--r-- | java/sdk_library.go | 85 |
1 files changed, 52 insertions, 33 deletions
diff --git a/java/sdk_library.go b/java/sdk_library.go index 133deda75..56c40f045 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -631,9 +631,17 @@ type commonToSdkLibraryAndImportProperties struct { Doctag_files []string `android:"path"` } +// commonSdkLibraryAndImportModule defines the interface that must be provided by a module that +// embeds the commonToSdkLibraryAndImport struct. +type commonSdkLibraryAndImportModule interface { + android.SdkAware + + BaseModuleName() string +} + // Common code between sdk library and sdk library import type commonToSdkLibraryAndImport struct { - moduleBase *android.ModuleBase + module commonSdkLibraryAndImportModule scopePaths map[*apiScope]*scopePaths @@ -648,13 +656,13 @@ type commonToSdkLibraryAndImport struct { EmbeddableSdkLibraryComponent } -func (c *commonToSdkLibraryAndImport) initCommon(moduleBase *android.ModuleBase) { - c.moduleBase = moduleBase +func (c *commonToSdkLibraryAndImport) initCommon(module commonSdkLibraryAndImportModule) { + c.module = module - moduleBase.AddProperties(&c.commonSdkLibraryProperties) + module.AddProperties(&c.commonSdkLibraryProperties) // Initialize this as an sdk library component. - c.initSdkLibraryComponent(moduleBase) + c.initSdkLibraryComponent(module) } func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android.DefaultableHookContext) bool { @@ -670,7 +678,7 @@ func (c *commonToSdkLibraryAndImport) initCommonAfterDefaultsApplied(ctx android // 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()) + c.sdkLibraryComponentProperties.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.module.BaseModuleName()) } return true @@ -682,29 +690,29 @@ func (c *commonToSdkLibraryAndImport) generateCommonBuildActions(ctx android.Mod // Module name of the runtime implementation library func (c *commonToSdkLibraryAndImport) implLibraryModuleName() string { - return c.moduleBase.BaseModuleName() + ".impl" + return c.module.BaseModuleName() + ".impl" } // Module name of the XML file for the lib func (c *commonToSdkLibraryAndImport) xmlPermissionsModuleName() string { - return c.moduleBase.BaseModuleName() + sdkXmlFileSuffix + return c.module.BaseModuleName() + sdkXmlFileSuffix } // Name of the java_library module that compiles the stubs source. func (c *commonToSdkLibraryAndImport) stubsLibraryModuleName(apiScope *apiScope) string { - return c.namingScheme.stubsLibraryModuleName(apiScope, c.moduleBase.BaseModuleName()) + baseName := c.module.BaseModuleName() + return c.module.SdkMemberComponentName(baseName, func(name string) string { + return c.namingScheme.stubsLibraryModuleName(apiScope, name) + }) } // Name of the droidstubs module that generates the stubs source and may also // generate/check the API. func (c *commonToSdkLibraryAndImport) stubsSourceModuleName(apiScope *apiScope) string { - return c.namingScheme.stubsSourceModuleName(apiScope, c.moduleBase.BaseModuleName()) -} - -// Name of the droidstubs module that generates/checks the API. Only used if it -// requires different arts to the stubs source generating module. -func (c *commonToSdkLibraryAndImport) apiModuleName(apiScope *apiScope) string { - return c.namingScheme.apiModuleName(apiScope, c.moduleBase.BaseModuleName()) + baseName := c.module.BaseModuleName() + return c.module.SdkMemberComponentName(baseName, func(name string) string { + return c.namingScheme.stubsSourceModuleName(apiScope, name) + }) } // The component names for different outputs of the java_sdk_library. @@ -753,7 +761,7 @@ func (c *commonToSdkLibraryAndImport) commonOutputFiles(tag string) (android.Pat if scope, ok := scopeByName[scopeName]; ok { paths := c.findScopePaths(scope) if paths == nil { - return nil, fmt.Errorf("%q does not provide api scope %s", c.moduleBase.BaseModuleName(), scopeName) + return nil, fmt.Errorf("%q does not provide api scope %s", c.module.BaseModuleName(), scopeName) } switch component { @@ -784,7 +792,7 @@ func (c *commonToSdkLibraryAndImport) commonOutputFiles(tag string) (android.Pat if c.doctagPaths != nil { return c.doctagPaths, nil } else { - return nil, fmt.Errorf("no doctag_files specified on %s", c.moduleBase.BaseModuleName()) + return nil, fmt.Errorf("no doctag_files specified on %s", c.module.BaseModuleName()) } } return nil, nil @@ -830,7 +838,7 @@ func (c *commonToSdkLibraryAndImport) selectHeaderJarsForSdkVersion(ctx android. // If a specific numeric version has been requested then use prebuilt versions of the sdk. if !sdkVersion.ApiLevel.IsPreview() { - return PrebuiltJars(ctx, c.moduleBase.BaseModuleName(), sdkVersion) + return PrebuiltJars(ctx, c.module.BaseModuleName(), sdkVersion) } paths := c.selectScopePaths(ctx, sdkVersion.Kind) @@ -857,7 +865,7 @@ func (c *commonToSdkLibraryAndImport) selectScopePaths(ctx android.BaseModuleCon scopes = append(scopes, s.name) } } - ctx.ModuleErrorf("requires api scope %s from %s but it only has %q available", apiScope.name, c.moduleBase.BaseModuleName(), scopes) + ctx.ModuleErrorf("requires api scope %s from %s but it only has %q available", apiScope.name, c.module.BaseModuleName(), scopes) return nil } @@ -913,7 +921,7 @@ func (c *commonToSdkLibraryAndImport) sdkComponentPropertiesForChildLibrary() in // 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. - componentProps.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.moduleBase.BaseModuleName()) + componentProps.SdkLibraryToImplicitlyTrack = proptools.StringPtr(c.module.BaseModuleName()) } return componentProps @@ -945,8 +953,8 @@ type EmbeddableSdkLibraryComponent struct { sdkLibraryComponentProperties SdkLibraryComponentProperties } -func (e *EmbeddableSdkLibraryComponent) initSdkLibraryComponent(moduleBase *android.ModuleBase) { - moduleBase.AddProperties(&e.sdkLibraryComponentProperties) +func (e *EmbeddableSdkLibraryComponent) initSdkLibraryComponent(module android.Module) { + module.AddProperties(&e.sdkLibraryComponentProperties) } // to satisfy SdkLibraryComponentDependency @@ -1168,6 +1176,10 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) module.Library.GenerateAndroidBuildActions(ctx) } + // Collate the components exported by this module. All scope specific modules are exported but + // the impl and xml component modules are not. + exportedComponents := map[string]struct{}{} + // Record the paths to the header jars of the library (stubs and impl). // When this java_sdk_library is depended upon from others via "libs" property, // the recorded paths will be returned depending on the link type of the caller. @@ -1182,8 +1194,14 @@ func (module *SdkLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) // Extract information from the dependency. The exact information extracted // is determined by the nature of the dependency which is determined by the tag. scopeTag.extractDepInfo(ctx, to, scopePaths) + + exportedComponents[ctx.OtherModuleName(to)] = struct{}{} } }) + + // Make the set of components exported by this module available for use elsewhere. + exportedComponentInfo := android.ExportedComponentsInfo{Components: android.SortedStringKeys(exportedComponents)} + ctx.SetProvider(android.ExportedComponentsInfoProvider, exportedComponentInfo) } func (module *SdkLibrary) AndroidMkEntries() []android.AndroidMkEntries { @@ -1709,7 +1727,7 @@ func (module *SdkLibrary) InitSdkLibraryProperties() { module.addHostAndDeviceProperties() module.AddProperties(&module.sdkLibraryProperties) - module.initSdkLibraryComponent(&module.ModuleBase) + module.initSdkLibraryComponent(module) module.properties.Installable = proptools.BoolPtr(true) module.deviceProperties.IsSDKLibrary = true @@ -1728,8 +1746,6 @@ type sdkLibraryComponentNamingScheme interface { stubsLibraryModuleName(scope *apiScope, baseName string) string stubsSourceModuleName(scope *apiScope, baseName string) string - - apiModuleName(scope *apiScope, baseName string) string } type defaultNamingScheme struct { @@ -1743,10 +1759,6 @@ func (s *defaultNamingScheme) stubsSourceModuleName(scope *apiScope, baseName st return scope.stubsSourceModuleName(baseName) } -func (s *defaultNamingScheme) apiModuleName(scope *apiScope, baseName string) string { - return scope.apiModuleName(baseName) -} - var _ sdkLibraryComponentNamingScheme = (*defaultNamingScheme)(nil) func moduleStubLinkType(name string) (stub bool, ret sdkLinkType) { @@ -1780,7 +1792,7 @@ func SdkLibraryFactory() android.Module { module := &SdkLibrary{} // Initialize information common between source and prebuilt. - module.initCommon(&module.ModuleBase) + module.initCommon(module) module.InitSdkLibraryProperties() android.InitApexModule(module) @@ -1928,7 +1940,7 @@ func sdkLibraryImportFactory() android.Module { module.AddProperties(&module.properties, allScopeProperties) // Initialize information common between source and prebuilt. - module.initCommon(&module.ModuleBase) + module.initCommon(module) android.InitPrebuiltModule(module, &[]string{""}) android.InitApexModule(module) @@ -2140,7 +2152,7 @@ func (module *SdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleCo // Get the path of the dex implementation jar from the `deapexer` module. di := ctx.OtherModuleProvider(deapexerModule, android.DeapexerProvider).(android.DeapexerInfo) - if dexOutputPath := di.PrebuiltExportPath(module.BaseModuleName(), ".dexjar"); dexOutputPath != nil { + if dexOutputPath := di.PrebuiltExportPath(apexRootRelativePathToJavaLib(module.BaseModuleName())); dexOutputPath != nil { module.dexJarFile = dexOutputPath module.initHiddenAPI(ctx, dexOutputPath, module.findScopePaths(apiScopePublic).stubsImplPath[0], nil) } else { @@ -2265,6 +2277,13 @@ func (module *SdkLibraryImport) ImplementationAndResourcesJars() android.Paths { } } +var _ android.RequiredFilesFromPrebuiltApex = (*SdkLibraryImport)(nil) + +func (module *SdkLibraryImport) RequiredFilesFromPrebuiltApex(ctx android.BaseModuleContext) []string { + name := module.BaseModuleName() + return requiredFilesFromPrebuiltApexForImport(name) +} + // // java_sdk_library_xml // |