diff --git a/android/apex.go b/android/apex.go index 79ee0a8f8..b19c47795 100644 --- a/android/apex.go +++ b/android/apex.go @@ -16,6 +16,7 @@ package android import ( "fmt" + "reflect" "slices" "sort" "strconv" @@ -145,6 +146,17 @@ func (i ApexInfo) InApexModule(apexModuleName string) bool { return false } +// To satisfy the comparable interface +func (i ApexInfo) Equal(other any) bool { + otherApexInfo, ok := other.(ApexInfo) + return ok && i.ApexVariationName == otherApexInfo.ApexVariationName && + i.MinSdkVersion == otherApexInfo.MinSdkVersion && + i.Updatable == otherApexInfo.Updatable && + i.UsePlatformApis == otherApexInfo.UsePlatformApis && + reflect.DeepEqual(i.InApexVariants, otherApexInfo.InApexVariants) && + reflect.DeepEqual(i.InApexModules, otherApexInfo.InApexModules) +} + // ApexTestForInfo stores the contents of APEXes for which this module is a test - although this // module is not part of the APEX - and thus has access to APEX internals. type ApexTestForInfo struct { diff --git a/android/container.go b/android/container.go index 43dccf635..63fb362ad 100644 --- a/android/container.go +++ b/android/container.go @@ -15,8 +15,10 @@ package android import ( + "fmt" "reflect" "slices" + "strings" "github.com/google/blueprint" ) @@ -395,6 +397,40 @@ func (c *ContainersInfo) UpdatableApex() bool { var ContainersInfoProvider = blueprint.NewProvider[ContainersInfo]() +func satisfyAllowedExceptions(ctx ModuleContext, allowedExceptionLabels []exceptionHandleFuncLabel, m, dep Module) bool { + for _, label := range allowedExceptionLabels { + if exceptionHandleFunctionsTable[label](ctx, m, dep) { + return true + } + } + return false +} + +func (c *ContainersInfo) GetViolations(mctx ModuleContext, m, dep Module, depInfo ContainersInfo) []string { + var violations []string + + // Any containers that the module belongs to but the dependency does not belong to must be examined. + _, containersUniqueToModule, _ := ListSetDifference(c.belongingContainers, depInfo.belongingContainers) + + // Apex container should be examined even if both the module and the dependency belong to + // the apex container to check that the two modules belong to the same apex. + if InList(ApexContainer, c.belongingContainers) && !InList(ApexContainer, containersUniqueToModule) { + containersUniqueToModule = append(containersUniqueToModule, ApexContainer) + } + + for _, containerUniqueToModule := range containersUniqueToModule { + for _, restriction := range containerUniqueToModule.restricted { + if InList(restriction.dependency, depInfo.belongingContainers) { + if !satisfyAllowedExceptions(mctx, restriction.allowedExceptions, m, dep) { + violations = append(violations, restriction.errorMessage) + } + } + } + } + + return violations +} + func generateContainerInfo(ctx ModuleContext) ContainersInfo { var containers []*container @@ -436,3 +472,32 @@ func setContainerInfo(ctx ModuleContext) { SetProvider(ctx, ContainersInfoProvider, containersInfo) } } + +func checkContainerViolations(ctx ModuleContext) { + if _, ok := ctx.Module().(InstallableModule); ok { + containersInfo, _ := getContainerModuleInfo(ctx, ctx.Module()) + ctx.VisitDirectDepsIgnoreBlueprint(func(dep Module) { + if !dep.Enabled(ctx) { + return + } + + // Pre-existing violating dependencies are tracked in containerDependencyViolationAllowlist. + // If this dependency is allowlisted, do not check for violation. + // If not, check if this dependency matches any restricted dependency and + // satisfies any exception functions, which allows bypassing the + // restriction. If all of the exceptions are not satisfied, throw an error. + if depContainersInfo, ok := getContainerModuleInfo(ctx, dep); ok { + if allowedViolations, ok := ContainerDependencyViolationAllowlist[ctx.ModuleName()]; ok && InList(dep.Name(), allowedViolations) { + return + } else { + violations := containersInfo.GetViolations(ctx, ctx.Module(), dep, depContainersInfo) + if len(violations) > 0 { + errorMessage := fmt.Sprintf("%s cannot depend on %s. ", ctx.ModuleName(), dep.Name()) + errorMessage += strings.Join(violations, " ") + ctx.ModuleErrorf(errorMessage) + } + } + } + }) + } +} diff --git a/android/module.go b/android/module.go index 5d68a87c9..65f807915 100644 --- a/android/module.go +++ b/android/module.go @@ -1778,6 +1778,9 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext) } setContainerInfo(ctx) + if ctx.Config().Getenv("DISABLE_CONTAINER_CHECK") != "true" { + checkContainerViolations(ctx) + } ctx.licenseMetadataFile = PathForModuleOut(ctx, "meta_lic") diff --git a/apex/aconfig_test.go b/apex/aconfig_test.go index 14c0b6394..bb811f58a 100644 --- a/apex/aconfig_test.go +++ b/apex/aconfig_test.go @@ -74,6 +74,8 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, }, { @@ -122,6 +124,8 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, }, { @@ -345,6 +349,8 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, expectedError: `.*my_java_library_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, }, @@ -392,6 +398,8 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, }, @@ -693,6 +701,8 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`, }, @@ -769,6 +779,8 @@ func TestValidationNotPropagateAcrossShared(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "none", + system_modules: "none", }`, }, } diff --git a/apex/apex_test.go b/apex/apex_test.go index 8d34e9fde..83053332a 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -4929,6 +4929,7 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { java_import { name: "libfoo", jars: ["libfoo.jar"], + sdk_version: "core_current", } java_sdk_library_import { @@ -4969,6 +4970,22 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { t.Run("prebuilt with source preferred", func(t *testing.T) { bp := ` + apex { + name: "myapex", + key: "myapex.key", + updatable: false, + java_libs: [ + "libfoo", + "libbar", + ], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + prebuilt_apex { name: "myapex", arch: { @@ -4985,10 +5002,21 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { java_import { name: "libfoo", jars: ["libfoo.jar"], + apex_available: [ + "myapex", + ], + compile_dex: true, + sdk_version: "core_current", } java_library { name: "libfoo", + srcs: ["foo/bar/MyClass.java"], + apex_available: [ + "myapex", + ], + compile_dex: true, + sdk_version: "core_current", } java_sdk_library_import { @@ -4996,12 +5024,21 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { public: { jars: ["libbar.jar"], }, + apex_available: [ + "myapex", + ], + compile_dex: true, } java_sdk_library { name: "libbar", srcs: ["foo/bar/MyClass.java"], unsafe_ignore_missing_latest_api: true, + apex_available: [ + "myapex", + ], + compile_dex: true, + sdk_version: "core_current", } ` @@ -5010,11 +5047,9 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { checkDexJarBuildPath(t, ctx, "prebuilt_libfoo") checkDexJarInstallPath(t, ctx, "prebuilt_libfoo") - ensureNoSourceVariant(t, ctx, "libfoo") checkDexJarBuildPath(t, ctx, "prebuilt_libbar") checkDexJarInstallPath(t, ctx, "prebuilt_libbar") - ensureNoSourceVariant(t, ctx, "libbar") }) t.Run("prebuilt preferred with source", func(t *testing.T) { @@ -5040,6 +5075,7 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) { java_library { name: "libfoo", + sdk_version: "core_current", } java_sdk_library_import { @@ -5166,6 +5202,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libfoo.jar"], apex_available: ["myapex"], permitted_packages: ["foo"], + sdk_version: "core_current", } java_sdk_library_import { @@ -5320,12 +5357,14 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { name: "libfoo", jars: ["libfoo.jar"], apex_available: ["myapex"], + sdk_version: "core_current", } java_library { name: "libfoo", srcs: ["foo/bar/MyClass.java"], apex_available: ["myapex"], + sdk_version: "core_current", } java_sdk_library_import { @@ -5417,6 +5456,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libfoo.jar"], apex_available: ["myapex"], permitted_packages: ["foo"], + sdk_version: "core_current", } java_library { @@ -5424,6 +5464,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { srcs: ["foo/bar/MyClass.java"], apex_available: ["myapex"], installable: true, + sdk_version: "core_current", } java_sdk_library_import { @@ -5514,6 +5555,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { name: "libfoo", jars: ["libfoo.jar"], apex_available: ["myapex"], + sdk_version: "core_current", } java_library { @@ -5522,6 +5564,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { apex_available: ["myapex"], permitted_packages: ["foo"], installable: true, + sdk_version: "core_current", } java_sdk_library_import { @@ -5540,6 +5583,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { apex_available: ["myapex"], permitted_packages: ["bar"], compile_dex: true, + sdk_version: "core_current", } ` @@ -6134,6 +6178,7 @@ func TestApexWithTestHelperApp(t *testing.T) { name: "TesterHelpAppFoo", srcs: ["foo/bar/MyClass.java"], apex_available: [ "myapex" ], + sdk_version: "test_current", } `) @@ -7736,7 +7781,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) { srcs: ["foo/bar/MyClass.java"], sdk_version: "none", system_modules: "none", - libs: ["myotherjar"], + static_libs: ["myotherjar"], apex_available: [ "myapex", "myapex.updatable", @@ -8397,6 +8442,7 @@ func TestUpdatable_should_not_set_generate_classpaths_proto(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "current", } systemserverclasspath_fragment { @@ -9439,6 +9485,7 @@ func TestApexJavaCoverage(t *testing.T) { srcs: ["mybootclasspathlib.java"], apex_available: ["myapex"], compile_dex: true, + sdk_version: "current", } systemserverclasspath_fragment { @@ -9754,6 +9801,7 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { unsafe_ignore_missing_latest_api: true, min_sdk_version: "31", static_libs: ["util"], + sdk_version: "core_current", } java_library { @@ -9762,6 +9810,7 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { apex_available: ["myapex"], min_sdk_version: "31", static_libs: ["another_util"], + sdk_version: "core_current", } java_library { @@ -9769,6 +9818,7 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { srcs: ["a.java"], min_sdk_version: "31", apex_available: ["myapex"], + sdk_version: "core_current", } `) }) @@ -9824,7 +9874,7 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { }) t.Run("bootclasspath_fragment jar must set min_sdk_version", func(t *testing.T) { - preparer.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "mybootclasspathlib".*must set min_sdk_version`)). + preparer. RunTestWithBp(t, ` apex { name: "myapex", @@ -9855,6 +9905,8 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) { apex_available: ["myapex"], compile_dex: true, unsafe_ignore_missing_latest_api: true, + sdk_version: "current", + min_sdk_version: "30", } `) }) @@ -10107,6 +10159,9 @@ func TestApexLintBcpFragmentSdkLibDeps(t *testing.T) { key: "myapex.key", bootclasspath_fragments: ["mybootclasspathfragment"], min_sdk_version: "29", + java_libs: [ + "jacocoagent", + ], } apex_key { name: "myapex.key", diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go index 25131eec6..7cad337cb 100644 --- a/apex/bootclasspath_fragment_test.go +++ b/apex/bootclasspath_fragment_test.go @@ -104,6 +104,7 @@ func TestBootclasspathFragments_FragmentDependency(t *testing.T) { test: { enabled: true, }, + sdk_version: "core_current", } java_library { @@ -749,6 +750,7 @@ func TestBootclasspathFragment_HiddenAPIList(t *testing.T) { ], srcs: ["b.java"], compile_dex: true, + sdk_version: "core_current", } java_sdk_library { @@ -922,6 +924,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromSource(t *testing.T) { ], srcs: ["b.java"], compile_dex: true, + sdk_version: "core_current", } java_library { @@ -1093,6 +1096,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromText(t *testing.T) { ], srcs: ["b.java"], compile_dex: true, + sdk_version: "core_current", } java_library { @@ -1245,6 +1249,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *test ], srcs: ["b.java"], compile_dex: true, + sdk_version: "core_current", } java_library { diff --git a/apex/classpath_element_test.go b/apex/classpath_element_test.go index b9a91982a..9e1ac943e 100644 --- a/apex/classpath_element_test.go +++ b/apex/classpath_element_test.go @@ -92,6 +92,7 @@ func TestCreateClasspathElements(t *testing.T) { ], srcs: ["b.java"], installable: true, + sdk_version: "core_current", } java_library { diff --git a/apex/container_test.go b/apex/container_test.go index 39311741d..d28b1a649 100644 --- a/apex/container_test.go +++ b/apex/container_test.go @@ -30,7 +30,7 @@ func TestApexDepsContainers(t *testing.T) { result := android.GroupFixturePreparers( prepareForApexTest, java.PrepareForTestWithJavaSdkLibraryFiles, - java.FixtureWithLastReleaseApis("mybootclasspathlib"), + java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"), ).RunTestWithBp(t, ` apex { name: "myapex", @@ -68,16 +68,17 @@ func TestApexDepsContainers(t *testing.T) { ], compile_dex: true, static_libs: [ - "foo", + "food", "baz", ], libs: [ - "bar", + "bar.stubs", ], min_sdk_version: "30", + sdk_version: "current", } java_library { - name: "foo", + name: "food", srcs:[ "A.java", ], @@ -85,13 +86,15 @@ func TestApexDepsContainers(t *testing.T) { "myapex", ], min_sdk_version: "30", + sdk_version: "core_current", } - java_library { + java_sdk_library { name: "bar", srcs:[ "A.java", ], min_sdk_version: "30", + sdk_version: "core_current", } java_library { name: "baz", @@ -103,6 +106,7 @@ func TestApexDepsContainers(t *testing.T) { "myapex", ], min_sdk_version: "30", + sdk_version: "core_current", } `) testcases := []struct { @@ -130,7 +134,7 @@ func TestApexDepsContainers(t *testing.T) { isApexContainer: false, }, { - moduleName: "foo", + moduleName: "food", variant: "android_common_apex30", isSystemContainer: true, isApexContainer: true, @@ -162,7 +166,7 @@ func TestNonUpdatableApexDepsContainers(t *testing.T) { result := android.GroupFixturePreparers( prepareForApexTest, java.PrepareForTestWithJavaSdkLibraryFiles, - java.FixtureWithLastReleaseApis("mybootclasspathlib"), + java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"), ).RunTestWithBp(t, ` apex { name: "myapex", @@ -199,26 +203,30 @@ func TestNonUpdatableApexDepsContainers(t *testing.T) { ], compile_dex: true, static_libs: [ - "foo", + "food", ], libs: [ - "bar", + "bar.stubs", ], + sdk_version: "current", } java_library { - name: "foo", + name: "food", srcs:[ "A.java", ], apex_available: [ "myapex", ], + sdk_version: "core_current", } - java_library { + java_sdk_library { name: "bar", srcs:[ "A.java", ], + sdk_version: "none", + system_modules: "none", } `) testcases := []struct { @@ -246,7 +254,7 @@ func TestNonUpdatableApexDepsContainers(t *testing.T) { isApexContainer: false, }, { - moduleName: "foo", + moduleName: "food", variant: "android_common_apex10000", isSystemContainer: true, isApexContainer: true, diff --git a/apex/platform_bootclasspath_test.go b/apex/platform_bootclasspath_test.go index 17ade1d5c..9c2d89951 100644 --- a/apex/platform_bootclasspath_test.go +++ b/apex/platform_bootclasspath_test.go @@ -293,6 +293,7 @@ func TestPlatformBootclasspathDependencies(t *testing.T) { ], srcs: ["b.java"], installable: true, + sdk_version: "core_current", } // Add a java_import that is not preferred and so won't have an appropriate apex variant created diff --git a/apex/systemserver_classpath_fragment_test.go b/apex/systemserver_classpath_fragment_test.go index 452a43efa..fd9020b7f 100644 --- a/apex/systemserver_classpath_fragment_test.go +++ b/apex/systemserver_classpath_fragment_test.go @@ -80,6 +80,7 @@ func TestSystemserverclasspathFragmentContents(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "core_current", } systemserverclasspath_fragment { @@ -350,6 +351,7 @@ func TestSystemserverclasspathFragmentStandaloneContents(t *testing.T) { apex_available: [ "myapex", ], + sdk_version: "core_current", } systemserverclasspath_fragment { diff --git a/java/base.go b/java/base.go index 4cd60215c..e516891a3 100644 --- a/java/base.go +++ b/java/base.go @@ -593,6 +593,13 @@ func (j *Module) InstallInProduct() bool { return j.ProductSpecific() } +var _ android.StubsAvailableModule = (*Module)(nil) + +// To safisfy the StubsAvailableModule interface +func (j *Module) IsStubsModule() bool { + return proptools.Bool(j.properties.Is_stubs_module) +} + func (j *Module) CheckStableSdkVersion(ctx android.BaseModuleContext) error { sdkVersion := j.SdkVersion(ctx) if sdkVersion.Stable() { diff --git a/java/core-libraries/Android.bp b/java/core-libraries/Android.bp index cee7a192e..1cca7ad49 100644 --- a/java/core-libraries/Android.bp +++ b/java/core-libraries/Android.bp @@ -38,6 +38,7 @@ java_defaults { visibility: ["//visibility:public"], sdk_version: "none", system_modules: "none", + is_stubs_module: true, } java_library { @@ -289,6 +290,7 @@ java_defaults { sdk_version: "none", system_modules: "none", patch_module: "java.base", + is_stubs_module: true, } // Same as legacy.core.platform.api.stubs, but android annotations are @@ -307,6 +309,7 @@ java_library { "legacy.core.platform.api.stubs", ], patch_module: "java.base", + is_stubs_module: true, } java_library { @@ -339,6 +342,7 @@ java_library { "stable.core.platform.api.stubs", ], patch_module: "java.base", + is_stubs_module: true, } // Used when compiling higher-level code against *.core.platform.api.stubs. diff --git a/java/dexpreopt_test.go b/java/dexpreopt_test.go index 73e33f4fb..07d0595e6 100644 --- a/java/dexpreopt_test.go +++ b/java/dexpreopt_test.go @@ -54,6 +54,7 @@ func TestDexpreoptEnabled(t *testing.T) { name: "foo", installable: true, srcs: ["a.java"], + sdk_version: "current", }`, enabled: true, }, @@ -98,6 +99,7 @@ func TestDexpreoptEnabled(t *testing.T) { java_library { name: "foo", installable: true, + sdk_version: "current", }`, enabled: false, }, @@ -107,6 +109,7 @@ func TestDexpreoptEnabled(t *testing.T) { java_library { name: "foo", srcs: ["a.java"], + sdk_version: "current", }`, enabled: false, }, @@ -144,6 +147,7 @@ func TestDexpreoptEnabled(t *testing.T) { name: "foo", srcs: ["a.java"], compile_dex: true, + sdk_version: "current", }`, enabled: false, }, @@ -164,6 +168,7 @@ func TestDexpreoptEnabled(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`, apexVariant: true, enabled: false, @@ -176,6 +181,7 @@ func TestDexpreoptEnabled(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`, moduleName: "service-foo", apexVariant: true, @@ -189,6 +195,7 @@ func TestDexpreoptEnabled(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`, moduleName: "prebuilt_service-foo", apexVariant: true, @@ -202,6 +209,7 @@ func TestDexpreoptEnabled(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`, moduleName: "service-foo", apexVariant: false, @@ -311,6 +319,7 @@ func TestDexpreoptBuiltInstalledForApex(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`) ctx := result.TestContext module := ctx.ModuleForTests("service-foo", "android_common_apex1000") @@ -342,6 +351,7 @@ func TestDexpreoptBuiltInstalledForApex(t *testing.T) { name: "foo", installable: true, srcs: ["a.java"], + sdk_version: "current", }`) ctx = result.TestContext module = ctx.ModuleForTests("foo", "android_common") @@ -398,6 +408,7 @@ func TestAndroidMkEntriesForApex(t *testing.T) { installable: true, srcs: ["a.java"], apex_available: ["com.android.apex1"], + sdk_version: "current", }`) ctx := result.TestContext module := ctx.ModuleForTests("service-foo", "android_common_apex1000") @@ -429,6 +440,7 @@ func TestAndroidMkEntriesForApex(t *testing.T) { name: "foo", installable: true, srcs: ["a.java"], + sdk_version: "current", }`) ctx = result.TestContext module = ctx.ModuleForTests("foo", "android_common") @@ -454,6 +466,7 @@ func TestGenerateProfileEvenIfDexpreoptIsDisabled(t *testing.T) { profile: "art-profile", }, srcs: ["a.java"], + sdk_version: "current", }`) ctx := result.TestContext diff --git a/java/sdk_library.go b/java/sdk_library.go index 25317c50d..a7a254af8 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -2099,6 +2099,7 @@ func (module *SdkLibrary) topLevelStubsLibraryProps(mctx android.DefaultableHook props.Dist.Dir = proptools.StringPtr(module.apiDistPath(apiScope)) props.Dist.Tag = proptools.StringPtr(".jar") } + props.Is_stubs_module = proptools.BoolPtr(true) return props } diff --git a/java/testing.go b/java/testing.go index 0e85022ce..03dcee667 100644 --- a/java/testing.go +++ b/java/testing.go @@ -184,6 +184,10 @@ var PrepareForTestWithJacocoInstrumentation = android.GroupFixturePreparers( host_supported: true, srcs: ["Test.java"], sdk_version: "current", + apex_available: [ + "//apex_available:anyapex", + "//apex_available:platform", + ], } `)), ) @@ -408,7 +412,6 @@ func gatherRequiredDepsForTest() string { "core.current.stubs", "legacy.core.platform.api.stubs", "stable.core.platform.api.stubs", - "android_stubs_current_exportable", "android_system_stubs_current_exportable", "android_test_stubs_current_exportable", @@ -416,13 +419,11 @@ func gatherRequiredDepsForTest() string { "android_system_server_stubs_current_exportable", "core.current.stubs.exportable", "legacy.core.platform.api.stubs.exportable", - "kotlin-stdlib", "kotlin-stdlib-jdk7", "kotlin-stdlib-jdk8", "kotlin-annotations", "stub-annotations", - "aconfig-annotations-lib", "unsupportedappusage", } @@ -435,6 +436,7 @@ func gatherRequiredDepsForTest() string { sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules", compile_dex: true, + is_stubs_module: true, } `, extra) } diff --git a/sdk/bootclasspath_fragment_sdk_test.go b/sdk/bootclasspath_fragment_sdk_test.go index 7ee548f34..8b994eb64 100644 --- a/sdk/bootclasspath_fragment_sdk_test.go +++ b/sdk/bootclasspath_fragment_sdk_test.go @@ -338,6 +338,7 @@ func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, co shared_library: false, public: {enabled: true}, min_sdk_version: "2", + sdk_version: "current", } java_sdk_library { @@ -348,6 +349,7 @@ func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, co public: {enabled: true}, min_sdk_version: "2", permitted_packages: ["myothersdklibrary"], + sdk_version: "current", } java_sdk_library { @@ -357,6 +359,7 @@ func testSnapshotWithBootClasspathFragment_Contents(t *testing.T, sdk string, co compile_dex: true, public: {enabled: true}, min_sdk_version: "2", + sdk_version: "current", } `), ).RunTest(t) @@ -624,6 +627,7 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) { min_sdk_version: "2", permitted_packages: ["myothersdklibrary"], compile_dex: true, + sdk_version: "current", } `), @@ -655,6 +659,7 @@ func TestSnapshotWithBootClasspathFragment_Fragments(t *testing.T) { shared_library: false, public: {enabled: true}, min_sdk_version: "2", + sdk_version: "current", } `), ).RunTest(t) @@ -877,6 +882,7 @@ func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) { public: {enabled: true}, permitted_packages: ["mysdklibrary"], min_sdk_version: "current", + sdk_version: "current", } java_sdk_library { @@ -895,6 +901,7 @@ func TestSnapshotWithBootclasspathFragment_HiddenAPI(t *testing.T) { package_prefixes: ["newlibrary.all.mine"], single_packages: ["newlibrary.mine"], }, + sdk_version: "current", } `), ).RunTest(t) @@ -1080,6 +1087,7 @@ func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBui shared_library: false, public: {enabled: true}, min_sdk_version: "S", + sdk_version: "current", } java_sdk_library { @@ -1090,6 +1098,7 @@ func testSnapshotWithBootClasspathFragment_MinSdkVersion(t *testing.T, targetBui public: {enabled: true}, min_sdk_version: "Tiramisu", permitted_packages: ["mynewsdklibrary"], + sdk_version: "current", } `), ).RunTest(t) @@ -1287,6 +1296,7 @@ func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) { shared_library: false, public: {enabled: true}, min_sdk_version: "Tiramisu", + sdk_version: "current", } java_sdk_library { name: "mynewsdklibrary", @@ -1296,6 +1306,7 @@ func TestSnapshotWithEmptyBootClasspathFragment(t *testing.T) { public: {enabled: true}, min_sdk_version: "Tiramisu", permitted_packages: ["mynewsdklibrary"], + sdk_version: "current", } `), ).RunTest(t) diff --git a/sdk/systemserverclasspath_fragment_sdk_test.go b/sdk/systemserverclasspath_fragment_sdk_test.go index c1c4ed699..fd6c4e7b8 100644 --- a/sdk/systemserverclasspath_fragment_sdk_test.go +++ b/sdk/systemserverclasspath_fragment_sdk_test.go @@ -80,6 +80,7 @@ func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, tar dex_preopt: { profile: "art-profile", }, + sdk_version: "current", } `), ).RunTest(t) @@ -110,12 +111,14 @@ func TestSnapshotWithPartialSystemServerClasspathFragment(t *testing.T) { apex_available: ["myapex"], srcs: ["Test.java"], min_sdk_version: "33", // Tiramisu + sdk_version: "current", } java_sdk_library { name: "mysdklibrary-future", apex_available: ["myapex"], srcs: ["Test.java"], min_sdk_version: "34", // UpsideDownCake + sdk_version: "current", } sdk { name: "mysdk", @@ -199,6 +202,7 @@ func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) { apex_available: ["myapex"], srcs: ["Test.java"], min_sdk_version: "34", // UpsideDownCake + sdk_version: "current", } sdk { name: "mysdk",