Enforce the legacy core/platform API restriction.

This change silently decides whether modules which depend on either
sdkPrivate or sdkCorePlatform get the legacy or the stable version of
the core/platform API, based on whether the module's name is on a
hard-coded list or not.

Test: m java
Test: make a target from the list when its entry is commented out, which correctly fails
Bug: 157640067
Change-Id: I15e5a6c2f07e73718803501d705de0d7ab9bec90
Merged-In: I15e5a6c2f07e73718803501d705de0d7ab9bec90
Merged-In: Iaa97ddaa015e8079fcb3426585c5101c7ec9e22a
(cherry picked from commit c0f4373106)
This commit is contained in:
Pete Gillin 2020-07-09 18:03:41 +01:00
parent 0bcda81dd5
commit 84c3807b99
7 changed files with 186 additions and 22 deletions

View File

@ -38,6 +38,7 @@ bootstrap_go_package {
"java_resources.go",
"kotlin.go",
"lint.go",
"legacy_core_platform_api_usage.go",
"platform_compat_config.go",
"plugin.go",
"prebuilt_apis.go",

View File

@ -30,6 +30,8 @@ var (
LegacyCorePlatformBootclasspathLibraries = []string{"legacy.core.platform.api.stubs", "core-lambda-stubs"}
LegacyCorePlatformSystemModules = "legacy-core-platform-api-stubs-system-modules"
StableCorePlatformBootclasspathLibraries = []string{"stable.core.platform.api.stubs", "core-lambda-stubs"}
StableCorePlatformSystemModules = "stable-core-platform-api-stubs-system-modules"
FrameworkLibraries = []string{"ext", "framework"}
DefaultLambdaStubsLibrary = "core-lambda-stubs"
SdkLambdaStubsPath = "prebuilts/sdk/tools/core-lambda-stubs.jar"

View File

@ -0,0 +1,161 @@
// Copyright 2020 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package java
import (
"android/soong/android"
"android/soong/java/config"
)
var legacyCorePlatformApiModules = []string{
"ahat-test-dump",
"android.car",
"android.test.mock",
"android.test.mock.impl",
"AoapTestDeviceApp",
"AoapTestHostApp",
"api-stubs-docs",
"art_cts_jvmti_test_library",
"art-gtest-jars-MyClassNatives",
"BackupFrameworksServicesRoboTests",
"BandwidthEnforcementTest",
"BlockedNumberProvider",
"BluetoothInstrumentationTests",
"BluetoothMidiService",
"car-apps-common",
"CertInstaller",
"ConnectivityManagerTest",
"ContactsProvider",
"core-tests-support",
"CtsContentTestCases",
"CtsIkeTestCases",
"CtsLibcoreWycheproofBCTestCases",
"CtsMediaTestCases",
"CtsNetTestCases",
"CtsNetTestCasesLatestSdk",
"CtsSecurityTestCases",
"CtsUsageStatsTestCases",
"DisplayCutoutEmulationEmu01Overlay",
"DocumentsUIPerfTests",
"DocumentsUITests",
"DownloadProvider",
"DownloadProviderTests",
"DownloadProviderUi",
"DynamicSystemInstallationService",
"EmergencyInfo-lib",
"ethernet-service",
"EthernetServiceTests",
"ExternalStorageProvider",
"ExtServices",
"ExtServices-core",
"framework-all",
"framework-minus-apex",
"FrameworksCoreTests",
"FrameworksIkeTests",
"FrameworksNetCommonTests",
"FrameworksNetTests",
"FrameworksServicesRoboTests",
"FrameworksServicesTests",
"FrameworksUtilTests",
"hid",
"hidl_test_java_java",
"hwbinder",
"ims",
"KeyChain",
"ksoap2",
"LocalTransport",
"lockagent",
"mediaframeworktest",
"MediaProvider",
"MmsService",
"MtpDocumentsProvider",
"MultiDisplayProvider",
"NetworkStackIntegrationTestsLib",
"NetworkStackNextIntegrationTests",
"NetworkStackNextTests",
"NetworkStackTests",
"NetworkStackTestsLib",
"NfcNci",
"platform_library-docs",
"PrintSpooler",
"RollbackTest",
"services",
"services.accessibility",
"services.backup",
"services.core.unboosted",
"services.devicepolicy",
"services.print",
"services.usage",
"services.usb",
"Settings-core",
"SettingsLib",
"SettingsProvider",
"SettingsProviderTest",
"Shell",
"ShellTests",
"sl4a.Common",
"StatementService",
"SystemUI-core",
"SystemUISharedLib",
"SystemUI-tests",
"Telecom",
"TelecomUnitTests",
"telephony-common",
"TelephonyProvider",
"TelephonyProviderTests",
"TeleService",
"testables",
"TetheringTests",
"TetheringTestsLib",
"time_zone_distro_installer",
"time_zone_distro_installer-tests",
"time_zone_distro-tests",
"time_zone_updater",
"TvProvider",
"uiautomator-stubs-docs",
"UsbHostExternalManagementTestApp",
"UserDictionaryProvider",
"WallpaperBackup",
"wifi-service",
}
var legacyCorePlatformApiLookup = make(map[string]struct{})
func init() {
for _, module := range legacyCorePlatformApiModules {
legacyCorePlatformApiLookup[module] = struct{}{}
}
}
func useLegacyCorePlatformApi(ctx android.EarlyModuleContext) bool {
_, found := legacyCorePlatformApiLookup[ctx.ModuleName()]
return found
}
func corePlatformSystemModules(ctx android.EarlyModuleContext) string {
if useLegacyCorePlatformApi(ctx) {
return config.LegacyCorePlatformSystemModules
} else {
return config.StableCorePlatformSystemModules
}
}
func corePlatformBootclasspathLibraries(ctx android.EarlyModuleContext) []string {
if useLegacyCorePlatformApi(ctx) {
return config.LegacyCorePlatformBootclasspathLibraries
} else {
return config.StableCorePlatformBootclasspathLibraries
}
}

View File

@ -413,8 +413,8 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep
case sdkPrivate:
return sdkDep{
useModule: true,
systemModules: config.LegacyCorePlatformSystemModules,
bootclasspath: config.LegacyCorePlatformBootclasspathLibraries,
systemModules: corePlatformSystemModules(ctx),
bootclasspath: corePlatformBootclasspathLibraries(ctx),
classpath: config.FrameworkLibraries,
frameworkResModule: "framework-res",
}
@ -438,8 +438,8 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep
case sdkCorePlatform:
return sdkDep{
useModule: true,
systemModules: config.LegacyCorePlatformSystemModules,
bootclasspath: config.LegacyCorePlatformBootclasspathLibraries,
systemModules: corePlatformSystemModules(ctx),
bootclasspath: corePlatformBootclasspathLibraries(ctx),
noFrameworksLibs: true,
}
case sdkPublic:

View File

@ -49,8 +49,8 @@ func TestClasspath(t *testing.T) {
}{
{
name: "default",
bootclasspath: config.LegacyCorePlatformBootclasspathLibraries,
system: config.LegacyCorePlatformSystemModules,
bootclasspath: config.StableCorePlatformBootclasspathLibraries,
system: config.StableCorePlatformSystemModules,
java8classpath: config.FrameworkLibraries,
java9classpath: config.FrameworkLibraries,
aidl: "-Iframework/aidl",
@ -58,16 +58,16 @@ func TestClasspath(t *testing.T) {
{
name: `sdk_version:"core_platform"`,
properties: `sdk_version:"core_platform"`,
bootclasspath: config.LegacyCorePlatformBootclasspathLibraries,
system: config.LegacyCorePlatformSystemModules,
bootclasspath: config.StableCorePlatformBootclasspathLibraries,
system: config.StableCorePlatformSystemModules,
java8classpath: []string{},
aidl: "",
},
{
name: "blank sdk version",
properties: `sdk_version: "",`,
bootclasspath: config.LegacyCorePlatformBootclasspathLibraries,
system: config.LegacyCorePlatformSystemModules,
bootclasspath: config.StableCorePlatformBootclasspathLibraries,
system: config.StableCorePlatformSystemModules,
java8classpath: config.FrameworkLibraries,
java9classpath: config.FrameworkLibraries,
aidl: "-Iframework/aidl",
@ -155,9 +155,9 @@ func TestClasspath(t *testing.T) {
{
name: "nostdlib system_modules",
properties: `sdk_version: "none", system_modules: "legacy-core-platform-api-stubs-system-modules"`,
system: "legacy-core-platform-api-stubs-system-modules",
bootclasspath: []string{"legacy-core-platform-api-stubs-system-modules-lib"},
properties: `sdk_version: "none", system_modules: "stable-core-platform-api-stubs-system-modules"`,
system: "stable-core-platform-api-stubs-system-modules",
bootclasspath: []string{"stable-core-platform-api-stubs-system-modules-lib"},
java8classpath: []string{},
},
{

View File

@ -136,7 +136,7 @@ func GatherRequiredDepsForTest() string {
name: "%s",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
}
`, extra)
}
@ -146,7 +146,7 @@ func GatherRequiredDepsForTest() string {
name: "framework",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
aidl: {
export_include_dirs: ["framework/aidl"],
},
@ -161,7 +161,7 @@ func GatherRequiredDepsForTest() string {
name: "android.hidl.base-V1.0-java",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
installable: true,
}
@ -169,7 +169,7 @@ func GatherRequiredDepsForTest() string {
name: "android.hidl.manager-V1.0-java",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
installable: true,
}
@ -177,7 +177,7 @@ func GatherRequiredDepsForTest() string {
name: "org.apache.http.legacy",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
installable: true,
}
@ -185,7 +185,7 @@ func GatherRequiredDepsForTest() string {
name: "android.test.base",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
installable: true,
}
@ -193,7 +193,7 @@ func GatherRequiredDepsForTest() string {
name: "android.test.mock",
srcs: ["a.java"],
sdk_version: "none",
system_modules: "legacy-core-platform-api-stubs-system-modules",
system_modules: "stable-core-platform-api-stubs-system-modules",
installable: true,
}
`

View File

@ -51,10 +51,10 @@ java_system_modules_import {
name: "core-current-stubs-system-modules",
}
java_system_modules_import {
name: "legacy-core-platform-api-stubs-system-modules",
name: "stable-core-platform-api-stubs-system-modules",
}
java_import {
name: "legacy.core.platform.api.stubs",
name: "stable.core.platform.api.stubs",
}
java_import {
name: "android_stubs_current",