diff --git a/core/base_rules.mk b/core/base_rules.mk index 57ac23c98..e7da560c9 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -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 ########################################################### diff --git a/core/definitions.mk b/core/definitions.mk index ffeb66381..a22e98996 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -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 diff --git a/core/package_internal.mk b/core/package_internal.mk index 11138db19..7d9c7d4d3 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -606,6 +606,12 @@ ifneq ($(BUILD_PLATFORM_ZIP),) @# Keep a copy of apk with classes.dex unstripped $(hide) cp -f $@ $(dir $@)package.dex.apk endif # BUILD_PLATFORM_ZIP +ifneq (true,$(DONT_UNCOMPRESS_PRIV_APPS_DEXS)) +ifeq (true,$(LOCAL_PRIVILEGED_MODULE)) + @# No need to align, sign-package below will do it. + $(uncompress-dexs) +endif # LOCAL_PRIVILEGED_MODULE +endif # DONT_UNCOMPRESS_PRIV_APPS_DEXS ifneq (nostripping,$(LOCAL_DEX_PREOPT)) $(call dexpreopt-remove-classes.dex,$@) endif diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index 5a0ac3751..24816e955 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -341,6 +341,11 @@ $(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) +ifneq (true,$(DONT_UNCOMPRESS_PRIV_APPS_DEXS)) +ifeq (true,$(LOCAL_PRIVILEGED_MODULE)) + $(uncompress-dexs) +endif # LOCAL_PRIVILEGED_MODULE +endif # DONT_UNCOMPRESS_PRIV_APPS_DEXS ifdef LOCAL_DEX_PREOPT ifneq ($(BUILD_PLATFORM_ZIP),) @# Keep a copy of apk with classes.dex unstripped