OSDN Git Service

Error out if LOCAL_PREBUILT_JNI_LIBS and LOCAL_CERTIFICATE := PRESIGNED are used
authorNick Kralevich <nnk@google.com>
Sat, 18 Apr 2015 04:29:17 +0000 (21:29 -0700)
committerNick Kralevich <nnk@google.com>
Sat, 18 Apr 2015 22:11:36 +0000 (15:11 -0700)
LOCAL_PREBUILT_JNI_LIBS is an indication to the build system that
all shared libraries should be deleted from an APK, and the shared
libraries should be placed in the application's /system/app directory.

However, using this option isn't appropriate for pre-signed APKs.
Any attempt to delete files from a pre-signed APK will corrupt it's
signature or waste disk space.

Bug: 20247329
Bug: 8076853
Bug: 1162500
Change-Id: I89ce8f06d3889dd79dd9ffe86fc5fa60814498ad

core/install_jni_libs_internal.mk

index c28bb15..634fdf3 100644 (file)
@@ -85,6 +85,15 @@ ifdef my_extracted_jni_libs
 ifndef my_prebuilt_src_file
 $(error No prebuilt apk to extract prebuilt jni libraries $(my_extracted_jni_libs))
 endif
+ifeq ($(LOCAL_CERTIFICATE),PRESIGNED)
+$(warning Extracting files using LOCAL_PREBUILT_JNI_LIBS cannot be done while)
+$(warning using LOCAL_CERTIFICATE:=PRESIGNED, as this would corrupt)
+$(warning the APK or waste disk space. Instead, you should delete)
+$(warning LOCAL_PREBUILT_JNI_LIBS and use LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES:=true)
+$(warning This will allow loading of shared libraries directly from the APK,)
+$(warning eliminating the need to separately extract them.)
+$(error Failed to build: $(LOCAL_MODULE))
+endif
 # We use the first jni lib file as dependency.
 my_installed_prebuilt_jni := $(my_app_lib_path)/$(notdir $(firstword $(my_extracted_jni_libs)))
 $(my_installed_prebuilt_jni): PRIVATE_JNI_LIBS := $(my_extracted_jni_libs)