Merge changes I88ee9709,If2ea3fde,I657fbcde,I585a8861 am: e8412c4e7a
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1873694 Change-Id: Ib2b791e2fe8b8685f28c07f0ecd09cdd9a2fba1e
This commit is contained in:
@@ -157,7 +157,7 @@ func (s SdkSpec) UsePrebuilt(ctx EarlyModuleContext) bool {
|
||||
return ctx.Config().AlwaysUsePrebuiltSdks()
|
||||
} else if !s.ApiLevel.IsPreview() {
|
||||
// validation check
|
||||
if s.Kind != SdkPublic && s.Kind != SdkSystem && s.Kind != SdkTest && s.Kind != SdkModule {
|
||||
if s.Kind != SdkPublic && s.Kind != SdkSystem && s.Kind != SdkTest && s.Kind != SdkModule && s.Kind != SdkSystemServer {
|
||||
panic(fmt.Errorf("prebuilt SDK is not not available for SdkKind=%q", s.Kind))
|
||||
return false
|
||||
}
|
||||
|
34
java/sdk.go
34
java/sdk.go
@@ -116,13 +116,13 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext android.SdkContext)
|
||||
}
|
||||
}
|
||||
|
||||
toModule := func(modules []string, res string, aidl android.Path) sdkDep {
|
||||
toModule := func(systemModules string, module string, aidl android.Path) sdkDep {
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
bootclasspath: append(modules, config.DefaultLambdaStubsLibrary),
|
||||
systemModules: "core-current-stubs-system-modules",
|
||||
java9Classpath: modules,
|
||||
frameworkResModule: res,
|
||||
bootclasspath: []string{module, config.DefaultLambdaStubsLibrary},
|
||||
systemModules: systemModules,
|
||||
java9Classpath: []string{module},
|
||||
frameworkResModule: "framework-res",
|
||||
aidl: android.OptionalPathForPath(aidl),
|
||||
}
|
||||
}
|
||||
@@ -161,11 +161,11 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext android.SdkContext)
|
||||
noFrameworksLibs: true,
|
||||
}
|
||||
case android.SdkPublic:
|
||||
return toModule([]string{"android_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
||||
return toModule("core-current-stubs-system-modules", "android_stubs_current", sdkFrameworkAidlPath(ctx))
|
||||
case android.SdkSystem:
|
||||
return toModule([]string{"android_system_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
||||
return toModule("core-current-stubs-system-modules", "android_system_stubs_current", sdkFrameworkAidlPath(ctx))
|
||||
case android.SdkTest:
|
||||
return toModule([]string{"android_test_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx))
|
||||
return toModule("core-current-stubs-system-modules", "android_test_stubs_current", sdkFrameworkAidlPath(ctx))
|
||||
case android.SdkCore:
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
@@ -175,24 +175,10 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext android.SdkContext)
|
||||
}
|
||||
case android.SdkModule:
|
||||
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
bootclasspath: []string{"android_module_lib_stubs_current", config.DefaultLambdaStubsLibrary},
|
||||
systemModules: "core-module-lib-stubs-system-modules",
|
||||
java9Classpath: []string{"android_module_lib_stubs_current"},
|
||||
frameworkResModule: "framework-res",
|
||||
aidl: android.OptionalPathForPath(nonUpdatableFrameworkAidlPath(ctx)),
|
||||
}
|
||||
return toModule("core-module-lib-stubs-system-modules", "android_module_lib_stubs_current", nonUpdatableFrameworkAidlPath(ctx))
|
||||
case android.SdkSystemServer:
|
||||
// TODO(146757305): provide .apk and .aidl that have more APIs for modules
|
||||
return sdkDep{
|
||||
useModule: true,
|
||||
bootclasspath: []string{"android_system_server_stubs_current", config.DefaultLambdaStubsLibrary},
|
||||
systemModules: "core-module-lib-stubs-system-modules",
|
||||
java9Classpath: []string{"android_system_server_stubs_current"},
|
||||
frameworkResModule: "framework-res",
|
||||
aidl: android.OptionalPathForPath(sdkFrameworkAidlPath(ctx)),
|
||||
}
|
||||
return toModule("core-module-lib-stubs-system-modules", "android_system_server_stubs_current", sdkFrameworkAidlPath(ctx))
|
||||
default:
|
||||
panic(fmt.Errorf("invalid sdk %q", sdkVersion.Raw))
|
||||
}
|
||||
|
195
java/sdk_test.go
195
java/sdk_test.go
@@ -25,9 +25,7 @@ import (
|
||||
"android/soong/java/config"
|
||||
)
|
||||
|
||||
func TestClasspath(t *testing.T) {
|
||||
const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
|
||||
var classpathTestcases = []struct {
|
||||
type classpathTestCase struct {
|
||||
name string
|
||||
unbundled bool
|
||||
moduleType string
|
||||
@@ -45,7 +43,18 @@ func TestClasspath(t *testing.T) {
|
||||
forces8 bool // if set, javac will always be called with java 8 arguments
|
||||
|
||||
aidl string
|
||||
}{
|
||||
|
||||
// Indicates how this test case is affected by the setting of Always_use_prebuilt_sdks.
|
||||
//
|
||||
// If this is nil then the test case is unaffected by the setting of Always_use_prebuilt_sdks.
|
||||
// Otherwise, the test case can only be used when
|
||||
// Always_use_prebuilt_sdks=*forAlwaysUsePrebuiltSdks.
|
||||
forAlwaysUsePrebuiltSdks *bool
|
||||
}
|
||||
|
||||
func TestClasspath(t *testing.T) {
|
||||
const frameworkAidl = "-I" + defaultJavaDir + "/framework/aidl"
|
||||
var classpathTestcases = []classpathTestCase{
|
||||
{
|
||||
name: "default",
|
||||
bootclasspath: config.StableCorePlatformBootclasspathLibraries,
|
||||
@@ -91,6 +100,8 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pprebuilts/sdk/30/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "current",
|
||||
properties: `sdk_version: "current",`,
|
||||
@@ -100,6 +111,20 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pout/soong/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "current",
|
||||
properties: `sdk_version: "current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "system_current",
|
||||
properties: `sdk_version: "system_current",`,
|
||||
@@ -109,7 +134,18 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pout/soong/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "system_current",
|
||||
properties: `sdk_version: "system_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/system/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "system_29",
|
||||
properties: `sdk_version: "system_29",`,
|
||||
bootclasspath: []string{`""`},
|
||||
@@ -118,7 +154,6 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pprebuilts/sdk/29/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "system_30",
|
||||
properties: `sdk_version: "system_30",`,
|
||||
bootclasspath: []string{`""`},
|
||||
@@ -128,6 +163,8 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pprebuilts/sdk/30/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "test_current",
|
||||
properties: `sdk_version: "test_current",`,
|
||||
@@ -137,12 +174,47 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pout/soong/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "test_current",
|
||||
properties: `sdk_version: "test_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "test_30",
|
||||
properties: `sdk_version: "test_30",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_30_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/30/test/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/30/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "core_current",
|
||||
properties: `sdk_version: "core_current",`,
|
||||
bootclasspath: []string{"core.current.stubs", "core-lambda-stubs"},
|
||||
system: "core-current-stubs-system-modules",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "core_current",
|
||||
properties: `sdk_version: "core_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/core/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
|
||||
name: "nostdlib",
|
||||
@@ -214,8 +286,10 @@ func TestClasspath(t *testing.T) {
|
||||
java9classpath: []string{"prebuilts/sdk/current/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "module_current",
|
||||
properties: `sdk_version: "module_current",`,
|
||||
bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"},
|
||||
@@ -224,6 +298,48 @@ func TestClasspath(t *testing.T) {
|
||||
aidl: "-pout/soong/framework_non_updatable.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "module_current",
|
||||
properties: `sdk_version: "module_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "module_30",
|
||||
properties: `sdk_version: "module_30",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_30_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/30/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/30/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "module_31",
|
||||
properties: `sdk_version: "module_31",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_31_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/31/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/31/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "module_32",
|
||||
properties: `sdk_version: "module_32",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_32_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/32/module-lib/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/32/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=false (the default).
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(false),
|
||||
|
||||
name: "system_server_current",
|
||||
properties: `sdk_version: "system_server_current",`,
|
||||
bootclasspath: []string{"android_system_server_stubs_current", "core-lambda-stubs"},
|
||||
@@ -231,9 +347,62 @@ func TestClasspath(t *testing.T) {
|
||||
java9classpath: []string{"android_system_server_stubs_current"},
|
||||
aidl: "-pout/soong/framework.aidl",
|
||||
},
|
||||
{
|
||||
// Test case only applies when Always_use_prebuilt_sdks=true.
|
||||
forAlwaysUsePrebuiltSdks: proptools.BoolPtr(true),
|
||||
|
||||
name: "system_server_current",
|
||||
properties: `sdk_version: "system_server_current",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_current_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/current/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/current/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "system_server_30",
|
||||
properties: `sdk_version: "system_server_30",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_30_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/30/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/30/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "system_server_31",
|
||||
properties: `sdk_version: "system_server_31",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_31_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/31/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/31/public/framework.aidl",
|
||||
},
|
||||
{
|
||||
name: "system_server_32",
|
||||
properties: `sdk_version: "system_server_32",`,
|
||||
bootclasspath: []string{`""`},
|
||||
system: "sdk_public_32_system_modules",
|
||||
java8classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
java9classpath: []string{"prebuilts/sdk/32/system-server/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"},
|
||||
aidl: "-pprebuilts/sdk/32/public/framework.aidl",
|
||||
},
|
||||
}
|
||||
|
||||
t.Run("basic", func(t *testing.T) {
|
||||
testClasspathTestCases(t, classpathTestcases, false)
|
||||
})
|
||||
|
||||
t.Run("Always_use_prebuilt_sdks=true", func(t *testing.T) {
|
||||
testClasspathTestCases(t, classpathTestcases, true)
|
||||
})
|
||||
}
|
||||
|
||||
func testClasspathTestCases(t *testing.T, classpathTestcases []classpathTestCase, alwaysUsePrebuiltSdks bool) {
|
||||
for _, testcase := range classpathTestcases {
|
||||
if testcase.forAlwaysUsePrebuiltSdks != nil && *testcase.forAlwaysUsePrebuiltSdks != alwaysUsePrebuiltSdks {
|
||||
continue
|
||||
}
|
||||
|
||||
t.Run(testcase.name, func(t *testing.T) {
|
||||
moduleType := "java_library"
|
||||
if testcase.moduleType != "" {
|
||||
@@ -299,7 +468,9 @@ func TestClasspath(t *testing.T) {
|
||||
system = "--system=none"
|
||||
} else if testcase.system != "" {
|
||||
dir := ""
|
||||
if strings.HasPrefix(testcase.system, "sdk_public_") {
|
||||
// If the system modules name starts with sdk_ then it is a prebuilt module and so comes
|
||||
// from the prebuilt directory.
|
||||
if strings.HasPrefix(testcase.system, "sdk_") {
|
||||
dir = "prebuilts/sdk"
|
||||
} else {
|
||||
dir = defaultJavaDir
|
||||
@@ -351,11 +522,20 @@ func TestClasspath(t *testing.T) {
|
||||
android.AssertPathsRelativeToTopEquals(t, "implicits", deps, javac.Implicits)
|
||||
}
|
||||
|
||||
preparer := android.NullFixturePreparer
|
||||
if alwaysUsePrebuiltSdks {
|
||||
preparer = android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||
variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true)
|
||||
})
|
||||
}
|
||||
|
||||
fixtureFactory := android.GroupFixturePreparers(
|
||||
prepareForJavaTest,
|
||||
FixtureWithPrebuiltApis(map[string][]string{
|
||||
"29": {},
|
||||
"30": {},
|
||||
"31": {},
|
||||
"32": {},
|
||||
"current": {},
|
||||
}),
|
||||
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
|
||||
@@ -369,6 +549,7 @@ func TestClasspath(t *testing.T) {
|
||||
env["ANDROID_JAVA8_HOME"] = "jdk8"
|
||||
}
|
||||
}),
|
||||
preparer,
|
||||
)
|
||||
|
||||
// Test with legacy javac -source 1.8 -target 1.8
|
||||
|
@@ -181,6 +181,9 @@ func prebuiltApisFilesForLibs(apiLevels []string, sdkLibs []string) map[string][
|
||||
}
|
||||
}
|
||||
}
|
||||
if level == "current" {
|
||||
fs["prebuilts/sdk/current/core/android.jar"] = nil
|
||||
}
|
||||
fs[fmt.Sprintf("prebuilts/sdk/%s/public/framework.aidl", level)] = nil
|
||||
}
|
||||
return fs
|
||||
|
Reference in New Issue
Block a user