From e6210f6eb2bd483118aeab93865bb14485515320 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 25 Feb 2019 22:21:24 -0800 Subject: [PATCH] Remove AAPT1 support AAPT2 is used everywhere now, remove support for AAPT1. Also removes dpi_specific_apk.mk, it was never updated to use AAPT2 and has been generating bad APKs (resource ID mismatch between the dex files and the resources) since AAPT2 was made the default in May 2018 (I9b67fd2a9b3234798b2aac879b5242c2097b3863). Bug: 80450981 Test: m checkbuild Change-Id: I2ff768897360ff866dbae5562455bab22be270f7 Merged-In: I2ff768897360ff866dbae5562455bab22be270f7 --- core/android_manifest.mk | 6 -- core/clear_vars.mk | 2 +- core/definitions.mk | 73 +------------- core/dpi_specific_apk.mk | 77 -------------- core/force_aapt2.mk | 70 ++++++------- core/java.mk | 6 +- core/java_common.mk | 7 -- core/java_prebuilt_internal.mk | 7 +- core/package_internal.mk | 179 ++++++++------------------------- core/soong_app_prebuilt.mk | 2 +- core/static_java_library.mk | 76 +++++--------- 11 files changed, 104 insertions(+), 401 deletions(-) delete mode 100644 core/dpi_specific_apk.mk diff --git a/core/android_manifest.mk b/core/android_manifest.mk index 931b1b187..bd5772f52 100644 --- a/core/android_manifest.mk +++ b/core/android_manifest.mk @@ -23,12 +23,6 @@ ifndef LOCAL_DONT_MERGE_MANIFESTS $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/manifest/AndroidManifest.xml) endif -# With aapt2, we'll link in the built resource from the AAR. -ifneq ($(LOCAL_USE_AAPT2),true) - LOCAL_RESOURCE_DIR += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ - $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/res) -endif - full_android_manifest := $(intermediates.COMMON)/manifest/AndroidManifest.xml ifneq (,$(strip $(my_full_libs_manifest_files))) diff --git a/core/clear_vars.mk b/core/clear_vars.mk index d67c9f86b..fafdce68c 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -291,7 +291,7 @@ LOCAL_TIDY_FLAGS:= LOCAL_UNCOMPRESS_DEX:= LOCAL_UNINSTALLABLE_MODULE:= LOCAL_UNSTRIPPED_PATH:= -LOCAL_USE_AAPT2:=$(USE_AAPT2) +LOCAL_USE_AAPT2:= LOCAL_USE_CLANG_LLD:= LOCAL_USE_VNDK:= LOCAL_USES_LIBRARIES:= diff --git a/core/definitions.mk b/core/definitions.mk index 7e44a47cc..1f5c5ce4d 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1846,42 +1846,6 @@ endef # b/37750224 AAPT_ASAN_OPTIONS := ASAN_OPTIONS=detect_leaks=0 -# TODO: Right now we generate the asset resources twice, first as part -# of generating the Java classes, then at the end when packaging the final -# assets. This should be changed to do one of two things: (1) Don't generate -# any resource files the first time, only create classes during that stage; -# or (2) Don't use the -c flag with the second stage, instead taking the -# resource files from the first stage as additional input. My original intent -# was to use approach (2), but this requires a little more work in the tool. -# Maybe we should just use approach (1). - -# This rule creates the R.java and Manifest.java files, both of which -# are PRODUCT-neutral. Don't pass PRIVATE_PRODUCT_AAPT_CONFIG to this invocation. -define create-resource-java-files -@mkdir -p $(dir $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) -rm -rf $(PRIVATE_JAVA_GEN_DIR) -mkdir -p $(PRIVATE_JAVA_GEN_DIR) -$(hide) $(AAPT_ASAN_OPTIONS) $(AAPT) package $(PRIVATE_AAPT_FLAGS) -m \ - $(eval # PRIVATE_PRODUCT_AAPT_CONFIG is intentionally missing-- see comment.) \ - $(addprefix -J , $(PRIVATE_JAVA_GEN_DIR)) \ - $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \ - $(addprefix -P , $(PRIVATE_RESOURCE_PUBLICS_OUTPUT)) \ - $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \ - $(addprefix -A , $(PRIVATE_ASSET_DIR)) \ - $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \ - $(addprefix -G , $(PRIVATE_PROGUARD_OPTIONS_FILE)) \ - $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ - $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ - $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \ - $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(APPS_DEFAULT_VERSION_NAME)) \ - $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ - $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ - --skip-symbols-without-default-localization -$(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_GEN_DIR) -# So that we re-run aapt when the list of input files change -$(hide) echo $(PRIVATE_RESOURCE_LIST) >/dev/null -endef - # Search for generated R.java/Manifest.java in $1, copy the found R.java as $2. # Also copy them to a central 'R' directory to make it easier to add the files to an IDE. define find-generated-R.java @@ -2246,37 +2210,6 @@ $(hide) $(DX_COMMAND) $(DEX_FLAGS) \ $(hide) rm -f $(dir $@)d8_input.jar endef -#TODO: we kinda want to build different asset packages for -# different configurations, then combine them later (or something). -# Per-locale, etc. -# A list of dynamic and static parameters; build layers for -# dynamic params that lay over the static ones. -#TODO: update the manifest to point to the package file -#Note that the version numbers are given to aapt as simple default -#values; applications can override these by explicitly stating -#them in their manifest. -# $(1) the package file -define create-assets-package -$(hide) $(AAPT_ASAN_OPTIONS) $(AAPT) package $(PRIVATE_AAPT_FLAGS) \ - $(addprefix -c , $(PRIVATE_PRODUCT_AAPT_CONFIG)) \ - $(addprefix --preferred-density , $(PRIVATE_PRODUCT_AAPT_PREF_CONFIG)) \ - $(addprefix -M , $(PRIVATE_ANDROID_MANIFEST)) \ - $(addprefix -S , $(PRIVATE_RESOURCE_DIR)) \ - $(addprefix -A , $(PRIVATE_ASSET_DIR)) \ - $(addprefix -I , $(PRIVATE_AAPT_INCLUDES)) \ - $(addprefix --min-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ - $(addprefix --target-sdk-version , $(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ - $(if $(filter --product,$(PRIVATE_AAPT_FLAGS)),,$(addprefix --product , $(PRIVATE_TARGET_AAPT_CHARACTERISTICS))) \ - $(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \ - $(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(APPS_DEFAULT_VERSION_NAME)) \ - $(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \ - $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \ - --skip-symbols-without-default-localization \ - -F $(1) -# So that we re-run aapt when the list of input files change -$(hide) echo $(PRIVATE_RESOURCE_LIST) >/dev/null -endef - # We need the extra blank line, so that the command will be on a separate line. # $(1): the package # $(2): the ABI name @@ -2381,16 +2314,14 @@ endef ifeq ($(HOST_OS),linux) # Runs appcompat and store logs in $(PRODUCT_OUT)/appcompat define extract-package -$(if $(filter aapt2, $(1)), \ - $(AAPT2) dump $@ | awk -F ' |=' '/^Package/{print $$3}' >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log &&, \ - $(AAPT) dump badging $@ | awk -F \' '/^package/{print $$2}' >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log &&) +$(AAPT2) dump $@ | awk -F ' |=' '/^Package/{print $$3}' >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && endef define appcompat-header $(hide) \ mkdir -p $(PRODUCT_OUT)/appcompat && \ rm -f $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ echo -n "Package name: " >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ - $(call extract-package, $(1)) \ + $(extract-package) \ echo "Module name in Android tree: $(PRIVATE_MODULE)" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ echo "Local path in Android tree: $(PRIVATE_PATH)" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ echo "Install path on $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT): $(PRIVATE_INSTALLED_MODULE)" >> $(PRODUCT_OUT)/appcompat/$(PRIVATE_MODULE).log && \ diff --git a/core/dpi_specific_apk.mk b/core/dpi_specific_apk.mk deleted file mode 100644 index ad073c7ee..000000000 --- a/core/dpi_specific_apk.mk +++ /dev/null @@ -1,77 +0,0 @@ -# Set up rules to build dpi-specific apk, with whatever else from the base apk. -# Input variable: my_dpi, and all other variables set up in package_internal.mk. -# - -dpi_apk_name := $(LOCAL_MODULE)_$(my_dpi) -dpi_intermediate := $(call intermediates-dir-for,APPS,$(dpi_apk_name)) -built_dpi_apk := $(dpi_intermediate)/package.apk -additional_certificates := $(foreach c,$(LOCAL_ADDITIONAL_CERTIFICATES), $(c).x509.pem $(c).pk8) - -# Set up all the target-specific variables. -$(built_dpi_apk): PRIVATE_MODULE := $(dpi_apk_name) -$(built_dpi_apk): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --pseudo-localize $($(LOCAL_PACKAGE_NAME)_aapt_flags_$(my_dpi)) -# Clear PRIVATE_PRODUCT_AAPT_CONFIG to include everything by default. -$(built_dpi_apk): PRIVATE_PRODUCT_AAPT_CONFIG := -$(built_dpi_apk): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := $(my_dpi) -$(built_dpi_apk): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) -$(built_dpi_apk): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR) -$(built_dpi_apk): PRIVATE_ASSET_DIR := $(LOCAL_ASSET_DIR) -$(built_dpi_apk): PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports) -$(built_dpi_apk): PRIVATE_RESOURCE_LIST := $(all_res_assets) -$(built_dpi_apk): PRIVATE_DEFAULT_APP_TARGET_SDK := $(call module-target-sdk-version) -$(built_dpi_apk): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANIFEST_PACKAGE_NAME) -$(built_dpi_apk): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_INSTRUMENTATION_FOR) -$(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis) -$(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis) -$(built_dpi_apk): PRIVATE_PRIVATE_KEY := $(private_key) -$(built_dpi_apk): PRIVATE_CERTIFICATE := $(certificate) -$(built_dpi_apk): $(additional_certificates) -$(built_dpi_apk): PRIVATE_ADDITIONAL_CERTIFICATES := $(additional_certificates) - -$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := -ifneq ($(full_classes_jar),) -$(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex) -# Use the jarjar processed arhive as the initial package file. -$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) -$(built_dpi_apk): $(built_dex) -else -$(built_dpi_apk): PRIVATE_DEX_FILE := -endif # full_classes_jar - -# Set up dependenncies and the build recipe. -$(built_dpi_apk) : $(R_file_stamp) -$(built_dpi_apk) : $(all_library_res_package_export_deps) -$(built_dpi_apk) : $(private_key) $(certificate) $(SIGNAPK_JAR) -$(built_dpi_apk) : $(AAPT) -$(built_dpi_apk) : $(MERGE_ZIPS) $(SOONG_ZIP) $(ZIP2ZIP) -$(built_dpi_apk) : $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest) - @echo "target Package: $(PRIVATE_MODULE) ($@)" - rm -rf $@.parts - mkdir -p $@.parts - $(call create-assets-package,$@.parts/apk.zip) -ifneq ($(jni_shared_libraries),) - $(call create-jni-shared-libs-package,$@.parts/jni.zip) -endif -ifeq ($(full_classes_jar),) -# We don't build jar, need to add the Java resources here. - $(if $(PRIVATE_EXTRA_JAR_ARGS),$(call create-java-resources-jar,$@.parts/res.zip)) -else - $(call create-dex-jar,$@.parts/dex.zip,$(PRIVATE_DEX_FILE)) - $(call extract-resources-jar,$@.parts/res.zip,$(PRIVATE_SOURCE_ARCHIVE)) -endif - $(MERGE_ZIPS) $@ $@.parts/*.zip - rm -rf $@.parts - $(sign-package) - -# Set up global variables to register this apk to the higher-level dependency graph. -ALL_MODULES += $(dpi_apk_name) -ALL_MODULES.$(dpi_apk_name).CLASS := APPS -ALL_MODULES.$(dpi_apk_name).BUILT := $(built_dpi_apk) -ALL_MODULES.$(dpi_apk_name).TARGET_BUILT := $(built_dpi_apk) -PACKAGES := $(PACKAGES) $(dpi_apk_name) -PACKAGES.$(dpi_apk_name).PRIVATE_KEY := $(private_key) -PACKAGES.$(dpi_apk_name).CERTIFICATE := $(certificate) - -# Phony targets used by "apps_only". -.PHONY: $(dpi_apk_name) -$(dpi_apk_name) : $(built_dpi_apk) diff --git a/core/force_aapt2.mk b/core/force_aapt2.mk index db2e60f06..816138a5b 100644 --- a/core/force_aapt2.mk +++ b/core/force_aapt2.mk @@ -14,50 +14,40 @@ # limitations under the License. # -# Including this makefile will force AAPT2 on if FORCE_AAPT2==true, +# Including this makefile will force AAPT2 on, # rewriting some properties to convert standard AAPT usage to AAPT2. -ifneq ($(FORCE_AAPT2),false) - ifeq ($(LOCAL_USE_AAPT2),) - # Force AAPT2 on - LOCAL_USE_AAPT2 := true - # Filter out support library resources - LOCAL_RESOURCE_DIR := $(filter-out \ - prebuilts/sdk/current/% \ - frameworks/support/%,\ - $(LOCAL_RESOURCE_DIR)) - # Filter out unnecessary aapt flags - ifneq (,$(filter --extra-packages,$(LOCAL_AAPT_FLAGS))) - LOCAL_AAPT_FLAGS := $(subst --extra-packages=,--extra-packages$(space), \ - $(filter-out \ - --extra-packages=android.support.% \ - --extra-packages=androidx.%, \ - $(subst --extra-packages$(space),--extra-packages=,$(LOCAL_AAPT_FLAGS)))) - ifeq (,$(filter --extra-packages,$(LOCAL_AAPT_FLAGS))) - LOCAL_AAPT_FLAGS := $(filter-out --auto-add-overlay,$(LOCAL_AAPT_FLAGS)) - endif - endif - - # AAPT2 is pickier about missing resources. Support library may have references to resources - # added in current, so always treat LOCAL_SDK_VERSION as LOCAL_SDK_RES_VERSION := current. - ifdef LOCAL_SDK_VERSION - LOCAL_SDK_RES_VERSION := current - endif - - ifeq (,$(strip $(LOCAL_MANIFEST_FILE)$(LOCAL_FULL_MANIFEST_FILE))) - ifeq (,$(wildcard $(LOCAL_PATH)/AndroidManifest.xml)) - # work around missing manifests by creating a default one - LOCAL_FULL_MANIFEST_FILE := $(call local-intermediates-dir,COMMON)/DefaultManifest.xml - $(call create-default-manifest-file,$(LOCAL_FULL_MANIFEST_FILE),$(call module-min-sdk-version)) - endif - endif - endif +ifeq ($(LOCAL_USE_AAPT2),false) + $(call pretty-error, LOCAL_USE_AAPT2 := false is no longer supported) endif -ifneq ($(LOCAL_USE_AAPT2),true) - ifneq ($(LOCAL_USE_AAPT2),false) - ifneq ($(LOCAL_USE_AAPT2),) - $(call pretty-error,Invalid value for LOCAL_USE_AAPT2: "$(LOCAL_USE_AAPT2)") +# Filter out support library resources +LOCAL_RESOURCE_DIR := $(filter-out \ + prebuilts/sdk/current/% \ + frameworks/support/%,\ + $(LOCAL_RESOURCE_DIR)) +# Filter out unnecessary aapt flags +ifneq (,$(filter --extra-packages,$(LOCAL_AAPT_FLAGS))) + LOCAL_AAPT_FLAGS := $(subst --extra-packages=,--extra-packages$(space), \ + $(filter-out \ + --extra-packages=android.support.% \ + --extra-packages=androidx.%, \ + $(subst --extra-packages$(space),--extra-packages=,$(LOCAL_AAPT_FLAGS)))) + ifeq (,$(filter --extra-packages,$(LOCAL_AAPT_FLAGS))) + LOCAL_AAPT_FLAGS := $(filter-out --auto-add-overlay,$(LOCAL_AAPT_FLAGS)) endif +endif + +# AAPT2 is pickier about missing resources. Support library may have references to resources +# added in current, so always treat LOCAL_SDK_VERSION as LOCAL_SDK_RES_VERSION := current. +ifdef LOCAL_SDK_VERSION + LOCAL_SDK_RES_VERSION := current +endif + +ifeq (,$(strip $(LOCAL_MANIFEST_FILE)$(LOCAL_FULL_MANIFEST_FILE))) + ifeq (,$(wildcard $(LOCAL_PATH)/AndroidManifest.xml)) + # work around missing manifests by creating a default one + LOCAL_FULL_MANIFEST_FILE := $(call local-intermediates-dir,COMMON)/DefaultManifest.xml + $(call create-default-manifest-file,$(LOCAL_FULL_MANIFEST_FILE),$(call module-min-sdk-version)) endif endif diff --git a/core/java.mk b/core/java.mk index c3787ae3c..66431e952 100644 --- a/core/java.mk +++ b/core/java.mk @@ -422,10 +422,8 @@ ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),) common_proguard_flags += -dontshrink # don't shrink tests by default endif # test package ifneq ($(LOCAL_PROGUARD_ENABLED),custom) - ifeq ($(LOCAL_USE_AAPT2),true) - common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\ - $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags) - endif + common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\ + $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags) endif ifneq ($(common_proguard_flag_files),) common_proguard_flags += $(addprefix -include , $(common_proguard_flag_files)) diff --git a/core/java_common.mk b/core/java_common.mk index f5da12070..db5b6c382 100644 --- a/core/java_common.mk +++ b/core/java_common.mk @@ -534,13 +534,6 @@ my_warn_types := my_allowed_types := java:sdk java:system java:platform java:core endif -ifdef LOCAL_AAPT2_ONLY -my_link_type += aapt2_only -endif -ifeq ($(LOCAL_USE_AAPT2),true) -my_allowed_types += aapt2_only -endif - my_link_deps := $(addprefix JAVA_LIBRARIES:,$(LOCAL_STATIC_JAVA_LIBRARIES) $(LOCAL_JAVA_LIBRARIES)) my_link_deps += $(addprefix APPS:,$(apk_libraries)) diff --git a/core/java_prebuilt_internal.mk b/core/java_prebuilt_internal.mk index 8a919ff72..31aae835e 100644 --- a/core/java_prebuilt_internal.mk +++ b/core/java_prebuilt_internal.mk @@ -172,11 +172,6 @@ $(common_javalib_jar) : $(common_classes_jar) include $(BUILD_SYSTEM)/force_aapt2.mk -ifdef LOCAL_AAPT2_ONLY -LOCAL_USE_AAPT2 := true -endif - -ifeq ($(LOCAL_USE_AAPT2),true) ifneq ($(my_src_aar),) $(intermediates.COMMON)/export_proguard_flags : $(my_src_proguard_options) @@ -229,7 +224,7 @@ include $(BUILD_SYSTEM)/aapt2.mk # Make sure my_res_package is created when you run mm/mmm. $(built_module) : $(my_res_package) endif # $(my_src_aar) -endif # LOCAL_USE_AAPT2 + # make sure the classes.jar and javalib.jar are built before $(LOCAL_BUILT_MODULE) $(built_module) : $(common_javalib_jar) diff --git a/core/package_internal.mk b/core/package_internal.mk index e27f6cecf..493a0f102 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -171,12 +171,7 @@ ifneq ($(all_assets),) need_compile_asset := true endif -ifdef LOCAL_AAPT2_ONLY -LOCAL_USE_AAPT2 := true -endif - my_res_package := -ifeq ($(LOCAL_USE_AAPT2),true) # In aapt2 the last takes precedence. my_resource_dirs := $(call reverse-list,$(LOCAL_RESOURCE_DIR)) my_res_dir := @@ -210,30 +205,12 @@ all_resources := $(strip $(my_res_resources) $(my_overlay_resources)) my_res_package := $(intermediates)/package-res.apk LOCAL_INTERMEDIATE_TARGETS += $(my_res_package) -ifeq ($(LOCAL_USE_AAPT2),true) - my_bundle_module := $(intermediates)/base.zip - LOCAL_INTERMEDIATE_TARGETS += $(my_bundle_module) -endif +my_bundle_module := $(intermediates)/base.zip +LOCAL_INTERMEDIATE_TARGETS += $(my_bundle_module) # Always run aapt2, because we need to at least compile the AndroidManifest.xml. need_compile_res := true -else # LOCAL_USE_AAPT2 -all_resources := $(strip \ - $(foreach dir, $(LOCAL_RESOURCE_DIR), \ - $(addprefix $(dir)/, \ - $(patsubst res/%,%, \ - $(call find-subdir-assets,$(dir)) \ - ) \ - ) \ - )) - -ifdef LOCAL_PACKAGE_SPLITS -LOCAL_AAPT_FLAGS += $(addprefix --split ,$(LOCAL_PACKAGE_SPLITS)) -endif - -endif # LOCAL_USE_AAPT2 - ifneq ($(all_resources),) need_compile_res := true endif @@ -369,71 +346,24 @@ $(R_file_stamp) $(my_res_package): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_MANI $(R_file_stamp) $(my_res_package): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_MANIFEST_INSTRUMENTATION_FOR) ############################### -## AAPT/AAPT2 +## AAPT2 -ifeq ($(LOCAL_USE_AAPT2),true) - my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res - ifneq (,$(filter-out current,$(renderscript_target_api))) - ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true) - my_generated_res_zips := $(rs_generated_res_zip) - endif # renderscript_target_api < 21 - endif # renderscript_target_api is set - my_asset_dirs := $(LOCAL_ASSET_DIR) - my_full_asset_paths := $(all_assets) +my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res +ifneq (,$(filter-out current,$(renderscript_target_api))) + ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true) + my_generated_res_zips := $(rs_generated_res_zip) + endif # renderscript_target_api < 21 +endif # renderscript_target_api is set +my_asset_dirs := $(LOCAL_ASSET_DIR) +my_full_asset_paths := $(all_assets) - # Add AAPT2 link specific flags. - $(my_res_package): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) - ifndef LOCAL_AAPT_NAMESPACES - $(my_res_package): PRIVATE_AAPT_FLAGS += --no-static-lib-packages - endif +# Add AAPT2 link specific flags. +$(my_res_package): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) +ifndef LOCAL_AAPT_NAMESPACES + $(my_res_package): PRIVATE_AAPT_FLAGS += --no-static-lib-packages +endif - include $(BUILD_SYSTEM)/aapt2.mk -else # LOCAL_USE_AAPT2 - - my_srcjar := $(intermediates.COMMON)/aapt.srcjar - LOCAL_SRCJARS += $(my_srcjar) - $(R_file_stamp): PRIVATE_SRCJAR := $(my_srcjar) - $(R_file_stamp): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt - $(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar) - # Since we don't know where the real R.java file is going to end up, - # we need to use another file to stand in its place. We'll just - # copy the generated file to src/R.stamp, which means it will - # have the same contents and timestamp as the actual file. - # - # At the same time, this will copy the R.java file to a central - # 'R' directory to make it easier to add the files to an IDE. - # - - $(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := \ - $(intermediates.COMMON)/public_resources.xml - $(R_file_stamp): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file) - $(R_file_stamp): PRIVATE_RESOURCE_LIST := $(all_res_assets) - $(R_file_stamp): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT) $(SOONG_ZIP) | $(ACP) - @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" - @rm -rf $@ && mkdir -p $(dir $@) - $(create-resource-java-files) - $(call find-generated-R.java,$(PRIVATE_JAVA_GEN_DIR),$@) - - $(proguard_options_file): $(R_file_stamp) - - ifdef LOCAL_EXPORT_PACKAGE_RESOURCES - # Put this module's resources into a PRODUCT-agnositc package that - # other packages can use to build their own PRODUCT-agnostic R.java (etc.) - # files. - resource_export_package := $(intermediates.COMMON)/package-export.apk - $(R_file_stamp): $(resource_export_package) - - # create-assets-package looks at PRODUCT_AAPT_CONFIG, but this target - # can't know anything about PRODUCT. Clear it out just for this target. - $(resource_export_package): PRIVATE_PRODUCT_AAPT_CONFIG := - $(resource_export_package): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := - $(resource_export_package): PRIVATE_RESOURCE_LIST := $(all_res_assets) - $(resource_export_package): $(all_res_assets) $(full_android_manifest) $(rs_generated_res_zip) $(AAPT) - @echo "target Export Resources: $(PRIVATE_MODULE) ($@)" - $(call create-assets-package,$@) - endif - -endif # LOCAL_USE_AAPT2 +include $(BUILD_SYSTEM)/aapt2.mk endif # need_compile_res @@ -496,9 +426,7 @@ $(resource_export_package) $(R_file_stamp) $(LOCAL_BUILT_MODULE): $(all_library_ $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports) -ifeq ($(LOCAL_USE_AAPT2),true) $(my_res_package) : $(all_library_res_package_export_deps) -endif # These four are set above for $(R_stamp_file) and $(my_res_package), but # $(LOCAL_BUILT_MODULE) is not set before java.mk, so they have to be set again @@ -595,13 +523,8 @@ endif $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/resources $(LOCAL_BUILT_MODULE) : $(jni_shared_libraries) $(LOCAL_BUILT_MODULE) : $(JAR_ARGS) $(SOONG_ZIP) $(MERGE_ZIPS) $(ZIP2ZIP) -ifeq ($(LOCAL_USE_AAPT2),true) $(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package) $(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP) -else -$(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_LIST := $(all_res_assets) -$(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) $(ZIPALIGN) -endif # LOCAL_USE_AAPT2 ifdef LOCAL_COMPRESSED_MODULE $(LOCAL_BUILT_MODULE) : $(MINIGZIP) endif @@ -622,11 +545,7 @@ $(LOCAL_BUILT_MODULE): @echo "target Package: $(PRIVATE_MODULE) ($@)" rm -rf $@.parts mkdir -p $@.parts -ifeq ($(LOCAL_USE_AAPT2),true) cp -f $(PRIVATE_RES_PACKAGE) $@.parts/apk.zip -else # ! LOCAL_USE_AAPT2 - $(call create-assets-package,$@.parts/apk.zip) -endif # LOCAL_USE_AAPT2 ifneq ($(jni_shared_libraries),) $(call create-jni-shared-libs-package,$@.parts/jni.zip,$(PRIVATE_USE_EMBEDDED_NATIVE_LIBS)) endif @@ -645,11 +564,7 @@ ifeq (true, $(LOCAL_UNCOMPRESS_DEX)) endif # Run appcompat before stripping the classes.dex file. ifeq ($(module_run_appcompat),true) -ifeq ($(LOCAL_USE_AAPT2),true) - $(call appcompat-header, aapt2) -else $(appcompat-header) -endif $(run-appcompat) endif # module_run_appcompat ifdef LOCAL_DEX_PREOPT @@ -665,63 +580,57 @@ ifdef LOCAL_COMPRESSED_MODULE $(compress-package) endif # LOCAL_COMPRESSED_MODULE -ifeq ($(LOCAL_USE_AAPT2),true) - my_package_res_pb := $(intermediates)/package-res.pb.apk - $(my_package_res_pb): $(my_res_package) $(AAPT2) +my_package_res_pb := $(intermediates)/package-res.pb.apk +$(my_package_res_pb): $(my_res_package) $(AAPT2) $(AAPT2) convert --output-format proto $< -o $@ - $(my_bundle_module): $(my_package_res_pb) - $(my_bundle_module): PRIVATE_RES_PACKAGE := $(my_package_res_pb) +$(my_bundle_module): $(my_package_res_pb) +$(my_bundle_module): PRIVATE_RES_PACKAGE := $(my_package_res_pb) - $(my_bundle_module): $(jni_shared_libraries) - $(my_bundle_module): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis) - $(my_bundle_module): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis) +$(my_bundle_module): $(jni_shared_libraries) +$(my_bundle_module): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis) +$(my_bundle_module): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis) - ifneq ($(full_classes_jar),) - $(my_bundle_module): PRIVATE_DEX_FILE := $(built_dex) - # Use the jarjar processed archive as the initial package file. - $(my_bundle_module): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) - $(my_bundle_module): $(built_dex) - else - $(my_bundle_module): PRIVATE_DEX_FILE := - $(my_bundle_module): PRIVATE_SOURCE_ARCHIVE := - endif # full_classes_jar +ifneq ($(full_classes_jar),) + $(my_bundle_module): PRIVATE_DEX_FILE := $(built_dex) + # Use the jarjar processed archive as the initial package file. + $(my_bundle_module): PRIVATE_SOURCE_ARCHIVE := $(full_classes_pre_proguard_jar) + $(my_bundle_module): $(built_dex) +else + $(my_bundle_module): PRIVATE_DEX_FILE := + $(my_bundle_module): PRIVATE_SOURCE_ARCHIVE := +endif # full_classes_jar - $(my_bundle_module): $(MERGE_ZIPS) $(SOONG_ZIP) $(ZIP2ZIP) +$(my_bundle_module): $(MERGE_ZIPS) $(SOONG_ZIP) $(ZIP2ZIP) @echo "target Bundle: $(PRIVATE_MODULE) ($@)" rm -rf $@.parts mkdir -p $@.parts $(ZIP2ZIP) -i $(PRIVATE_RES_PACKAGE) -o $@.parts/apk.zip AndroidManifest.xml:manifest/AndroidManifest.xml resources.pb "res/**/*" "assets/**/*" - ifneq ($(jni_shared_libraries),) + ifneq ($(jni_shared_libraries),) $(call create-jni-shared-libs-package,$@.parts/jni.zip) - endif - ifeq ($(full_classes_jar),) - # We don't build jar, need to add the Java resources here. + endif + ifeq ($(full_classes_jar),) + # We don't build jar, need to add the Java resources here. $(if $(PRIVATE_EXTRA_JAR_ARGS),\ $(call create-java-resources-jar,$@.parts/res.zip) && \ $(ZIP2ZIP) -i $@.parts/res.zip -o $@.parts/res.zip.tmp "**/*:root/" && \ mv -f $@.parts/res.zip.tmp $@.parts/res.zip) - else # full_classes_jar + else # full_classes_jar $(call create-dex-jar,$@.parts/dex.zip,$(PRIVATE_DEX_FILE)) $(ZIP2ZIP) -i $@.parts/dex.zip -o $@.parts/dex.zip.tmp "classes*.dex:dex/" mv -f $@.parts/dex.zip.tmp $@.parts/dex.zip $(call extract-resources-jar,$@.parts/res.zip,$(PRIVATE_SOURCE_ARCHIVE)) $(ZIP2ZIP) -i $@.parts/res.zip -o $@.parts/res.zip.tmp "**/*:root/" mv -f $@.parts/res.zip.tmp $@.parts/res.zip - endif # full_classes_jar + endif # full_classes_jar $(MERGE_ZIPS) $@ $@.parts/*.zip rm -rf $@.parts - ALL_MODULES.$(LOCAL_MODULE).BUNDLE := $(my_bundle_module) -endif +ALL_MODULES.$(LOCAL_MODULE).BUNDLE := $(my_bundle_module) -############################### -## Build dpi-specific apks, if it's apps_only build. ifdef TARGET_BUILD_APPS -ifdef LOCAL_DPI_VARIANTS -$(foreach d, $(LOCAL_DPI_VARIANTS), \ - $(eval my_dpi := $(d)) \ - $(eval include $(BUILD_SYSTEM)/dpi_specific_apk.mk)) -endif + ifdef LOCAL_DPI_VARIANTS + $(call pretty-error,Building DPI-specific APKs is no longer supported) + endif endif ############################### diff --git a/core/soong_app_prebuilt.mk b/core/soong_app_prebuilt.mk index 8d92b20e0..8153d78d7 100644 --- a/core/soong_app_prebuilt.mk +++ b/core/soong_app_prebuilt.mk @@ -60,7 +60,7 @@ ifeq ($(module_run_appcompat),true) $(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) @echo "Copy: $@" $(copy-file-to-target) - $(call appcompat-header, aapt2) + $(appcompat-header) $(run-appcompat) else $(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(LOCAL_BUILT_MODULE))) diff --git a/core/static_java_library.mk b/core/static_java_library.mk index ee759b9d8..cb3281af3 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -33,10 +33,6 @@ include $(BUILD_SYSTEM)/support_libraries.mk include $(BUILD_SYSTEM)/force_aapt2.mk -ifdef LOCAL_AAPT2_ONLY -LOCAL_USE_AAPT2 := true -endif - # Hack to build static Java library with Android resource # See bug 5714516 all_resources := @@ -46,11 +42,9 @@ ifdef LOCAL_RESOURCE_DIR need_compile_res := true LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d))) endif -ifeq ($(LOCAL_USE_AAPT2),true) ifneq ($(strip $(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),) need_compile_res := true endif -endif ifeq ($(need_compile_res),true) all_resources := $(strip \ @@ -84,22 +78,20 @@ LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_ R_file_stamp := $(intermediates.COMMON)/src/R.stamp LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) -ifeq ($(LOCAL_USE_AAPT2),true) - ifneq ($(strip $(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),) - # If we are using static android libraries, every source file becomes an overlay. - # This is to emulate old AAPT behavior which simulated library support. - my_res_resources := - my_overlay_resources := $(all_resources) - else - # Otherwise, for a library we treat all the resource equal with no overlay. - my_res_resources := $(all_resources) - my_overlay_resources := - endif - # For libraries put everything in the COMMON intermediate directory. - my_res_package := $(intermediates.COMMON)/package-res.apk +ifneq ($(strip $(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),) + # If we are using static android libraries, every source file becomes an overlay. + # This is to emulate old AAPT behavior which simulated library support. + my_res_resources := + my_overlay_resources := $(all_resources) +else + # Otherwise, for a library we treat all the resource equal with no overlay. + my_res_resources := $(all_resources) + my_overlay_resources := +endif +# For libraries put everything in the COMMON intermediate directory. +my_res_package := $(intermediates.COMMON)/package-res.apk - LOCAL_INTERMEDIATE_TARGETS += $(my_res_package) -endif # LOCAL_USE_AAPT2 +LOCAL_INTERMEDIATE_TARGETS += $(my_res_package) endif # need_compile_res @@ -127,7 +119,6 @@ framework_res_package_export := \ endif endif -ifeq ($(LOCAL_USE_AAPT2),true) import_proguard_flag_files := $(strip $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags)) $(intermediates.COMMON)/export_proguard_flags: $(import_proguard_flag_files) $(addprefix $(LOCAL_PATH)/,$(LOCAL_EXPORT_PROGUARD_FLAG_FILES)) @@ -139,7 +130,6 @@ $(intermediates.COMMON)/export_proguard_flags: $(import_proguard_flag_files) $(a cat $$f >>$@; \ done import_proguard_flag_files := -endif include $(BUILD_SYSTEM)/aapt_flags.mk @@ -150,7 +140,6 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_M # add --non-constant-id to prevent inlining constants. # AAR needs text symbol file R.txt. -ifeq ($(LOCAL_USE_AAPT2),true) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --static-lib --output-text-symbols $(intermediates.COMMON)/R.txt ifndef LOCAL_AAPT_NAMESPACES $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS += --no-static-lib-packages @@ -158,15 +147,6 @@ endif $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PRODUCT_AAPT_CONFIG := $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PRODUCT_AAPT_PREF_CONFIG := $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_TARGET_AAPT_CHARACTERISTICS := -else -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(intermediates.COMMON) - -my_srcjar := $(intermediates.COMMON)/aapt.srcjar -LOCAL_SRCJARS += $(my_srcjar) -$(R_file_stamp): PRIVATE_SRCJAR := $(my_srcjar) -$(R_file_stamp): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt -$(R_file_stamp): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar) -endif $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest) $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml @@ -178,26 +158,16 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_optio $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := -ifeq ($(LOCAL_USE_AAPT2),true) - # One more level with name res so we can zip up the flat resources that can be linked by apps. - my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res/res - ifneq (,$(filter-out current,$(renderscript_target_api))) - ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true) - my_generated_res_zips := $(rs_generated_res_zip) - endif # renderscript_target_api < 21 - endif # renderscript_target_api is set - include $(BUILD_SYSTEM)/aapt2.mk - $(my_res_package) : $(framework_res_package_export) - $(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(intermediates.COMMON)/R.txt -else - $(R_file_stamp): .KATI_IMPLICIT_OUTPUTS += $(intermediates.COMMON)/R.txt - $(R_file_stamp): PRIVATE_RESOURCE_LIST := $(all_resources) - $(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(SOONG_ZIP) \ - $(framework_res_package_export) $(rs_generated_res_zip) - @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" - $(create-resource-java-files) - $(hide) find $(PRIVATE_JAVA_GEN_DIR) -name R.java | xargs cat > $@ -endif # LOCAL_USE_AAPT2 +# One more level with name res so we can zip up the flat resources that can be linked by apps. +my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res/res +ifneq (,$(filter-out current,$(renderscript_target_api))) + ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true) + my_generated_res_zips := $(rs_generated_res_zip) + endif # renderscript_target_api < 21 +endif # renderscript_target_api is set +include $(BUILD_SYSTEM)/aapt2.mk +$(my_res_package) : $(framework_res_package_export) +$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(intermediates.COMMON)/R.txt endif # need_compile_res