Always package JNI libs into android_test modules
android_test modules should always have native libraries packaged
into the APK even when use_embedded_native_libs: false is set.
Fixes: 129298278
Test: TestJNIPackaging
Change-Id: Idfcc630f7c6579c1280a920b5d71808b0a502e06
diff --git a/java/app_test.go b/java/app_test.go
index d266242..781fdff 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -16,6 +16,8 @@
import (
"android/soong/android"
+ "android/soong/cc"
+
"fmt"
"path/filepath"
"reflect"
@@ -537,43 +539,8 @@
}
}
-func TestJNI(t *testing.T) {
- ctx := testJava(t, `
- toolchain_library {
- name: "libcompiler_rt-extras",
- src: "",
- }
-
- toolchain_library {
- name: "libatomic",
- src: "",
- }
-
- toolchain_library {
- name: "libgcc",
- src: "",
- }
-
- toolchain_library {
- name: "libclang_rt.builtins-aarch64-android",
- src: "",
- }
-
- toolchain_library {
- name: "libclang_rt.builtins-arm-android",
- src: "",
- }
-
- cc_object {
- name: "crtbegin_so",
- stl: "none",
- }
-
- cc_object {
- name: "crtend_so",
- stl: "none",
- }
-
+func TestJNIABI(t *testing.T) {
+ ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
cc_library {
name: "libjni",
system_shared_libs: [],
@@ -615,13 +582,6 @@
}
`)
- // check the existence of the internal modules
- ctx.ModuleForTests("test", "android_common")
- ctx.ModuleForTests("test_first", "android_common")
- ctx.ModuleForTests("test_both", "android_common")
- ctx.ModuleForTests("test_32", "android_common")
- ctx.ModuleForTests("test_64", "android_common")
-
testCases := []struct {
name string
abis []string
@@ -652,6 +612,90 @@
}
}
+func TestJNIPackaging(t *testing.T) {
+ ctx := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
+ cc_library {
+ name: "libjni",
+ system_shared_libs: [],
+ stl: "none",
+ }
+
+ android_app {
+ name: "app",
+ jni_libs: ["libjni"],
+ }
+
+ android_app {
+ name: "app_noembed",
+ jni_libs: ["libjni"],
+ use_embedded_native_libs: false,
+ }
+
+ android_app {
+ name: "app_embed",
+ jni_libs: ["libjni"],
+ use_embedded_native_libs: true,
+ }
+
+ android_test {
+ name: "test",
+ no_framework_libs: true,
+ jni_libs: ["libjni"],
+ }
+
+ android_test {
+ name: "test_noembed",
+ no_framework_libs: true,
+ jni_libs: ["libjni"],
+ use_embedded_native_libs: false,
+ }
+
+ android_test_helper_app {
+ name: "test_helper",
+ no_framework_libs: true,
+ jni_libs: ["libjni"],
+ }
+
+ android_test_helper_app {
+ name: "test_helper_noembed",
+ no_framework_libs: true,
+ jni_libs: ["libjni"],
+ use_embedded_native_libs: false,
+ }
+ `)
+
+ testCases := []struct {
+ name string
+ packaged bool
+ compressed bool
+ }{
+ {"app", false, false},
+ {"app_noembed", false, false},
+ {"app_embed", true, false},
+ {"test", true, false},
+ {"test_noembed", true, true},
+ {"test_helper", true, false},
+ {"test_helper_noembed", true, true},
+ }
+
+ for _, test := range testCases {
+ t.Run(test.name, func(t *testing.T) {
+ app := ctx.ModuleForTests(test.name, "android_common")
+ jniLibZip := app.MaybeOutput("jnilibs.zip")
+ if g, w := (jniLibZip.Rule != nil), test.packaged; g != w {
+ t.Errorf("expected jni packaged %v, got %v", w, g)
+ }
+
+ if jniLibZip.Rule != nil {
+ if g, w := !strings.Contains(jniLibZip.Args["jarArgs"], "-L 0"), test.compressed; g != w {
+ t.Errorf("expected jni compressed %v, got %v", w, g)
+ }
+ }
+ })
+ }
+
+}
+
func TestCertificates(t *testing.T) {
testCases := []struct {
name string