Embed jni libs in vendor apks for treble-ized devices
JNI libs used by bundled APKs have been installed outside of the APK
(e.g. /system/lib and /vendor/lib) to save space because multiple APKs
may share the same set of JNI libs.
However, this causes problem for treble-ized devices where access to
/vendor/lib is prohibited for system processes including Java apps.
So, the JNI libs are embedded into the APK when the APK is installed to
/vendor partition and the device is fully treble-ized.
Bug: 37491282
Test: Move an APK and its JNI libraries to vendor partition by setting
LOCAL_PROPRIETARY_MODULE := true and build:
The jni lib does not exist under /system or /vendor. unzipping
the apk reveals the jni lib under ./lib/<abi> directory.
Change-Id: I8389761dfbd28d181869d79f0bf988a1e4df2fca
diff --git a/core/install_jni_libs.mk b/core/install_jni_libs.mk
index 625a8a2..35f4f55 100644
--- a/core/install_jni_libs.mk
+++ b/core/install_jni_libs.mk
@@ -18,9 +18,19 @@
ifneq ($(filter tests samples, $(LOCAL_MODULE_TAGS)),)
my_embed_jni := true
endif
-ifeq ($(filter $(TARGET_OUT)/% $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_OEM)/%, $(my_module_path)),)
-# If this app isn't to be installed to system partitions.
-my_embed_jni := true
+ifneq ($(BOARD_VNDK_VERSION),)
+ ifeq ($(filter $(TARGET_OUT)/%, $(my_module_path)),)
+ # If this app isn't to be installed to the system partition, and the device
+ # is fully treble-ized then jni libs are embedded, Otherwise, access to the
+ # directory where the lib is installed to (usually /vendor/lib) needs to be
+ # allowed for system processes, which is a Treble violation.
+ my_embed_jni := true
+ endif
+else
+ ifeq ($(filter $(TARGET_OUT)/% $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_OEM)/%, $(my_module_path)),)
+ # If this app isn't to be installed to system, vendor, or oem partitions.
+ my_embed_jni := true
+ endif
endif
jni_shared_libraries :=