Exclude unsupported libraries from sdk snapshot

When an sdk snapshot is targeted at release X then it cannot include
bootclasspath fragment libraries which are not present in that build as
otherwise it causes build failures. It should also not include any
unsupported libraries, i.e. libraries that cannot work on that release.

This change causes sdk snapshot to exclude libraries that have a
    min_sdk_version > target build release

It also ensures that hidden API flags do not include any information
from excluded libraries.

Bug: 240406019
Test: BUILD_NUMBER=fixed packages/modules/common/build/mainline_modules_sdks.sh
      # Ran the previous command with and without this change to make
      # sure that this change excludes framework-connectivity-t library from the
      # tethering sdk snapshot for S, including from the hidden API flag files.
Change-Id: I57969b85a12e9e5a3fc76c055b260cec5d5f7d7f
This commit is contained in:
Paul Duffin
2022-07-26 23:53:00 +00:00
parent 887efdd779
commit 1938dba8b6
7 changed files with 354 additions and 41 deletions

View File

@@ -74,6 +74,26 @@ type SdkAware interface {
sdkAwareWithoutModule
}
// minApiLevelForSdkSnapshot provides access to the min_sdk_version for MinApiLevelForSdkSnapshot
type minApiLevelForSdkSnapshot interface {
MinSdkVersion(ctx EarlyModuleContext) SdkSpec
}
// MinApiLevelForSdkSnapshot returns the ApiLevel of the min_sdk_version of the supplied module.
//
// If the module does not provide a min_sdk_version then it defaults to 1.
func MinApiLevelForSdkSnapshot(ctx EarlyModuleContext, module Module) ApiLevel {
minApiLevel := NoneApiLevel
if m, ok := module.(minApiLevelForSdkSnapshot); ok {
minApiLevel = m.MinSdkVersion(ctx).ApiLevel
}
if minApiLevel == NoneApiLevel {
// The default min API level is 1.
minApiLevel = uncheckedFinalApiLevel(1)
}
return minApiLevel
}
// SdkRef refers to a version of an SDK
type SdkRef struct {
Name string