From 048f56dfcee444f36a99cc3a6bdeed72c4e7e9ee Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Sat, 18 Jun 2016 20:43:51 -0700 Subject: [PATCH] Extract prebuilt APKs from zip files Since APKs are zip files, embedded APKs in other APKs can be extracted, installed, then optimized. DPI-based filenames can be used if LOCAL_DPI_VARIANTS is set. Bug: 29179775 Change-Id: Iab6388111522114ce9dc07057d59e3a89394cd6f --- core/clear_vars.mk | 2 ++ core/prebuilt_internal.mk | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 59e907b94..588661058 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -204,6 +204,8 @@ LOCAL_SHARED_ANDROID_LIBRARIES:= # Used to replace the installed file of a presigned prebuilt apk in PDK fusion build, # to avoid installing the presigned apks with classes.dex unstripped. LOCAL_REPLACE_PREBUILT_APK_INSTALLED:= +LOCAL_EXTRACT_APK:= +LOCAL_EXTRACT_DPI_APK:= # arch specific variables LOCAL_SRC_FILES_$(TARGET_ARCH):= diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index ee6842754..d4503738d 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -152,6 +152,8 @@ endif # my_strip_module not true ifeq ($(LOCAL_MODULE_CLASS),APPS) PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) +my_extract_apk := $(strip $(LOCAL_EXTRACT_APK)) + # Select dpi-specific source ifdef LOCAL_DPI_VARIANTS my_dpi := $(firstword $(filter $(LOCAL_DPI_VARIANTS),$(PRODUCT_AAPT_PREF_CONFIG) $(PRODUCT_AAPT_PREBUILT_DPI))) @@ -162,9 +164,27 @@ else my_prebuilt_dpi_file_stem := $(LOCAL_MODULE)_%.apk endif my_prebuilt_src_file := $(dir $(my_prebuilt_src_file))$(subst %,$(my_dpi),$(my_prebuilt_dpi_file_stem)) + +ifneq ($(strip $(LOCAL_EXTRACT_DPI_APK)),) +my_extract_apk := $(subst %,$(my_dpi),$(LOCAL_EXTRACT_DPI_APK)) +endif # LOCAL_EXTRACT_DPI_APK endif # my_dpi endif # LOCAL_DPI_VARIANTS +ifdef my_extract_apk +my_extracted_apk := $(intermediates)/extracted.apk + +$(my_extracted_apk): PRIVATE_EXTRACT := $(my_extract_apk) +$(my_extracted_apk): $(my_prebuilt_src_file) + @echo Extract APK: $@ + $(hide) mkdir -p $(dir $@) && rm -f $@ + $(hide) unzip -p $< $(PRIVATE_EXTRACT) >$@ + +my_prebuilt_src_file := $(my_extracted_apk) +my_extracted_apk := +my_extract_apk := +endif + rs_compatibility_jni_libs := include $(BUILD_SYSTEM)/install_jni_libs.mk