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
This commit is contained in:
Dan Willemsen 2016-06-18 20:43:51 -07:00
parent 9cbe37e723
commit 048f56dfce
2 changed files with 22 additions and 0 deletions

View File

@ -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):=

View File

@ -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