Revert "Limit System SDK to 34 for Java modules in the vendor pa..."
Revert submission 2894701-limit_systemsdk
Reason for revert: might be breaking builds at 318695834
Bug: 318695834
Reverted changes: /q/submissionid:2894701-limit_systemsdk
Change-Id: I71a87d0a026a444ea9d26f889b3421162e13fea9
diff --git a/android/sdk_version.go b/android/sdk_version.go
index 9c84a27..aafcee7 100644
--- a/android/sdk_version.go
+++ b/android/sdk_version.go
@@ -16,7 +16,6 @@
import (
"fmt"
- "reflect"
"strconv"
"strings"
)
@@ -163,17 +162,6 @@
// If BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES has a numeric value,
// use it instead of "current" for the vendor partition.
currentSdkVersion := ctx.DeviceConfig().CurrentApiLevelForVendorModules()
- // b/314011075: special case for Java modules in vendor partition. They can no longer use
- // SDK 35 or later. Their maximum API level is limited to 34 (Android U). This is to
- // discourage the use of Java APIs in the vendor partition which hasn't been officially
- // supported since the Project Treble back in Android 10. We would like to eventually
- // evacuate all Java modules from the partition, but that shall be done progressively.
- // Note that the check for the availability of SDK 34 is to not break existing tests where
- // any of the frozen SDK version is unavailable.
- if isJava(ctx.Module()) && isSdkVersion34AvailableIn(ctx.Config()) {
- currentSdkVersion = "34"
- }
-
if currentSdkVersion == "current" {
return s
}
@@ -302,79 +290,28 @@
}
}
-// Checks if the use of this SDK `s` is valid for the given module context `ctx`.
func (s SdkSpec) ValidateSystemSdk(ctx EarlyModuleContext) bool {
- // Do some early checks. This check is currently only for Java modules. And our only concern
- // is the use of "system" SDKs.
- if !isJava(ctx.Module()) || s.Kind != SdkSystem {
+ // Ensures that the specified system SDK version is one of BOARD_SYSTEMSDK_VERSIONS (for vendor/product Java module)
+ // Assuming that BOARD_SYSTEMSDK_VERSIONS := 28 29,
+ // sdk_version of the modules in vendor/product that use system sdk must be either system_28, system_29 or system_current
+ if s.Kind != SdkSystem || s.ApiLevel.IsPreview() {
return true
}
-
- inVendor := ctx.DeviceSpecific() || ctx.SocSpecific()
- inProduct := ctx.ProductSpecific()
- isProductUnbundled := ctx.Config().EnforceProductPartitionInterface()
- inApex := false
- if am, ok := ctx.Module().(ApexModule); ok {
- inApex = am.InAnyApex()
- }
- isUnbundled := inVendor || (inProduct && isProductUnbundled) || inApex
-
- // Bundled modules can use any SDK
- if !isUnbundled {
- return true
- }
-
- // Unbundled modules are allowed to use BOARD_SYSTEMSDK_VERSIONS
- supportedVersions := ctx.DeviceConfig().SystemSdkVersions()
-
- // b/314011075: special case for vendor modules. Java modules in the vendor partition can
- // not use SDK 35 or later. This is to discourage the use of Java APIs in the vendor
- // partition which hasn't been officially supported since the Project Treble back in Android
- // 10. We would like to eventually evacuate all Java modules from the partition, but that
- // shall be done progressively.
- if inVendor {
- // 28 was the API when BOARD_SYSTEMSDK_VERSIONS was introduced, so that's the oldest
- // we should allow.
- supportedVersions = []string{}
- for v := 28; v <= 34; v++ {
- supportedVersions = append(supportedVersions, strconv.Itoa(v))
+ allowedVersions := ctx.DeviceConfig().PlatformSystemSdkVersions()
+ if ctx.DeviceSpecific() || ctx.SocSpecific() || (ctx.ProductSpecific() && ctx.Config().EnforceProductPartitionInterface()) {
+ systemSdkVersions := ctx.DeviceConfig().SystemSdkVersions()
+ if len(systemSdkVersions) > 0 {
+ allowedVersions = systemSdkVersions
}
}
-
- // APEXes in the system partition are still considered as part of the platform, thus can use
- // more SDKs from PLATFORM_SYSTEMSDK_VERSIONS
- if inApex && !inVendor {
- supportedVersions = ctx.DeviceConfig().PlatformSystemSdkVersions()
- }
-
- thisVer, err := s.EffectiveVersion(ctx)
- if err != nil {
- ctx.PropertyErrorf("sdk_version", "invalid sdk version %q", s.Raw)
- return false
- }
-
- thisVerString := strconv.Itoa(thisVer.FinalOrPreviewInt())
- if thisVer.IsPreview() {
- thisVerString = *ctx.Config().productVariables.Platform_sdk_version_or_codename
- }
-
- if !InList(thisVerString, supportedVersions) {
+ if len(allowedVersions) > 0 && !InList(s.ApiLevel.String(), allowedVersions) {
ctx.PropertyErrorf("sdk_version", "incompatible sdk version %q. System SDK version should be one of %q",
- s.Raw, supportedVersions)
+ s.Raw, allowedVersions)
return false
}
return true
}
-func isJava(m Module) bool {
- moduleType := reflect.TypeOf(m).String()
- return strings.HasPrefix(moduleType, "*java.")
-}
-
-func isSdkVersion34AvailableIn(c Config) bool {
- return c.PlatformSdkVersion().FinalInt() >= 34
-}
-
func init() {
RegisterMakeVarsProvider(pctx, javaSdkMakeVars)
}