Support removed API members in modular hidden API processing
Previously, the hidden API flags generated for a bootclasspath_fragment did not include removed API members. That was because it did not supply a file containing the dex signatures of the removed API members. The monolithic hidden API processing uses combined-removed-dex which is the output of a genrule that takes as input the *removed.txt files from all the APIs and uses metalava to construct the dex signatures file. This change does the equivalent for the *removed.txt files for the APIs provided by a bootclasspath_fragment and then passes them to the rule that generates the final all-flags.csv. Bug: 179354495 Test: - Update packages/modules/RuntimeI18N to enable hidden API processing. m out/soong/hiddenapi/hiddenapi-flags.csv - Before this change that fails as the flags generated for the i18n-bootclasspath-fragment differ from the monolithic flags. After this change that passes. - Verify that this change does not change any of the monolithic hidden API files. m com.android.i18n - Verify that the apex file before and after this change are byte for byte identical. Change-Id: I6a21edb8a5231666e3f35b2c99a8687f36dd98fd
This commit is contained in:
@@ -845,19 +845,7 @@ func (c *commonToSdkLibraryAndImport) selectHeaderJarsForSdkVersion(ctx android.
|
||||
// closest kind which is a subset of the requested kind. e.g. if requesting android.SdkModule then
|
||||
// it will return *scopePaths for android.SdkSystem if available or android.SdkPublic of not.
|
||||
func (c *commonToSdkLibraryAndImport) selectScopePaths(ctx android.BaseModuleContext, kind android.SdkKind) *scopePaths {
|
||||
var apiScope *apiScope
|
||||
switch kind {
|
||||
case android.SdkSystem:
|
||||
apiScope = apiScopeSystem
|
||||
case android.SdkModule:
|
||||
apiScope = apiScopeModuleLib
|
||||
case android.SdkTest:
|
||||
apiScope = apiScopeTest
|
||||
case android.SdkSystemServer:
|
||||
apiScope = apiScopeSystemServer
|
||||
default:
|
||||
apiScope = apiScopePublic
|
||||
}
|
||||
apiScope := sdkKindToApiScope(kind)
|
||||
|
||||
paths := c.findClosestScopePath(apiScope)
|
||||
if paths == nil {
|
||||
@@ -874,6 +862,24 @@ func (c *commonToSdkLibraryAndImport) selectScopePaths(ctx android.BaseModuleCon
|
||||
return paths
|
||||
}
|
||||
|
||||
// sdkKindToApiScope maps from android.SdkKind to apiScope.
|
||||
func sdkKindToApiScope(kind android.SdkKind) *apiScope {
|
||||
var apiScope *apiScope
|
||||
switch kind {
|
||||
case android.SdkSystem:
|
||||
apiScope = apiScopeSystem
|
||||
case android.SdkModule:
|
||||
apiScope = apiScopeModuleLib
|
||||
case android.SdkTest:
|
||||
apiScope = apiScopeTest
|
||||
case android.SdkSystemServer:
|
||||
apiScope = apiScopeSystemServer
|
||||
default:
|
||||
apiScope = apiScopePublic
|
||||
}
|
||||
return apiScope
|
||||
}
|
||||
|
||||
// to satisfy SdkLibraryDependency interface
|
||||
func (c *commonToSdkLibraryAndImport) SdkApiStubDexJar(ctx android.BaseModuleContext, kind android.SdkKind) android.Path {
|
||||
paths := c.selectScopePaths(ctx, kind)
|
||||
@@ -884,6 +890,17 @@ func (c *commonToSdkLibraryAndImport) SdkApiStubDexJar(ctx android.BaseModuleCon
|
||||
return paths.stubsDexJarPath
|
||||
}
|
||||
|
||||
// to satisfy SdkLibraryDependency interface
|
||||
func (c *commonToSdkLibraryAndImport) SdkRemovedTxtFile(ctx android.BaseModuleContext, kind android.SdkKind) android.OptionalPath {
|
||||
apiScope := sdkKindToApiScope(kind)
|
||||
paths := c.findScopePaths(apiScope)
|
||||
if paths == nil {
|
||||
return android.OptionalPath{}
|
||||
}
|
||||
|
||||
return paths.removedApiFilePath
|
||||
}
|
||||
|
||||
func (c *commonToSdkLibraryAndImport) sdkComponentPropertiesForChildLibrary() interface{} {
|
||||
componentProps := &struct {
|
||||
SdkLibraryToImplicitlyTrack *string
|
||||
@@ -964,7 +981,7 @@ var _ SdkLibraryComponentDependency = (*Import)(nil)
|
||||
var _ SdkLibraryComponentDependency = (*SdkLibrary)(nil)
|
||||
var _ SdkLibraryComponentDependency = (*SdkLibraryImport)(nil)
|
||||
|
||||
// Provides access to sdk_version related header and implentation jars.
|
||||
// Provides access to sdk_version related files, e.g. header and implementation jars.
|
||||
type SdkLibraryDependency interface {
|
||||
SdkLibraryComponentDependency
|
||||
|
||||
@@ -985,6 +1002,9 @@ type SdkLibraryDependency interface {
|
||||
// tool which processes dex files.
|
||||
SdkApiStubDexJar(ctx android.BaseModuleContext, kind android.SdkKind) android.Path
|
||||
|
||||
// SdkRemovedTxtFile returns the optional path to the removed.txt file for the specified sdk kind.
|
||||
SdkRemovedTxtFile(ctx android.BaseModuleContext, kind android.SdkKind) android.OptionalPath
|
||||
|
||||
// sharedLibrary returns true if this can be used as a shared library.
|
||||
sharedLibrary() bool
|
||||
}
|
||||
|
Reference in New Issue
Block a user