From a2db18fb1e721c63d9ad3e87c33718749d50c25e Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Wed, 22 Jan 2020 17:11:15 +0000 Subject: [PATCH] java_sdk_library use prebuilt jars for numeric sdk_version Previously, when a library that used a numeric sdk version also referenced a java_sdk_library it would use the current version of its API. That was dangerous as there is an expectation that an app building against a numbered version will also be targeted at that version and so building against a later version of the API could hide runtime incompatibilities. This change will use prebuilt versions of the java_sdk_library's api when being built for a numbered sdk version. Bug: 148080325 Test: m droid Change-Id: I3fd416553950785a443c1702e495a96debc33331 --- java/java_test.go | 13 +++++++++++++ java/sdk_library.go | 5 +++-- java/testing.go | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/java/java_test.go b/java/java_test.go index 0e987a624..8815c09db 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1099,6 +1099,12 @@ func TestJavaSdkLibrary(t *testing.T) { libs: ["foo"], sdk_version: "test_current", } + java_library { + name: "baz-29", + srcs: ["c.java"], + libs: ["foo"], + sdk_version: "system_29", + } `) // check the existence of the internal modules @@ -1138,6 +1144,13 @@ func TestJavaSdkLibrary(t *testing.T) { "foo.stubs.test.jar") } + baz29Javac := ctx.ModuleForTests("baz-29", "android_common").Rule("javac") + // tests if baz-29 is actually linked to the system 29 stubs lib + if !strings.Contains(baz29Javac.Args["classpath"], "prebuilts/sdk/29/system/foo.jar") { + t.Errorf("baz-29 javac classpath %v does not contain %q", baz29Javac.Args["classpath"], + "prebuilts/sdk/29/system/foo.jar") + } + // test if baz has exported SDK lib names foo and bar to qux qux := ctx.ModuleForTests("qux", "android_common") if quxLib, ok := qux.Module().(*Library); ok { diff --git a/java/sdk_library.go b/java/sdk_library.go index cd22e6ea0..fb8ae95de 100644 --- a/java/sdk_library.go +++ b/java/sdk_library.go @@ -683,8 +683,9 @@ func (module *SdkLibrary) sdkJars( sdkVersion sdkSpec, headerJars bool) android.Paths { - // This module is just a wrapper for the stubs. - if ctx.Config().UnbundledBuildUsePrebuiltSdks() { + // If a specific numeric version has been requested or the build is explicitly configured + // for it then use prebuilt versions of the sdk. + if sdkVersion.version.isNumbered() || ctx.Config().UnbundledBuildUsePrebuiltSdks() { return module.PrebuiltJars(ctx, sdkVersion) } else { if !sdkVersion.specified() { diff --git a/java/testing.go b/java/testing.go index e746e2d33..ecf0126e8 100644 --- a/java/testing.go +++ b/java/testing.go @@ -61,6 +61,7 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string "prebuilts/sdk/29/public/android.jar": nil, "prebuilts/sdk/29/public/framework.aidl": nil, "prebuilts/sdk/29/system/android.jar": nil, + "prebuilts/sdk/29/system/foo.jar": nil, "prebuilts/sdk/current/core/android.jar": nil, "prebuilts/sdk/current/public/android.jar": nil, "prebuilts/sdk/current/public/framework.aidl": nil,