diff --git a/java/android_manifest.go b/java/android_manifest.go index 859900376..0c77968e6 100644 --- a/java/android_manifest.go +++ b/java/android_manifest.go @@ -71,12 +71,15 @@ func shouldReturnFinalOrFutureInt(ctx android.ModuleContext, targetSdkVersionLev return targetSdkVersionLevel.IsPreview() && (ctx.Config().UnbundledBuildApps() || includedInMts(ctx.Module())) } -// Helper function that casts android.Module to java.androidTestApp -// If this type conversion is possible, it queries whether the test app is included in an MTS suite +// Helper function that returns true if android_test, android_test_helper_app, java_test are in an MTS suite. func includedInMts(module android.Module) bool { if test, ok := module.(androidTestApp); ok { return test.includedInTestSuite("mts") } + // java_test + if test, ok := module.(*Test); ok { + return android.PrefixInList(test.testProperties.Test_suites, "mts") + } return false } diff --git a/java/app.go b/java/app.go index 739ef1a50..f35e4c3d4 100644 --- a/java/app.go +++ b/java/app.go @@ -345,7 +345,35 @@ func (a *AndroidApp) OverridablePropertiesDepsMutator(ctx android.BottomUpMutato } } +// TODO(b/156476221): Remove this allowlist +var ( + missingMinSdkVersionMtsAllowlist = []string{ + "CellBroadcastReceiverGoogleUnitTests", + "CellBroadcastReceiverUnitTests", + "CtsBatterySavingTestCases", + "CtsDeviceAndProfileOwnerApp23", + "CtsDeviceAndProfileOwnerApp30", + "CtsIntentSenderApp", + "CtsJobSchedulerTestCases", + "CtsMimeMapTestCases", + "CtsTareTestCases", + "LibStatsPullTests", + "MediaProviderClientTests", + "TeleServiceTests", + "TestExternalImsServiceApp", + "TestSmsRetrieverApp", + "TetheringPrivilegedTests", + } +) + +func checkMinSdkVersionMts(ctx android.ModuleContext, minSdkVersion android.ApiLevel) { + if includedInMts(ctx.Module()) && !minSdkVersion.Specified() && !android.InList(ctx.ModuleName(), missingMinSdkVersionMtsAllowlist) { + ctx.PropertyErrorf("min_sdk_version", "min_sdk_version is a required property for tests included in MTS") + } +} + func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleContext) { + checkMinSdkVersionMts(ctx, a.MinSdkVersion(ctx)) applicationId := a.appTestHelperAppProperties.Manifest_values.ApplicationId if applicationId != nil { if a.overridableAppProperties.Package_name != nil { @@ -1366,6 +1394,7 @@ func (a *AndroidTestHelperApp) includedInTestSuite(searchPrefix string) bool { } func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { + checkMinSdkVersionMts(ctx, a.MinSdkVersion(ctx)) var configs []tradefed.Config if a.appTestProperties.Instrumentation_target_package != nil { a.additionalAaptFlags = append(a.additionalAaptFlags, diff --git a/java/app_test.go b/java/app_test.go index 1a862fa54..9e2d19ee8 100644 --- a/java/app_test.go +++ b/java/app_test.go @@ -4146,6 +4146,7 @@ func TestTargetSdkVersionMtsTests(t *testing.T) { bpTemplate := ` %v { name: "mytest", + min_sdk_version: "34", target_sdk_version: "%v", test_suites: ["othersuite", "%v"], } diff --git a/java/java.go b/java/java.go index 6fee7ce9a..a2fc5fbd1 100644 --- a/java/java.go +++ b/java/java.go @@ -1510,6 +1510,7 @@ func (j *TestHost) GenerateAndroidBuildActions(ctx android.ModuleContext) { } func (j *Test) GenerateAndroidBuildActions(ctx android.ModuleContext) { + checkMinSdkVersionMts(ctx, j.MinSdkVersion(ctx)) j.generateAndroidBuildActionsWithConfig(ctx, nil) android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) }