diff --git a/core/aapt2.mk b/core/aapt2.mk index 5c4cf73d1..1d47c54f9 100644 --- a/core/aapt2.mk +++ b/core/aapt2.mk @@ -3,8 +3,11 @@ # Input variables: # full_android_manifest, # my_res_resources, my_overlay_resources, my_aapt_characteristics, -# my_compiled_res_base_dir, rs_generated_res_dir, my_res_package, +# my_compiled_res_base_dir, my_res_package, # R_file_stamp, proguard_options_file +# my_generated_res_dirs: Resources generated during the build process and we have to compile them in a single run of aapt2. +# my_generated_res_dirs_deps: the dependency to use for my_generated_res_dirs. +# # Output variables: # my_res_resources_flat, my_overlay_resources_flat, # my_generated_resources_flata @@ -27,39 +30,45 @@ my_overlay_resources_flat := \ my_generated_resources_flata := # Compile generated resources -ifneq ($(rs_generated_res_dir),) -rs_gen_resource_flata := $(my_compiled_res_base_dir)/renderscript_gen_res.flata -$(rs_gen_resource_flata): PRIVATE_SOURCE_RES_DIR := $(rs_generated_res_dir) -$(rs_gen_resource_flata) : $(RenderScript_file_stamp) - @echo "AAPT2 compile $@ <- $(PRIVATE_SOURCE_RES_DIR)" - $(call aapt2-compile-one-resource-dir) +ifneq ($(my_generated_res_dirs),) +my_generated_resources_flata := $(my_compiled_res_base_dir)/gen_res.flata +$(my_generated_resources_flata): PRIVATE_SOURCE_RES_DIRS := $(my_generated_res_dirs) +$(my_generated_resources_flata) : $(my_generated_res_dirs_deps) + @echo "AAPT2 compile $@ <- $(PRIVATE_SOURCE_RES_DIRS)" + $(call aapt2-compile-resource-dirs) -my_generated_resources_flata += $(rs_gen_resource_flata) +my_generated_resources_flata += $(my_generated_resources_flata) endif $(my_res_resources_flat) $(my_overlay_resources_flat) $(my_generated_resources_flata): \ PRIVATE_AAPT2_CFLAGS := $(addprefix --product ,$(my_aapt_characteristics)) $(PRODUCT_AAPT2_CFLAGS) -# Link the static library resource packages. -my_static_library_resources := $(foreach l, $(LOCAL_STATIC_JAVA_LIBRARIES),\ - $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/library-res.flata) +my_static_library_resources := $(foreach l, $(LOCAL_STATIC_ANDROID_LIBRARIES),\ + $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/package-res.apk) +my_shared_library_resources := $(foreach l, $(LOCAL_SHARED_ANDROID_LIBRARIES),\ + $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/package-res.apk) $(my_res_package): PRIVATE_RES_FLAT := $(my_res_resources_flat) $(my_res_package): PRIVATE_OVERLAY_FLAT := $(my_overlay_resources_flat) $(my_generated_resources_flata) $(my_static_library_resources) +$(my_res_package): PRIVATE_SHARED_ANDROID_LIBRARIES := $(my_shared_library_resources) $(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file) -$(my_res_package) : $(full_android_manifest) +$(my_res_package) : $(full_android_manifest) $(my_static_library_resources) $(my_shared_library_resources) $(my_res_package) : $(my_res_resources_flat) $(my_overlay_resources_flat) \ $(my_generated_resources_flata) $(my_static_library_resources) \ $(AAPT2) @echo "AAPT2 link $@" $(call aapt2-link) +ifdef R_file_stamp $(R_file_stamp) : $(my_res_package) | $(ACP) @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" @rm -rf $@ && mkdir -p $(dir $@) $(call find-generated-R.java) +endif +ifdef proguard_options_file $(proguard_options_file) : $(my_res_package) +endif resource_export_package := ifdef LOCAL_EXPORT_PACKAGE_RESOURCES diff --git a/core/android_manifest.mk b/core/android_manifest.mk index b945ea9e7..0093e0208 100644 --- a/core/android_manifest.mk +++ b/core/android_manifest.mk @@ -22,11 +22,11 @@ my_full_libs_manifest_deps += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES), my_full_libs_manifest_files += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/AndroidManifest.xml) -# With USE_AAPT2, we'll link in the built resource from the AAR. -ifndef USE_AAPT2 +# With aapt2, we'll link in the built resource from the AAR. +ifndef LOCAL_USE_AAPT2 LOCAL_RESOURCE_DIR += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\ $(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/res) -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 endif # LOCAL_STATIC_JAVA_AAR_LIBRARIES # Set up rules to merge library manifest files diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 069fbf97b..bb6ce93c6 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -193,6 +193,9 @@ LOCAL_INIT_RC:= LOCAL_MODULE_HOST_OS:= LOCAL_FINDBUGS_FLAGS:= LOCAL_NOTICE_FILE:= +LOCAL_USE_AAPT2:=$(USE_AAPT2) +LOCAL_STATIC_ANDROID_LIBRARIES:= +LOCAL_SHARED_ANDROID_LIBRARIES:= # arch specific variables LOCAL_SRC_FILES_$(TARGET_ARCH):= diff --git a/core/definitions.mk b/core/definitions.mk index 258639874..0e9f454b8 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1825,9 +1825,9 @@ define aapt2-compile-one-resource-file $(hide) $(AAPT2) compile -o $(dir $@) $(PRIVATE_AAPT2_CFLAGS) --legacy $< endef -define aapt2-compile-one-resource-dir +define aapt2-compile-resource-dirs @mkdir -p $(dir $@) -$(hide) $(AAPT2) compile -o $@ --dir $(PRIVATE_SOURCE_RES_DIR) \ +$(hide) $(AAPT2) compile -o $@ $(addprefix --dir ,$(PRIVATE_SOURCE_RES_DIRS)) \ $(PRIVATE_AAPT2_CFLAGS) --legacy endef @@ -1856,8 +1856,10 @@ endef define aapt2-link $(hide) $(AAPT2) link -o $@ \ $(PRIVATE_AAPT_FLAGS) \ + --auto-add-overlay \ $(addprefix --manifest ,$(PRIVATE_ANDROID_MANIFEST)) \ $(addprefix -I ,$(PRIVATE_AAPT_INCLUDES)) \ + $(addprefix -I ,$(PRIVATE_SHARED_ANDROID_LIBRARIES)) \ $(addprefix --java ,$(PRIVATE_SOURCE_INTERMEDIATES_DIR)) \ $(addprefix --proguard ,$(PRIVATE_PROGUARD_OPTIONS_FILE)) \ $(addprefix --min-sdk-version ,$(PRIVATE_DEFAULT_APP_TARGET_SDK)) \ diff --git a/core/java.mk b/core/java.mk index d8bbe37f9..5848fca24 100644 --- a/core/java.mk +++ b/core/java.mk @@ -57,10 +57,12 @@ else endif endif -# LOCAL_STATIC_JAVA_AAR_LIBRARIES are special LOCAL_STATIC_JAVA_LIBRARIES -LOCAL_STATIC_JAVA_LIBRARIES := $(strip $(LOCAL_STATIC_JAVA_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)) - -LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES)) +# LOCAL_STATIC_JAVA_AAR_LIBRARIES and LOCAL_STATIC_ANDROID_LIBRARIES are also LOCAL_STATIC_JAVA_LIBRARIES. +LOCAL_STATIC_JAVA_LIBRARIES := $(strip $(LOCAL_STATIC_JAVA_LIBRARIES) \ + $(LOCAL_STATIC_JAVA_AAR_LIBRARIES) \ + $(LOCAL_STATIC_ANDROID_LIBRARIES)) +# LOCAL_SHARED_ANDROID_LIBRARIES are also LOCAL_JAVA_LIBRARIES. +LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES) $(LOCAL_SHARED_ANDROID_LIBRARIES)) LOCAL_BUILT_MODULE_STEM := $(strip $(LOCAL_BUILT_MODULE_STEM)) ifeq ($(LOCAL_BUILT_MODULE_STEM),) diff --git a/core/package_internal.mk b/core/package_internal.mk index c1da5ed7b..3e1c15260 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -115,7 +115,7 @@ ifneq ($(all_assets),) need_compile_asset := true endif -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 # In aapt2 the last takes precedence. my_resource_dirs := $(call reverse-list,$(LOCAL_RESOURCE_DIR)) my_res_resources := @@ -140,7 +140,7 @@ LOCAL_INTERMEDIATE_TARGETS += $(my_res_package) # Always run aapt2 need_compile_res := true -else # USE_AAPT2 +else # LOCAL_USE_AAPT2 all_resources := $(strip \ $(foreach dir, $(LOCAL_RESOURCE_DIR), \ $(addprefix $(dir)/, \ @@ -150,7 +150,7 @@ all_resources := $(strip \ ) \ )) -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 ifneq ($(all_resources),) need_compile_res := true @@ -312,11 +312,16 @@ $(built_dex_intermediate) : $(data_binding_stamp) endif # LOCAL_DATA_BINDING ifeq ($(need_compile_res),true) -ifdef USE_AAPT2 -my_aapt_characteristics := $(TARGET_AAPT_CHARACTERISTICS) +ifdef LOCAL_USE_AAPT2 +# my_aapt_characteristics := $(TARGET_AAPT_CHARACTERISTICS) +my_aapt_characteristics := my_compiled_res_base_dir := $(intermediates)/flat-res +my_generated_res_dirs := $(rs_generated_res_dir) +my_generated_res_dirs_deps := $(RenderScript_file_stamp) +# Add AAPT2 specific flags. +$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --no-static-lib-packages include $(BUILD_SYSTEM)/aapt2.mk -else # USE_AAPT2 +else # LOCAL_USE_AAPT2 # 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 @@ -356,7 +361,7 @@ $(resource_export_package): $(all_res_assets) $(full_android_manifest) $(RenderS $(add-assets-to-package) endif -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 # Other modules should depend on the BUILT module if # they want to use this module's R.java file. @@ -419,7 +424,7 @@ $(resource_export_package) $(R_file_stamp) $(LOCAL_BUILT_MODULE): $(all_library_ $(LOCAL_INTERMEDIATE_TARGETS): \ PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports) -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 $(my_res_package) : $(all_library_res_package_export_deps) endif endif # LOCAL_NO_STANDARD_LIBRARIES @@ -491,14 +496,14 @@ endif endif $(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS) $(LOCAL_BUILT_MODULE) : $(jni_shared_libraries) -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 $(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package) $(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP) else $(LOCAL_BUILT_MODULE) : $(all_res_assets) $(full_android_manifest) $(AAPT) endif @echo "target Package: $(PRIVATE_MODULE) ($@)" -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 ifdef LOCAL_JACK_ENABLED $(call copy-file-to-new-target) else @@ -507,7 +512,7 @@ else $(call merge-two-packages,$(PRIVATE_RES_PACKAGE) $(PRIVATE_SOURCE_ARCHIVE),$@), $(call copy-file-to-new-target)) endif -else # USE_AAPT2 +else # LOCAL_USE_AAPT2 ifdef LOCAL_JACK_ENABLED $(create-empty-package) else @@ -516,7 +521,7 @@ else $(create-empty-package)) endif $(add-assets-to-package) -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 ifneq ($(jni_shared_libraries),) $(add-jni-shared-libs-to-package) endif diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk index 1c9c0fc2d..7c08af71e 100644 --- a/core/prebuilt_internal.mk +++ b/core/prebuilt_internal.mk @@ -321,26 +321,34 @@ $(common_javalib_jar) : $(common_classes_jar) | $(ACP) $(call define-jar-to-toc-rule, $(common_classes_jar)) -ifdef USE_AAPT2 -my_library_resources := $(intermediates.COMMON)/library-res.flata +ifdef LOCAL_USE_AAPT2 ifneq ($(my_src_aar),) -# Compile the AAR resources to a .flata. -$(my_library_resources): PRIVATE_SOURCE_RES_DIR := $(intermediates.COMMON)/aar/res -$(my_library_resources) : $(my_src_jar) - @echo "AAPT2 compile AAR $@ <- $(PRIVATE_SOURCE_RES_DIR)" - $(call aapt2-compile-one-resource-dir) -else # $(my_src_aar) -# Create an empty packag for prebuilt static Java library. -# TODO: support compiled resources inside a prebuilt static Java library. -$(my_library_resources): PRIVATE_RES_DIR := $(intermediates.COMMON)/flat-res/res -$(my_library_resources) : - @echo "Create empty library resources $@" - @rm -rf $@ && mkdir -p $(dir $@) $(PRIVATE_RES_DIR) - $(hide) cd $(dir $(PRIVATE_RES_DIR)) && zip -qrX $(abspath $@) $(notdir $(PRIVATE_RES_DIR)) +my_res_package := $(intermediates.COMMON)/package-res.apk + +# We needed only very few PRIVATE variables and aapt2.mk input variables. Reset the unnecessary ones. +$(my_res_package): PRIVATE_AAPT2_CFLAGS := +$(my_res_package): PRIVATE_ANDROID_MANIFEST := $(intermediates.COMMON)/aar/AndroidManifest.xml +$(my_res_package): PRIVATE_AAPT_INCLUDES := +$(my_res_package): PRIVATE_SOURCE_INTERMEDIATES_DIR := +$(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := +$(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := +$(my_res_package): PRIVATE_DEFAULT_APP_TARGET_SDK := + +full_android_manifest := +my_res_resources := +my_overlay_resources := +my_aapt_characteristics := +my_compiled_res_base_dir := +R_file_stamp := +proguard_options_file := +my_generated_res_dirs := $(intermediates.COMMON)/aar/res +my_generated_res_dirs_deps := $(my_src_jar) +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) -# Make sure my_library_resources is created when you run mm/mmm. -$(built_module) : $(my_library_resources) -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 # make sure the classes.jar and javalib.jar are built before $(LOCAL_BUILT_MODULE) $(built_module) : $(common_javalib_jar) endif # LOCAL_IS_HOST_MODULE is not set diff --git a/core/product_config.mk b/core/product_config.mk index 151dac089..c0a1a9d6d 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -302,11 +302,8 @@ PRODUCT_AAPT_FLAGS := PRODUCT_AAPT2_CFLAGS := ifneq ($(filter en_XA ar_XB,$(PRODUCT_LOCALES)),) # Force generating resources for pseudo-locales. - ifdef USE_AAPT2 - PRODUCT_AAPT2_CFLAGS += --pseudo-localize - else - PRODUCT_AAPT_FLAGS += --pseudo-localize - endif + PRODUCT_AAPT2_CFLAGS += --pseudo-localize + PRODUCT_AAPT_FLAGS += --pseudo-localize endif PRODUCT_BRAND := $(strip $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_BRAND)) diff --git a/core/static_java_library.mk b/core/static_java_library.mk index 6efeb3507..e70e783df 100644 --- a/core/static_java_library.mk +++ b/core/static_java_library.mk @@ -30,9 +30,6 @@ include $(BUILD_SYSTEM)/configure_local_jack.mk intermediates.COMMON := $(call local-intermediates-dir,COMMON) my_res_package := -# A zip file that apps can link with aapt2 -# We need my_library_resources as dependency even if a library doesn't have resource. -my_library_resources := $(intermediates.COMMON)/library-res.flata # Hack to build static Java library with Android resource # See bug 5714516 @@ -80,7 +77,7 @@ endif # LOCAL_JACK_ENABLED R_file_stamp := $(intermediates.COMMON)/src/R.stamp LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp) -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 # For library we treat all the resource equal with no overlay. my_res_resources := $(all_resources) my_overlay_resources := @@ -88,7 +85,7 @@ my_overlay_resources := my_res_package := $(intermediates.COMMON)/package-res.apk LOCAL_INTERMEDIATE_TARGETS += $(my_res_package) -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 endif # LOCAL_RESOURCE_DIR all_res_assets := $(all_resources) @@ -121,8 +118,8 @@ endif # add --non-constant-id to prevent inlining constants. # AAR needs text symbol file R.txt. -ifdef USE_AAPT2 -$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-final-ids +ifdef LOCAL_USE_AAPT2 +$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --static-lib --no-static-lib-packages else $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(LOCAL_INTERMEDIATE_SOURCE_DIR) endif @@ -141,11 +138,13 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_optio $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME := $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := -ifdef USE_AAPT2 +ifdef LOCAL_USE_AAPT2 # For libraries don't use any product specific flags. my_aapt_characteristics := # 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 +my_generated_res_dirs := $(rs_generated_res_dir) +my_generated_res_dirs_deps := $(RenderScript_file_stamp) include $(BUILD_SYSTEM)/aapt2.mk $(my_res_package) : $(framework_res_package_export_deps) else @@ -153,7 +152,7 @@ $(R_file_stamp) : $(all_resources) $(full_android_manifest) $(AAPT) $(framework_ @echo "target R.java/Manifest.java: $(PRIVATE_MODULE) ($@)" $(create-resource-java-files) $(hide) find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name R.java | xargs cat > $@ -endif # USE_AAPT2 +endif # LOCAL_USE_AAPT2 $(LOCAL_BUILT_MODULE): $(R_file_stamp) ifdef LOCAL_JACK_ENABLED @@ -184,18 +183,6 @@ $(built_aar) : $(LOCAL_BUILT_MODULE) ALL_MODULES.$(LOCAL_MODULE).AAR := $(built_aar) endif # need_compile_res -ifdef USE_AAPT2 -# If a static Java library has no resources, create empty package apps can depend on. -$(my_library_resources): PRIVATE_RES_DIR := $(intermediates.COMMON)/flat-res/res -$(my_library_resources) : $(my_res_package) - @echo "Package static library resources $@" - @rm -rf $@ && mkdir -p $(dir $@) $(PRIVATE_RES_DIR) - $(hide) cd $(dir $(PRIVATE_RES_DIR)) && zip -qrX $(abspath $@) $(notdir $(PRIVATE_RES_DIR)) - -# Make sure my_library_resources is created when you run mm/mmm. -$(LOCAL_BUILT_MODULE) : $(my_library_resources) -endif # USE_AAPT2 - # Reset internal variables. all_res_assets := LOCAL_IS_STATIC_JAVA_LIBRARY :=