summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/app_test.go38
-rw-r--r--java/java.go11
2 files changed, 49 insertions, 0 deletions
diff --git a/java/app_test.go b/java/app_test.go
index 92fe2244f..d6ba0f1dd 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -2043,6 +2043,44 @@ func TestJNIPackaging(t *testing.T) {
}
}
+func TestJNITranstiveDepsInstallation(t *testing.T) {
+ ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
+ android_app {
+ name: "app",
+ jni_libs: ["libjni"],
+ platform_apis: true,
+ }
+
+ cc_library {
+ name: "libjni",
+ shared_libs: ["libplatform"],
+ system_shared_libs: [],
+ stl: "none",
+ required: ["librequired"],
+ }
+
+ cc_library {
+ name: "libplatform",
+ system_shared_libs: [],
+ stl: "none",
+ }
+
+ cc_library {
+ name: "librequired",
+ system_shared_libs: [],
+ stl: "none",
+ }
+
+ `)
+
+ app := ctx.ModuleForTests("app", "android_common")
+ jniLibZip := app.Output("jnilibs.zip")
+ android.AssertPathsEndWith(t, "embedd jni lib mismatch", []string{"libjni.so"}, jniLibZip.Implicits)
+
+ install := app.Rule("Cp")
+ android.AssertPathsEndWith(t, "install dep mismatch", []string{"libplatform.so", "librequired.so"}, install.OrderOnly)
+}
+
func TestJNISDK(t *testing.T) {
ctx, _ := testJava(t, cc.GatherRequiredDepsForTest(android.Android)+`
cc_library {
diff --git a/java/java.go b/java/java.go
index 0df96a3a5..fc7e5c5a3 100644
--- a/java/java.go
+++ b/java/java.go
@@ -368,6 +368,17 @@ type dependencyTag struct {
static bool
}
+var _ android.SkipToTransitiveDepsTag = (*dependencyTag)(nil)
+
+func (depTag dependencyTag) SkipToTransitiveDeps() bool {
+ // jni_libs are not installed because they are always embedded into the app. However,
+ // transitive deps of jni_libs themselves should be installed along with the app.
+ if IsJniDepTag(depTag) {
+ return true
+ }
+ return false
+}
+
// installDependencyTag is a dependency tag that is annotated to cause the installed files of the
// dependency to be installed when the parent module is installed.
type installDependencyTag struct {