From 50146e9c8eadac8f71ab4e1ae689a0545aaed5a4 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Thu, 30 Jan 2020 18:00:15 +0900 Subject: [PATCH] sdk_version: "module_current" is supported module_* is a new API surface for OS modules (e.g. APEXes). It has slightly bigger API surface than the system_* SDK. Specifically, APIs with @SystemApi(client=MODULE_LIBRARIES) are added there. Bug: 146757305 Test: m Change-Id: I8980e50c0e3a4cd843048e0de1f638e854384f46 --- java/java.go | 15 ++++++++++++++- java/sdk.go | 8 ++++++++ java/sdk_test.go | 9 +++++++++ java/testing.go | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/java/java.go b/java/java.go index ed3dca9e0..a4e91ab9c 100644 --- a/java/java.go +++ b/java/java.go @@ -757,9 +757,12 @@ func checkProducesJars(ctx android.ModuleContext, dep android.SourceFileProducer type linkType int const ( + // TODO(jiyong) rename these for better readability. Make the allowed + // and disallowed link types explicit javaCore linkType = iota javaSdk javaSystem + javaModule javaPlatform ) @@ -789,6 +792,10 @@ func (m *Module) getLinkType(name string) (ret linkType, stubs bool) { return javaSdk, true case ver.kind == sdkPublic: return javaSdk, false + case name == "android_module_lib_stubs_current": + return javaModule, true + case ver.kind == sdkModule: + return javaModule, false case ver.kind == sdkPrivate || ver.kind == sdkNone || ver.kind == sdkCorePlatform: return javaPlatform, false case !ver.valid(): @@ -824,11 +831,17 @@ func checkLinkType(ctx android.ModuleContext, from *Module, to linkTypeContext, } break case javaSystem: - if otherLinkType == javaPlatform { + if otherLinkType == javaPlatform || otherLinkType == javaModule { ctx.ModuleErrorf("compiles against system API, but dependency %q is compiling against private API."+commonMessage, ctx.OtherModuleName(to)) } break + case javaModule: + if otherLinkType == javaPlatform { + ctx.ModuleErrorf("compiles against module 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 f388358e5..1c047a353 100644 --- a/java/sdk.go +++ b/java/sdk.go @@ -71,6 +71,7 @@ const ( sdkPublic sdkSystem sdkTest + sdkModule sdkPrivate ) @@ -91,6 +92,8 @@ func (k sdkKind) String() string { return "core" case sdkCorePlatform: return "core_platform" + case sdkModule: + return "module" default: return "invalid" } @@ -256,6 +259,8 @@ func sdkSpecFrom(str string) sdkSpec { kind = sdkSystem case "test": kind = sdkTest + case "module": + kind = sdkModule default: return sdkSpec{sdkInvalid, sdkVersionNone, str} } @@ -382,6 +387,9 @@ func decodeSdkDep(ctx android.EarlyModuleContext, sdkContext sdkContext) sdkDep return toModule("android_test_stubs_current", "framework-res", sdkFrameworkAidlPath(ctx)) case sdkCore: return toModule("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)) default: panic(fmt.Errorf("invalid sdk %q", sdkVersion.raw)) } diff --git a/java/sdk_test.go b/java/sdk_test.go index 9cabd7772..c815fe3c1 100644 --- a/java/sdk_test.go +++ b/java/sdk_test.go @@ -211,6 +211,15 @@ func TestClasspath(t *testing.T) { java8classpath: []string{"prebuilts/sdk/29/public/android.jar", "prebuilts/sdk/tools/core-lambda-stubs.jar"}, 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"}, + system: "core-current-stubs-system-modules", + java9classpath: []string{"android_module_lib_stubs_current"}, + aidl: "-p" + buildDir + "/framework.aidl", + }, } for _, testcase := range classpathTestcases { diff --git a/java/testing.go b/java/testing.go index 08bae4407..3e5de7d2e 100644 --- a/java/testing.go +++ b/java/testing.go @@ -142,6 +142,7 @@ func GatherRequiredDepsForTest() string { "android_stubs_current", "android_system_stubs_current", "android_test_stubs_current", + "android_module_lib_stubs_current", "core.current.stubs", "core.platform.api.stubs", "kotlin-stdlib",