Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0f43731 authored by Pete Gillin's avatar Pete Gillin
Browse files

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
parent f9828bf6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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",
+2 −0
Original line number Diff line number Diff line
@@ -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"
+266 −0
Original line number Diff line number Diff line
// 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{
	"AAECarSystemUI",
	"AAECarSystemUI-tests",
	"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",
	"atfwd",
	"BackupEncryption",
	"BackupFrameworksServicesRoboTests",
	"backuplib",
	"BandwidthEnforcementTest",
	"BlockedNumberProvider",
	"BluetoothInstrumentationTests",
	"BluetoothMidiLib",
	"BluetoothMidiService",
	"BTTestApp",
	"CallEnhancement",
	"CapCtrlInterface",
	"CarService",
	"car-service-test-lib",
	"car-service-test-static-lib",
	"CertInstaller",
	"com.qti.location.sdk",
	"com.qti.media.secureprocessor",
	"com.qti.snapdragon.sdk.display",
	"ConfURIDialer",
	"ConnectivityManagerTest",
	"ContactsProvider",
	"CorePerfTests",
	"core-tests-support",
	"cronet_impl_common_java",
	"cronet_impl_native_java",
	"cronet_impl_platform_java",
	"CtsAppExitTestCases",
	"CtsContentTestCases",
	"CtsIkeTestCases",
	"CtsLibcoreWycheproofBCTestCases",
	"CtsMediaTestCases",
	"CtsNetTestCases",
	"CtsNetTestCasesLatestSdk",
	"CtsSecurityTestCases",
	"CtsSuspendAppsTestCases",
	"CtsUsageStatsTestCases",
	"datastatusnotification",
	"DeadpoolService",
	"DeadpoolServiceBtServices",
	"DeviceInfo",
	"DisplayCutoutEmulationEmu01Overlay",
	"DocumentsUIGoogleTests",
	"DocumentsUIPerfTests",
	"DocumentsUITests",
	"DocumentsUIUnitTests",
	"DownloadProvider",
	"DownloadProviderTests",
	"DownloadProviderUi",
	"DynamicSystemInstallationService",
	"EmergencyInfo-lib",
	"ethernet-service",
	"EthernetServiceTests",
	"ExternalStorageProvider",
	"face-V1-0-javalib",
	"FloralClocks",
	"framework-all",
	"framework-jobscheduler",
	"framework-minus-apex",
	"FrameworkOverlayG6QU3",
	"FrameworksCoreTests",
	"FrameworksIkeTests",
	"FrameworksNetCommonTests",
	"FrameworksNetTests",
	"FrameworksServicesRoboTests",
	"FrameworksServicesTests",
	"FrameworksUtilTests",
	"FrameworksWifiTests",
	"GtsIncrementalInstallTestCases",
	"GtsIncrementalInstallTriggerApp",
	"GtsInstallerV2TestCases",
	"HelloOslo",
	"hid",
	"hidl_test_java_java",
	"hwbinder",
	"ims",
	"ims-ext-common",
	"imssettings",
	"izat.lib.glue",
	"KeyChain",
	"LocalSettingsLib",
	"LocalTransport",
	"lockagent",
	"mediaframeworktest",
	"mediatek-ims-base",
	"MmsService",
	"ModemTestMode",
	"MtkCapCtrl",
	"MtpService",
	"MultiDisplayProvider",
	"my.tests.snapdragonsdktest",
	"NetworkSetting",
	"NetworkStackIntegrationTestsLib",
	"NetworkStackNextIntegrationTests",
	"NetworkStackNextTests",
	"NetworkStackTests",
	"NetworkStackTestsLib",
	"NfcNci",
	"online-gcm-ref-docs",
	"online-gts-docs",
	"PerformanceMode",
	"pixel-power-ext-java",
	"pixel-power-ext-unstable-java",
	"pixel-power-ext-V1-java",
	"platform_library-docs",
	"PowerStatsService",
	"PrintSpooler",
	"pxp-monitor",
	"QColor",
	"qcom.fmradio",
	"qcrilhook",
	"qcrilhook-static",
	"qcrilmsgtunnel",
	"QDCMMobileApp",
	"Qmmi",
	"QPerformance",
	"QtiTelephonyService",
	"QtiTelephonyServicelibrary",
	"remoteSimLockAuthentication",
	"remotesimlockmanagerlibrary",
	"RollbackTest",
	"sam",
	"saminterfacelibrary",
	"sammanagerlibrary",
	"service-blobstore",
	"service-jobscheduler",
	"services",
	"services.accessibility",
	"services.backup",
	"services.core.unboosted",
	"services.devicepolicy",
	"services.print",
	"services.usage",
	"services.usb",
	"Settings-core",
	"SettingsGoogleOverlayCoral",
	"SettingsGoogleOverlayFlame",
	"SettingsLib",
	"SettingsOverlayG013A",
	"SettingsOverlayG013B",
	"SettingsOverlayG013C",
	"SettingsOverlayG013D",
	"SettingsOverlayG020A",
	"SettingsOverlayG020B",
	"SettingsOverlayG020C",
	"SettingsOverlayG020D",
	"SettingsOverlayG020E",
	"SettingsOverlayG020E_VN",
	"SettingsOverlayG020F",
	"SettingsOverlayG020F_VN",
	"SettingsOverlayG020G",
	"SettingsOverlayG020G_VN",
	"SettingsOverlayG020H",
	"SettingsOverlayG020H_VN",
	"SettingsOverlayG020I",
	"SettingsOverlayG020I_VN",
	"SettingsOverlayG020J",
	"SettingsOverlayG020M",
	"SettingsOverlayG020N",
	"SettingsOverlayG020P",
	"SettingsOverlayG020Q",
	"SettingsOverlayG025H",
	"SettingsOverlayG025J",
	"SettingsOverlayG025M",
	"SettingsOverlayG025N",
	"SettingsOverlayG5NZ6",
	"SettingsProvider",
	"SettingsProviderTest",
	"Shell",
	"ShellTests",
	"SimContact",
	"SimContacts",
	"SimSettings",
	"sl4a.Common",
	"StatementService",
	"SystemUI-core",
	"SystemUISharedLib",
	"SystemUI-tests",
	"tcmiface",
	"Telecom",
	"TelecomUnitTests",
	"telephony-common",
	"telephony-ext",
	"TelephonyProviderTests",
	"TeleService",
	"testables",
	"TetheringTests",
	"TetheringTestsLib",
	"time_zone_distro_installer",
	"time_zone_distro_installer-tests",
	"time_zone_distro-tests",
	"time_zone_updater",
	"TMobilePlanProvider",
	"TvProvider",
	"uiautomator-stubs-docs",
	"uimgbamanagerlibrary",
	"UsbHostExternalManagementTestApp",
	"UserDictionaryProvider",
	"UxPerformance",
	"WallpaperBackup",
	"WallpaperBackupAgentTests",
	"WfdCommon",
	"xdivert",
}

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
	}
}
+4 −4
Original line number Diff line number Diff line
@@ -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:
+9 −9
Original line number Diff line number Diff line
@@ -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{},
		},
		{
Loading