diff --git a/core/definitions.mk b/core/definitions.mk index 2ef7961fc..02781501e 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1663,6 +1663,7 @@ $(if $(PRIVATE_JAR_MANIFEST), \ jar -cfm $@ $(dir $@)/manifest.mf \ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \ $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .) +$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@)) endef define transform-java-to-classes.jar @@ -1723,6 +1724,7 @@ $(if $(PRIVATE_JAR_MANIFEST), \ jar -cfm $@ $(dir $@)/manifest.mf \ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \ $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .) +$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@)) $(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp endef @@ -1770,6 +1772,15 @@ $(hide) zip -qd $@ dummy $(hide) rm $(dir $@)dummy endef +# Copy an arhchive file and delete any class files and empty folders inside. +# $(1): the source archive file. +# $(2): the destination archive file. +define initialize-package-file +@mkdir -p $(dir $(2)) +$(hide) cp -f $(1) $(2) +$(hide) zip -qd $(2) "*.class" "*/" || true # Ignore the error when nothing to delete. +endef + #TODO: we kinda want to build different asset packages for # different configurations, then combine them later (or something). # Per-locale, etc. @@ -1821,24 +1832,12 @@ $(hide) zip -qj $@ $(dir $(PRIVATE_DEX_FILE))classes*.dex endef # Add java resources added by the current module. +# $(1) destination package # -define add-java-resources-to-package -$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(dir $@)jar-arg-list) -$(hide) jar uf $@ @$(dir $@)jar-arg-list -@rm -f $(dir $@)jar-arg-list -endef - -# Add java resources carried by static Java libraries. -# -define add-carried-java-resources -$(hide) if [ -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) ] ; then \ - java_res_jar_flags=$$(find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -type f -a -not -name "*.class" \ - | sed -e "s?^$(PRIVATE_CLASS_INTERMEDIATES_DIR)/? -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ?"); \ - if [ -n "$$java_res_jar_flags" ] ; then \ - echo $$java_res_jar_flags >$(dir $@)java_res_jar_flags; \ - jar uf $@ $$java_res_jar_flags; \ - fi; \ -fi +define add-java-resources-to +$(call dump-words-to-file, $(PRIVATE_EXTRA_JAR_ARGS), $(1).jar-arg-list) +$(hide) jar uf $(1) @$(1).jar-arg-list +@rm -f $(1).jar-arg-list endef # Sign a package using the specified key/cert. @@ -1882,7 +1881,6 @@ endef define transform-host-java-to-package @echo "host Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))" $(call compile-java,$(HOST_JAVAC),$(PRIVATE_BOOTCLASSPATH)) -$(if $(PRIVATE_EXTRA_JAR_ARGS), $(call add-java-resources-to-package)) endef ########################################################### diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index 6583dd72e..061511b0d 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -101,13 +101,10 @@ $(built_dex): $(full_classes_jar) $(DX) $(transform-classes.jar-to-dex) $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) $(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources) @echo "Host Jar: $(PRIVATE_MODULE) ($@)" - $(create-empty-package) + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@) $(add-dex-to-package) - $(add-carried-java-resources) -ifneq ($(extra_jar_args),) - $(add-java-resources-to-package) -endif USE_CORE_LIB_BOOTCLASSPATH := diff --git a/core/java_library.mk b/core/java_library.mk index 5f7c784ac..61dfef033 100644 --- a/core/java_library.mk +++ b/core/java_library.mk @@ -58,9 +58,6 @@ $(common_javalib.jar) : $(full_classes_jar) endif @echo "target Static Jar: $(PRIVATE_MODULE) ($@)" $(copy-file-to-target) -ifneq ($(extra_jar_args),) - $(add-java-resources-to-package) -endif $(LOCAL_BUILT_MODULE): $(common_javalib.jar) $(copy-file-to-target) @@ -68,14 +65,11 @@ $(LOCAL_BUILT_MODULE): $(common_javalib.jar) else # !LOCAL_IS_STATIC_JAVA_LIBRARY $(common_javalib.jar): PRIVATE_DEX_FILE := $(built_dex) +$(common_javalib.jar): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) $(common_javalib.jar) : $(built_dex) $(java_resource_sources) @echo "target Jar: $(PRIVATE_MODULE) ($@)" - $(create-empty-package) + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@) $(add-dex-to-package) - $(add-carried-java-resources) -ifneq ($(extra_jar_args),) - $(add-java-resources-to-package) -endif ifdef LOCAL_DEX_PREOPT ifneq ($(dexpreopt_boot_jar_module),) # boot jar diff --git a/core/package_internal.mk b/core/package_internal.mk index a6ad354b4..e16c68f23 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -320,7 +320,12 @@ endif # LOCAL_NO_STANDARD_LIBRARIES ifneq ($(full_classes_jar),) $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) +# Use the jarjar processed arhive as the initial package file. +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar) $(LOCAL_BUILT_MODULE): $(built_dex) +else +$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := +$(LOCAL_BUILT_MODULE): PRIVATE_SOURCE_ARCHIVE := endif # full_classes_jar include $(BUILD_SYSTEM)/install_jni_libs.mk @@ -381,17 +386,15 @@ endif endif $(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) @echo "target Package: $(PRIVATE_MODULE) ($@)" - $(create-empty-package) + $(if $(PRIVATE_SOURCE_ARCHIVE),\ + $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\ + $(create-empty-package)) $(add-assets-to-package) ifneq ($(jni_shared_libraries),) $(add-jni-shared-libs-to-package) endif ifneq ($(full_classes_jar),) $(add-dex-to-package) -endif - $(add-carried-java-resources) -ifneq ($(extra_jar_args),) - $(add-java-resources-to-package) endif $(sign-package) ifdef LOCAL_DEX_PREOPT