diff --git a/java/java.go b/java/java.go index dd44d06aa..514bab356 100644 --- a/java/java.go +++ b/java/java.go @@ -756,6 +756,7 @@ const ( javaSdk javaSystem javaModule + javaSystemServer javaPlatform ) @@ -789,6 +790,10 @@ func (m *Module) getLinkType(name string) (ret linkType, stubs bool) { return javaModule, true case ver.kind == sdkModule: return javaModule, false + case name == "services-stubs": + return javaSystemServer, true + case ver.kind == sdkSystemServer: + return javaSystemServer, false case ver.kind == sdkPrivate || ver.kind == sdkNone || ver.kind == sdkCorePlatform: return javaPlatform, false case !ver.valid(): @@ -824,17 +829,23 @@ func checkLinkType(ctx android.ModuleContext, from *Module, to linkTypeContext, } break case javaSystem: - if otherLinkType == javaPlatform || otherLinkType == javaModule { + if otherLinkType == javaPlatform || otherLinkType == javaModule || otherLinkType == javaSystemServer { ctx.ModuleErrorf("compiles against system API, but dependency %q is compiling against private API."+commonMessage, ctx.OtherModuleName(to)) } break case javaModule: - if otherLinkType == javaPlatform { + if otherLinkType == javaPlatform || otherLinkType == javaSystemServer { ctx.ModuleErrorf("compiles against module API, but dependency %q is compiling against private API."+commonMessage, ctx.OtherModuleName(to)) } break + case javaSystemServer: + if otherLinkType == javaPlatform { + ctx.ModuleErrorf("compiles against system server API, but dependency %q is compiling against private API."+commonMessage, + ctx.OtherModuleName(to)) + } + break case javaPlatform: // no restriction on link-type break diff --git a/java/sdk.go b/java/sdk.go index 1c047a353..1e60d6774 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -72,6 +72,7 @@ const ( sdkSystem sdkTest sdkModule + sdkSystemServer sdkPrivate ) @@ -94,6 +95,8 @@ func (k sdkKind) String() string { return "core_platform" case sdkModule: return "module" + case sdkSystemServer: + return "system_server" default: return "invalid" } @@ -261,6 +264,8 @@ func sdkSpecFrom(str string) sdkSpec { kind = sdkTest case "module": kind = sdkModule + case "system_server": + kind = sdkSystemServer default: return sdkSpec{sdkInvalid, sdkVersionNone, str} } @@ -324,13 +329,13 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep } } - toModule := func(m, r string, aidl android.Path) sdkDep { + toModule := func(modules []string, res string, aidl android.Path) sdkDep { return sdkDep{ useModule: true, - bootclasspath: []string{m, config.DefaultLambdaStubsLibrary}, + bootclasspath: append(modules, config.DefaultLambdaStubsLibrary), systemModules: "core-current-stubs-system-modules", - java9Classpath: []string{m}, - frameworkResModule: r, + java9Classpath: modules, + frameworkResModule: res, aidl: android.OptionalPathForPath(aidl), } } @@ -380,16 +385,19 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep noFrameworksLibs: true, } case sdkPublic: - return toModule("android_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx)) + return toModule([]string{"android_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) case sdkSystem: - return toModule("android_system_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx)) + return toModule([]string{"android_system_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) case sdkTest: - return toModule("android_test_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx)) + return toModule([]string{"android_test_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) case sdkCore: - return toModule("core.current.stubs", "", nil) + return toModule([]string{"core.current.stubs"}, "", nil) case sdkModule: // TODO(146757305): provide .apk and .aidl that have more APIs for modules - return toModule("android_module_lib_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx)) + return toModule([]string{"android_module_lib_stubs_current"}, "framework-res", sdkFrameworkAidlPath(ctx)) + case sdkSystemServer: + // TODO(146757305): provide .apk and .aidl that have more APIs for modules + return toModule([]string{"android_module_lib_stubs_current", "services-stubs"}, "framework-res", sdkFrameworkAidlPath(ctx)) default: panic(fmt.Errorf("invalid sdk %q", sdkVersion.raw)) } diff --git a/java/sdk_test.go b/java/sdk_test.go index c815fe3c1..ea6733d86 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -212,7 +212,6 @@ func TestClasspath(t *testing.T) { aidl: "-pprebuilts/sdk/29/public/framework.aidl", }, { - name: "module_current", properties: `sdk_version: "module_current",`, bootclasspath: []string{"android_module_lib_stubs_current", "core-lambda-stubs"}, @@ -220,6 +219,14 @@ func TestClasspath(t *testing.T) { java9classpath: []string{"android_module_lib_stubs_current"}, aidl: "-p" + buildDir + "/framework.aidl", }, + { + name: "system_server_current", + properties: `sdk_version: "system_server_current",`, + bootclasspath: []string{"android_module_lib_stubs_current", "services-stubs", "core-lambda-stubs"}, + system: "core-current-stubs-system-modules", + java9classpath: []string{"android_module_lib_stubs_current", "services-stubs"}, + aidl: "-p" + buildDir + "/framework.aidl", + }, } for _, testcase := range classpathTestcases { diff --git a/java/testing.go b/java/testing.go index 8f979c73e..3111109a5 100644 --- a/java/testing.go +++ b/java/testing.go @@ -147,6 +147,7 @@ func GatherRequiredDepsForTest() string { "android_system_stubs_current", "android_test_stubs_current", "android_module_lib_stubs_current", + "services-stubs", "core.current.stubs", "core.platform.api.stubs", "kotlin-stdlib",