Exclude unsupported libraries from sdk snapshot

(cherry picked from commit 1938dba8b6)

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.
Merged-In: I57969b85a12e9e5a3fc76c055b260cec5d5f7d7f
Change-Id: Ie142db49aad8e82ada21c343a7563102e74566a2
This commit is contained in:
Paul Duffin
2022-07-26 23:53:00 +00:00
parent 311210cd65
commit 28e66cac86
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