Support hidden API processing for modules that use platform APIs
Previously, hidden API processing could only be done by those bootclasspath_fragment modules that either did not depend on any other fragments (e.g. art-bootclasspath-fragment) or only depended on APIs provided by other fragments (e.g. i18n-bootclasspath-fragment). That meant that modules like com.android.os.statsd-bootclasspath-fragment that depended on APIs provided by parts of the platform which are not yet part of another bootclasspath_fragment could not perform hidden API processing. This change adds support for a bootclasspath_fragment to specify the additional stubs needed to perform hidden API processing. It adds a new additional_stubs property that can be used to specify the additional stub libraries. Most bootclasspath_fragments that need to use the property will need access to the APIs provided by the android-non-updatable.* libraries. Rather than have each fragment explicitly specify the correct module for each scope it treats "android-non-updatable" as if it was a java_sdk_library that can provide different jars for each scope. Soong will handle mapping that to the correct android-non-updatable.* module. Bug: 179354495 Test: m out/soong/hiddenapi/hiddenapi-flags.csv \ out/soong/hiddenapi/hiddenapi-index.csv \ out/soong/hiddenapi/hiddenapi-stub-flags.txt \ out/soong/hiddenapi/hiddenapi-unsupported.csv - make sure that this change does not change the contents. m TARGET_BUILD_APPS=Calendar nothing Change-Id: Ia8b79830ed0e6d42100de03d76b0c51b7f6c8ade
This commit is contained in:
@@ -124,6 +124,15 @@ type bootclasspathFragmentProperties struct {
|
||||
// Hidden API related properties.
|
||||
Hidden_api HiddenAPIFlagFileProperties
|
||||
|
||||
// The list of additional stub libraries which this fragment's contents use but which are not
|
||||
// provided by another bootclasspath_fragment.
|
||||
//
|
||||
// Note, "android-non-updatable" is treated specially. While no such module exists it is treated
|
||||
// as if it was a java_sdk_library. So, when public API stubs are needed then it will be replaced
|
||||
// with "android-non-updatable.stubs", with "androidn-non-updatable.system.stubs" when the system
|
||||
// stubs are needed and so on.
|
||||
Additional_stubs []string
|
||||
|
||||
// Properties that allow a fragment to depend on other fragments. This is needed for hidden API
|
||||
// processing as it needs access to all the classes used by a fragment including those provided
|
||||
// by other fragments.
|
||||
@@ -381,6 +390,15 @@ func (b *BootclasspathFragmentModule) DepsMutator(ctx android.BottomUpMutatorCon
|
||||
// bootclasspath fragment.
|
||||
hiddenAPIAddStubLibDependencies(ctx, b.properties.apiScopeToStubLibs())
|
||||
|
||||
for _, additionalStubModule := range b.properties.Additional_stubs {
|
||||
for _, apiScope := range hiddenAPISdkLibrarySupportedScopes {
|
||||
// Add a dependency onto a possibly scope specific stub library.
|
||||
scopeSpecificDependency := apiScope.scopeSpecificStubModule(ctx, additionalStubModule)
|
||||
tag := hiddenAPIStubsDependencyTag{apiScope: apiScope, fromAdditionalDependency: true}
|
||||
ctx.AddVariationDependencies(nil, tag, scopeSpecificDependency)
|
||||
}
|
||||
}
|
||||
|
||||
if SkipDexpreoptBootJars(ctx) {
|
||||
return
|
||||
}
|
||||
@@ -640,8 +658,8 @@ func (b *BootclasspathFragmentModule) createHiddenAPIFlagInput(ctx android.Modul
|
||||
// Populate with flag file paths from the properties.
|
||||
input.extractFlagFilesFromProperties(ctx, &b.properties.Hidden_api)
|
||||
|
||||
// Store the stub dex jars from this module's fragment dependencies.
|
||||
input.DependencyStubDexJarsByScope = dependencyHiddenApiInfo.TransitiveStubDexJarsByScope
|
||||
// Add the stub dex jars from this module's fragment dependencies.
|
||||
input.DependencyStubDexJarsByScope.append(dependencyHiddenApiInfo.TransitiveStubDexJarsByScope)
|
||||
|
||||
return input
|
||||
}
|
||||
|
Reference in New Issue
Block a user