diff --git a/android/sdk_version.go b/android/sdk_version.go index 8953eaecd..a7e03dcd8 100644 --- a/android/sdk_version.go +++ b/android/sdk_version.go @@ -211,7 +211,29 @@ func (s SdkSpec) EffectiveVersionString(ctx EarlyModuleContext) (string, error) if !s.ApiLevel.IsPreview() { return s.ApiLevel.String(), nil } - return ctx.Config().DefaultAppTargetSdk(ctx).String(), nil + // Determine the default sdk + ret := ctx.Config().DefaultAppTargetSdk(ctx) + if !ret.IsPreview() { + // If the default sdk has been finalized, return that + return ret.String(), nil + } + // There can be more than one active in-development sdks + // If an app is targeting an active sdk, but not the default one, return the requested active sdk. + // e.g. + // SETUP + // In-development: UpsideDownCake, VanillaIceCream + // Default: VanillaIceCream + // Android.bp + // min_sdk_version: `UpsideDownCake` + // RETURN + // UpsideDownCake and not VanillaIceCream + for _, preview := range ctx.Config().PreviewApiLevels() { + if s.ApiLevel.String() == preview.String() { + return preview.String(), nil + } + } + // Otherwise return the default one + return ret.String(), nil } var ( diff --git a/java/app_test.go b/java/app_test.go index c77f29d23..5b16cea28 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -1005,6 +1005,7 @@ func TestAppSdkVersion(t *testing.T) { platformSdkInt int platformSdkCodename string platformSdkFinal bool + minSdkVersionBp string expectedMinSdkVersion string platformApis bool activeCodenames []string @@ -1052,6 +1053,14 @@ func TestAppSdkVersion(t *testing.T) { platformSdkCodename: "S", activeCodenames: []string{"S"}, }, + { + name: "two active SDKs", + sdkVersion: "module_current", + minSdkVersionBp: "UpsideDownCake", + expectedMinSdkVersion: "UpsideDownCake", // And not VanillaIceCream + platformSdkCodename: "VanillaIceCream", + activeCodenames: []string{"UpsideDownCake", "VanillaIceCream"}, + }, } for _, moduleType := range []string{"android_app", "android_library"} { @@ -1061,12 +1070,17 @@ func TestAppSdkVersion(t *testing.T) { if test.platformApis { platformApiProp = "platform_apis: true," } + minSdkVersionProp := "" + if test.minSdkVersionBp != "" { + minSdkVersionProp = fmt.Sprintf(` min_sdk_version: "%s",`, test.minSdkVersionBp) + } bp := fmt.Sprintf(`%s { name: "foo", srcs: ["a.java"], sdk_version: "%s", %s - }`, moduleType, test.sdkVersion, platformApiProp) + %s + }`, moduleType, test.sdkVersion, platformApiProp, minSdkVersionProp) result := android.GroupFixturePreparers( prepareForJavaTest,