Make privileged apps always keep uncompressed dex files.

To ensure the verified boot work does not make ART run
dex code uncompressed in memory, make the build system
generate uncompressed dex files in APKs.

The alignment of STORE files in an APK is already handled.

bug: 30972906
bug: 63920015

Test: doing zipinfo on the produced apks after build.
Change-Id: I0ccdeae5d674b2a409a1343c4a14699c7bf0defb
This commit is contained in:
Nicolas Geoffray 2017-09-07 14:45:02 +01:00
parent f38900dc92
commit 09dfe6739a
4 changed files with 28 additions and 0 deletions

View file

@ -659,6 +659,15 @@ $(LOCAL_MODULE)-$(h_or_hc_or_t)$(my_32_64_bit_suffix) : $(my_all_targets)
endif
endif
###########################################################
# Ensure privileged applications always have LOCAL_PRIVILEGED_MODULE
###########################################################
ifndef LOCAL_PRIVILEGED_MODULE
ifneq (,$(filter $(TARGET_OUT_APPS_PRIVILEGED)/% $(TARGET_OUT_VENDOR_APPS_PRIVILEGED)/%,$(my_module_path)))
LOCAL_PRIVILEGED_MODULE := true
endif
endif
###########################################################
## NOTICE files
###########################################################

View file

@ -2717,6 +2717,18 @@ define remove-timestamps-from-package
$(hide) $(ZIPTIME) $@
endef
# Uncompress dex files embedded in an apk.
#
define uncompress-dexs
$(hide) if (zipinfo $@ '*.dex' 2>/dev/null | grep -v ' stor ' >/dev/null) ; then \
rm -rf $(dir $@)uncompresseddexs && mkdir $(dir $@)uncompresseddexs; \
unzip $@ '*.dex' -d $(dir $@)uncompresseddexs && \
zip -d $@ '*.dex' && \
( cd $(dir $@)uncompresseddexs && find -type f | sort | zip -D -X -0 ../$(notdir $@) -@ ) && \
rm -rf $(dir $@)uncompresseddexs; \
fi
endef
# Uncompress shared libraries embedded in an apk.
#
define uncompress-shared-libs

View file

@ -606,6 +606,10 @@ ifneq ($(BUILD_PLATFORM_ZIP),)
@# Keep a copy of apk with classes.dex unstripped
$(hide) cp -f $@ $(dir $@)package.dex.apk
endif # BUILD_PLATFORM_ZIP
ifeq (true,$(LOCAL_PRIVILEGED_MODULE))
@# No need to align, sign-package below will do it.
$(uncompress-dexs)
endif # LOCAL_PRIVILEGED_MODULE
ifneq (nostripping,$(LOCAL_DEX_PREOPT))
$(call dexpreopt-remove-classes.dex,$@)
endif

View file

@ -341,6 +341,9 @@ $(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs)
$(built_module) : $(my_prebuilt_src_file) | $(ZIPALIGN) $(SIGNAPK_JAR)
$(transform-prebuilt-to-target)
$(uncompress-shared-libs)
ifeq (true,$(LOCAL_PRIVILEGED_MODULE))
$(uncompress-dexs)
endif # LOCAL_PRIVILEGED_MODULE
ifdef LOCAL_DEX_PREOPT
ifneq ($(BUILD_PLATFORM_ZIP),)
@# Keep a copy of apk with classes.dex unstripped