Add "jni_libs" property to apex module
Which is the list of JNI libraries that are embeded inside the apex. jni_libs is handled just like native_shared_libs except that it is stored in apex_manifest. When linkerconfig finds an apex with JNI libs, it exposes the namespace for the apex as visible so that libnativeloader can link the namespace to the corresponding classloader-namespace. Bug: 149363889 Test: m nothing(runs soong test) Change-Id: I52ebe38b44545e6e8853e34a3404a235c858112a
This commit is contained in:
@@ -226,6 +226,14 @@ func tearDown() {
|
||||
os.RemoveAll(buildDir)
|
||||
}
|
||||
|
||||
// ensure that 'result' equals 'expected'
|
||||
func ensureEquals(t *testing.T, result string, expected string) {
|
||||
t.Helper()
|
||||
if result != expected {
|
||||
t.Errorf("%q != %q", expected, result)
|
||||
}
|
||||
}
|
||||
|
||||
// ensure that 'result' contains 'expected'
|
||||
func ensureContains(t *testing.T, result string, expected string) {
|
||||
t.Helper()
|
||||
@@ -3621,6 +3629,70 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
|
||||
ensureRealfileExists(t, files, "lib64/myotherlib.so") // this is a real file
|
||||
}
|
||||
|
||||
func TestApexWithJniLibs(t *testing.T) {
|
||||
ctx, _ := testApex(t, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
jni_libs: ["mylib"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib",
|
||||
srcs: ["mylib.cpp"],
|
||||
shared_libs: ["mylib2"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
apex_available: [ "myapex" ],
|
||||
}
|
||||
|
||||
cc_library {
|
||||
name: "mylib2",
|
||||
srcs: ["mylib.cpp"],
|
||||
system_shared_libs: [],
|
||||
stl: "none",
|
||||
apex_available: [ "myapex" ],
|
||||
}
|
||||
`)
|
||||
|
||||
rule := ctx.ModuleForTests("myapex", "android_common_myapex_image").Rule("apexManifestRule")
|
||||
// Notice mylib2.so (transitive dep) is not added as a jni_lib
|
||||
ensureEquals(t, rule.Args["opt"], "-a jniLibs mylib.so")
|
||||
ensureExactContents(t, ctx, "myapex", "android_common_myapex_image", []string{
|
||||
"lib64/mylib.so",
|
||||
"lib64/mylib2.so",
|
||||
})
|
||||
}
|
||||
|
||||
func TestApexWithJniLibs_Errors(t *testing.T) {
|
||||
testApexError(t, `jni_libs: "xxx" is not a cc_library`, `
|
||||
apex {
|
||||
name: "myapex",
|
||||
key: "myapex.key",
|
||||
jni_libs: ["xxx"],
|
||||
}
|
||||
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
|
||||
prebuilt_etc {
|
||||
name: "xxx",
|
||||
src: "xxx",
|
||||
}
|
||||
`, withFiles(map[string][]byte{
|
||||
"xxx": nil,
|
||||
}))
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
run := func() int {
|
||||
setUp()
|
||||
|
Reference in New Issue
Block a user