Merge "Make privileged apps always keep uncompressed dex files." am: 3a5c65ef2f am: 65c8bc6695
am: 4ad5bbb35d

Change-Id: I669e96d79fc5dd7247ac75b6defe856ec74fe6d6
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 b27c69e..3c18a8c 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2726,6 +2726,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 254179c..c8a3b0a 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -633,6 +633,10 @@
 	@# 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
diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk
index 8caf0ee..01e3392 100644
--- a/core/prebuilt_internal.mk
+++ b/core/prebuilt_internal.mk
@@ -374,6 +374,9 @@
 $(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