OSDN Git Service

Revert "Don't extract jni from prebuilt apks."
authorYing Wang <wangying@google.com>
Mon, 4 May 2015 18:39:46 +0000 (18:39 +0000)
committerYing Wang <wangying@google.com>
Mon, 4 May 2015 18:39:46 +0000 (18:39 +0000)
This reverts commit 3797466fbd31cc3ca5a1eddea64e7fdf0921ea67.

Bug: 20810492
Bug: 20811499
Change-Id: Ic922d9daccc4550db489c0f3d4ad6b4ff85b5e60

core/clear_vars.mk
core/definitions.mk
core/install_jni_libs.mk
core/install_jni_libs_internal.mk
core/package_internal.mk
core/prebuilt_internal.mk

index 7b3f1c5..eb133dc 100644 (file)
@@ -20,6 +20,7 @@ LOCAL_UNSTRIPPED_PATH:=
 LOCAL_MODULE_CLASS:=
 LOCAL_MODULE_SUFFIX:=
 LOCAL_PACKAGE_NAME:=
+LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES:=
 LOCAL_OVERRIDES_PACKAGES:=
 LOCAL_EXPORT_PACKAGE_RESOURCES:=
 LOCAL_MANIFEST_PACKAGE_NAME:=
index f674d9f..fc18ee3 100644 (file)
@@ -2097,7 +2097,8 @@ $(hide) mkdir -p $(addprefix $(dir $@)lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI))
 $(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\
   $(call _add-jni-shared-libs-to-package-per-abi,$(abi),\
     $(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES)))))
-$(hide) (cd $(dir $@) && zip -r -0 $(notdir $@) lib)
+$(hide) (cd $(dir $@) && zip -r \
+    $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-0,) $(notdir $@) lib)
 $(hide) rm -rf $(dir $@)lib
 endef
 
@@ -2143,22 +2144,21 @@ endef
 define align-package
 $(hide) mv $@ $@.unaligned
 $(hide) $(ZIPALIGN) \
-    -f -p \
+    -f \
+    $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-p,) \
     4 \
     $@.unaligned $@.aligned
 $(hide) mv $@.aligned $@
 endef
 
-# Uncompress shared libraries embedded in an apk.
-#
 define uncompress-shared-libs
-$(hide) if unzip -l $@ $(PRIVATE_EMBEDDED_JNI_LIBS) >/dev/null ; then \
-  rm -rf $(dir $@)uncompressedlibs && mkdir $(dir $@)uncompressedlibs; \
-  unzip $@ $(PRIVATE_EMBEDDED_JNI_LIBS) -d $(dir $@)uncompressedlibs && \
-  zip -d $@ 'lib/*.so' && \
-  ( cd $(dir $@)uncompressedlibs && zip -D -r -0 ../$(notdir $@) lib ) && \
-  rm -rf $(dir $@)uncompressedlibs; \
-  fi
+$(hide) rm -rf $(dir $@)/tmpworkdir
+$(hide) mv $@ $@.compressed
+$(hide) mkdir $(dir $@)/tmpworkdir
+$(hide) unzip $@.compressed 'lib/*.so' -d $(dir $@)/tmpworkdir
+$(hide) ( cd $(dir $@)/tmpworkdir && zip -D -r -0 ../$(notdir $@).compressed lib )
+$(hide) mv $@.compressed $@
+$(hide) rm -rf $(dir $@)/tmpworkdir
 endef
 
 define install-dex-debug
index 625a8a2..da3032d 100644 (file)
@@ -8,7 +8,7 @@
 #
 # Output variables:
 #   jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk;
-#   embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
+#   extracted_jni_libs, if we extract jni libs from prebuilt apk.
 #
 
 my_embed_jni :=
@@ -27,7 +27,7 @@ jni_shared_libraries :=
 jni_shared_libraries_abis :=
 # jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib>
 jni_shared_libraries_with_abis :=
-embedded_prebuilt_jni_libs :=
+extracted_jni_libs :=
 
 #######################################
 # For TARGET_ARCH
@@ -51,7 +51,7 @@ jni_shared_libraries += $(my_jni_shared_libraries)
 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
     $(my_jni_shared_libraries))
-embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
+extracted_jni_libs += $(my_extracted_jni_libs)
 
 # Include RS dynamically-generated libraries as well
 # TODO: Add multilib support once RS supports generating multilib libraries.
@@ -83,11 +83,11 @@ jni_shared_libraries += $(my_jni_shared_libraries)
 jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
 jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
     $(my_jni_shared_libraries))
-embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
+extracted_jni_libs += $(my_extracted_jni_libs)
 endif  # my_add_jni
 endif  # TARGET_2ND_ARCH
 
 jni_shared_libraries := $(strip $(jni_shared_libraries))
 jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis))
 jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis))
-embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))
+extracted_jni_libs := $(strip $(extracted_jni_libs))
index 16d0962..634fdf3 100644 (file)
@@ -9,7 +9,7 @@
 #
 # Output variables:
 #   my_jni_shared_libraries, my_jni_shared_libraries_abi, if we are going to embed the libraries into the apk;
-#   my_embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
+#   my_extracted_jni_libs, if we extract jni libs from prebuilt apk.
 #
 
 my_jni_shared_libraries := \
@@ -19,7 +19,7 @@ my_jni_shared_libraries := \
 
 # App-specific lib path.
 my_app_lib_path := $(dir $(LOCAL_INSTALLED_MODULE))lib/$(TARGET_$(my_2nd_arch_prefix)ARCH)
-my_embedded_prebuilt_jni_libs :=
+my_extracted_jni_libs :=
 
 ifdef my_embed_jni
 # App explicitly requires the prebuilt NDK stl shared libraies.
@@ -76,10 +76,34 @@ endif  # $(my_jni_shared_libraries) not empty
 endif  # my_embed_jni
 
 ifdef my_prebuilt_jni_libs
-# Files like @lib/<abi>/libfoo.so (path inside the apk) are JNI libs embedded prebuilt apk;
+# Install prebuilt JNI libs to the app specific lib path.
+# Files like @path/to/libfoo.so (path inside the apk) are JNI libs extracted from the prebuilt apk;
 # Files like path/to/libfoo.so (path relative to LOCAL_PATH) are prebuilts in the source tree.
-my_embedded_prebuilt_jni_libs := $(patsubst @%,%, \
+my_extracted_jni_libs := $(patsubst @%,%, \
     $(filter @%, $(my_prebuilt_jni_libs)))
+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)
+$(my_installed_prebuilt_jni): $(my_prebuilt_src_file)
+       @echo "Extract JNI libs ($@ <- $<)"
+       @mkdir -p $(dir $@)
+       $(hide) unzip -j -o -d $(dir $@) $< $(PRIVATE_JNI_LIBS) && touch $@
+
+$(LOCAL_INSTALLED_MODULE) : | $(my_installed_prebuilt_jni)
+endif
 
 # prebuilt JNI exsiting as separate source files.
 my_prebuilt_jni_libs := $(addprefix $(LOCAL_PATH)/, \
index 23648c1..fee484f 100644 (file)
@@ -392,6 +392,7 @@ $(LOCAL_BUILT_MODULE): $(AAPT) | $(ZIPALIGN)
 $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis)
 # PRIVATE_JNI_SHARED_LIBRARIES_ABI is a list of ABI names.
 $(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis)
+$(LOCAL_BUILT_MODULE): PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES)
 ifneq ($(TARGET_BUILD_APPS),)
     # Include all resources for unbundled apps.
     LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true
index 19fdad6..8d03746 100644 (file)
@@ -195,18 +195,14 @@ endif
 include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
 #######################################
 # Sign and align non-presigned .apks.
-
-# The embedded prebuilt jni to uncompress.
-ifndef embedded_prebuilt_jni_libs
-# No LOCAL_PREBUILT_JNI_LIBS, uncompress all.
-embedded_prebuilt_jni_libs := 'lib/*.so'
-endif
-$(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs)
-
+$(built_module) : PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES)
 $(built_module) : $(my_prebuilt_src_file) | $(ACP) $(ZIPALIGN) $(SIGNAPK_JAR)
        $(transform-prebuilt-to-target)
 ifneq ($(LOCAL_CERTIFICATE),PRESIGNED)
        @# Only strip out files if we can re-sign the package.
+ifdef extracted_jni_libs
+       $(hide) zip -d $@ 'lib/*.so'  # strip embedded JNI libraries.
+endif
 ifdef LOCAL_DEX_PREOPT
 ifneq (nostripping,$(LOCAL_DEX_PREOPT))
        $(call dexpreopt-remove-classes.dex,$@)
@@ -214,7 +210,9 @@ endif
 endif
        $(sign-package)
 endif
+ifeq ($(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES),true)
        $(uncompress-shared-libs)
+endif
        $(align-package)
 
 ###############################