Add default_to_stubs option to java_sdk_library
Previously, when a lib that doesn't have sdk_version property set
depends on a java_sdk_library, the impl library was used for linking.
This might be too permissive because the client lib might be using empty
sdk_version because it needed some private APIs from the platform, but
not from the java_sdk_library. This actually happend for some of the CTS
tests. They don't set sdk_version, but were directly depending on
android.test.[base|runner|mock].stubs libraries. If we switch the
references to the stub libraries into the corresponding java_sdk_library
modules (e.g. aandroid.test.[base|runner|mock]), then we would be
allowing private APIs to the CTS tests, which is not good.
To solve this problem, default_to_stub property is introduced. It when set
to true prevents the impl lib from being used for linking. When a module
that doesn't have sdk_version depends on it, the widest API surface that
the java_sdk_library provides is linked instead.
Bug: 157007292
Test: m
Merged-In: Id2acc3cafb71d1e90d4fdc9c0c70a73983355e0f
Change-Id: Id2acc3cafb71d1e90d4fdc9c0c70a73983355e0f
(cherry picked from commit 932cdfeb06
)
This commit is contained in:
@@ -1465,6 +1465,33 @@ func TestJavaSdkLibrary_FallbackScope(t *testing.T) {
|
||||
`)
|
||||
}
|
||||
|
||||
func TestJavaSdkLibrary_DefaultToStubs(t *testing.T) {
|
||||
ctx, _ := testJava(t, `
|
||||
java_sdk_library {
|
||||
name: "foo",
|
||||
srcs: ["a.java"],
|
||||
system: {
|
||||
enabled: true,
|
||||
},
|
||||
default_to_stubs: true,
|
||||
}
|
||||
|
||||
java_library {
|
||||
name: "baz",
|
||||
srcs: ["a.java"],
|
||||
libs: ["foo"],
|
||||
// does not have sdk_version set, should fallback to module,
|
||||
// which will then fallback to system because the module scope
|
||||
// is not enabled.
|
||||
}
|
||||
`)
|
||||
// The baz library should depend on the system stubs jar.
|
||||
bazLibrary := ctx.ModuleForTests("baz", "android_common").Rule("javac")
|
||||
if expected, actual := `^-classpath .*:/[^:]*/turbine-combined/foo\.stubs.system\.jar$`, bazLibrary.Args["classpath"]; !regexp.MustCompile(expected).MatchString(actual) {
|
||||
t.Errorf("expected %q, found %#q", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
var compilerFlagsTestCases = []struct {
|
||||
in string
|
||||
out bool
|
||||
|
Reference in New Issue
Block a user