Revert "Revert "Make privileged apps always keep uncompressed dex files.""
bug: 30972906
bug: 63920015
Test: doing zipinfo on the produced apks after build.
Test: fugu build
This reverts commit f69441b76b3a7e44802e0f574debd1286da4fd85.
Change-Id: I6b029f2044385f3e3fa332091a9244cec79d2474
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 57ac23c..e7da560 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -660,6 +660,15 @@
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 ffeb663..a22e989 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2717,6 +2717,18 @@
$(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 11138db..7d9c7d4 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -606,6 +606,12 @@
@# 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 5a0ac37..24816e9 100644
--- a/core/prebuilt_internal.mk
+++ b/core/prebuilt_internal.mk
@@ -341,6 +341,11 @@
$(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