Merge "Revert^4 "Implement detecting container violations."" into main am: 7344482ff3

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3248019

Change-Id: I440053bd684fa56172b82b4012348bd0a93e84c5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jihoon Kang
2024-08-30 20:21:28 +00:00
committed by Automerger Merge Worker
17 changed files with 225 additions and 19 deletions

View File

@@ -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 {

View File

@@ -15,8 +15,10 @@
package android
import (
"fmt"
"reflect"
"slices"
"strings"
"github.com/google/blueprint"
)
@@ -398,6 +400,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
@@ -439,3 +475,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)
}
}
}
})
}
}

View File

@@ -1755,6 +1755,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")

View File

@@ -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",
}`,
},
}

View File

@@ -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",

View File

@@ -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 {

View File

@@ -92,6 +92,7 @@ func TestCreateClasspathElements(t *testing.T) {
],
srcs: ["b.java"],
installable: true,
sdk_version: "core_current",
}
java_library {

View File

@@ -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,

View File

@@ -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

View File

@@ -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 {

View File

@@ -590,6 +590,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() {

View File

@@ -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.

View File

@@ -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

View File

@@ -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
}

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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",