1*9e94795aSAndroid Build Coastguard Worker###################################### 2*9e94795aSAndroid Build Coastguard Worker# Compile resource with AAPT2 3*9e94795aSAndroid Build Coastguard Worker# Input variables: 4*9e94795aSAndroid Build Coastguard Worker# - full_android_manifest 5*9e94795aSAndroid Build Coastguard Worker# - my_res_resources 6*9e94795aSAndroid Build Coastguard Worker# - my_overlay_resources 7*9e94795aSAndroid Build Coastguard Worker# - my_compiled_res_base_dir 8*9e94795aSAndroid Build Coastguard Worker# - my_asset_dirs 9*9e94795aSAndroid Build Coastguard Worker# - my_full_asset_paths 10*9e94795aSAndroid Build Coastguard Worker# - my_res_package 11*9e94795aSAndroid Build Coastguard Worker# - R_file_stamp 12*9e94795aSAndroid Build Coastguard Worker# - proguard_options_file 13*9e94795aSAndroid Build Coastguard Worker# - my_generated_res_dirs: Resources generated during the build process and we have to compile them in a single run of aapt2. 14*9e94795aSAndroid Build Coastguard Worker# - my_generated_res_dirs_deps: the dependency to use for my_generated_res_dirs. 15*9e94795aSAndroid Build Coastguard Worker# - my_generated_res_zips: Zip files containing resources 16*9e94795aSAndroid Build Coastguard Worker# - my_apk_split_configs: The configurations for which to generate splits. 17*9e94795aSAndroid Build Coastguard Worker# - built_apk_splits: The paths where AAPT should generate the splits. 18*9e94795aSAndroid Build Coastguard Worker# 19*9e94795aSAndroid Build Coastguard Worker# Output variables: 20*9e94795aSAndroid Build Coastguard Worker# - my_res_resources_flat 21*9e94795aSAndroid Build Coastguard Worker# - my_overlay_resources_flat 22*9e94795aSAndroid Build Coastguard Worker# - my_generated_resources_flata 23*9e94795aSAndroid Build Coastguard Worker# 24*9e94795aSAndroid Build Coastguard Worker###################################### 25*9e94795aSAndroid Build Coastguard Worker 26*9e94795aSAndroid Build Coastguard Worker# Compile all the resource files. 27*9e94795aSAndroid Build Coastguard Workermy_res_resources_flat := \ 28*9e94795aSAndroid Build Coastguard Worker $(foreach r, $(my_res_resources),\ 29*9e94795aSAndroid Build Coastguard Worker $(eval o := $(call aapt2-compiled-resource-out-file,$(r),$(my_compiled_res_base_dir)))\ 30*9e94795aSAndroid Build Coastguard Worker $(eval $(call aapt2-compile-one-resource-file-rule,$(r),$(o)))\ 31*9e94795aSAndroid Build Coastguard Worker $(o)) 32*9e94795aSAndroid Build Coastguard Worker 33*9e94795aSAndroid Build Coastguard Workermy_overlay_resources_flat := \ 34*9e94795aSAndroid Build Coastguard Worker $(foreach r, $(my_overlay_resources),\ 35*9e94795aSAndroid Build Coastguard Worker $(eval o := $(call aapt2-compiled-resource-out-file,$(r),$(my_compiled_res_base_dir)))\ 36*9e94795aSAndroid Build Coastguard Worker $(eval $(call aapt2-compile-one-resource-file-rule,$(r),$(o)))\ 37*9e94795aSAndroid Build Coastguard Worker $(o)) 38*9e94795aSAndroid Build Coastguard Worker 39*9e94795aSAndroid Build Coastguard Workermy_resources_flata := 40*9e94795aSAndroid Build Coastguard Worker# Compile generated resources 41*9e94795aSAndroid Build Coastguard Workerifneq ($(my_generated_res_dirs),) 42*9e94795aSAndroid Build Coastguard Workermy_generated_resources_flata := $(my_compiled_res_base_dir)/gen_res.flata 43*9e94795aSAndroid Build Coastguard Worker$(my_generated_resources_flata): PRIVATE_SOURCE_RES_DIRS := $(my_generated_res_dirs) 44*9e94795aSAndroid Build Coastguard Worker$(my_generated_resources_flata) : $(my_generated_res_dirs_deps) $(AAPT2) 45*9e94795aSAndroid Build Coastguard Worker @echo "AAPT2 compile $@ <- $(PRIVATE_SOURCE_RES_DIRS)" 46*9e94795aSAndroid Build Coastguard Worker $(call aapt2-compile-resource-dirs) 47*9e94795aSAndroid Build Coastguard Worker 48*9e94795aSAndroid Build Coastguard Workermy_resources_flata += $(my_generated_resources_flata) 49*9e94795aSAndroid Build Coastguard Workerendif 50*9e94795aSAndroid Build Coastguard Worker 51*9e94795aSAndroid Build Coastguard Worker# Compile zipped resources 52*9e94795aSAndroid Build Coastguard Workerifneq ($(my_generated_res_zips),) 53*9e94795aSAndroid Build Coastguard Workermy_zipped_resources_flata := $(my_compiled_res_base_dir)/zip_res.flata 54*9e94795aSAndroid Build Coastguard Worker$(my_zipped_resources_flata): PRIVATE_SOURCE_RES_ZIPS := $(my_generated_res_zips) 55*9e94795aSAndroid Build Coastguard Worker$(my_zipped_resources_flata) : $(my_generated_res_zips) $(AAPT2) $(ZIPSYNC) 56*9e94795aSAndroid Build Coastguard Worker @echo "AAPT2 compile $@ <- $(PRIVATE_SOURCE_RES_ZIPS)" 57*9e94795aSAndroid Build Coastguard Worker $(call aapt2-compile-resource-zips) 58*9e94795aSAndroid Build Coastguard Worker 59*9e94795aSAndroid Build Coastguard Workermy_resources_flata += $(my_zipped_resources_flata) 60*9e94795aSAndroid Build Coastguard Workerendif 61*9e94795aSAndroid Build Coastguard Worker 62*9e94795aSAndroid Build Coastguard Worker# Always set --pseudo-localize, it will be stripped out later for release 63*9e94795aSAndroid Build Coastguard Worker# builds that don't want it. 64*9e94795aSAndroid Build Coastguard Worker$(my_res_resources_flat) $(my_overlay_resources_flat) $(my_resources_flata) $(my_generated_resources_flata) $(my_zippped_resources_flata): \ 65*9e94795aSAndroid Build Coastguard Worker PRIVATE_AAPT2_CFLAGS := --pseudo-localize $(filter --legacy,$(LOCAL_AAPT_FLAGS)) 66*9e94795aSAndroid Build Coastguard Worker 67*9e94795aSAndroid Build Coastguard Worker# TODO(b/78447299): Forbid LOCAL_STATIC_JAVA_AAR_LIBRARIES in aapt2 and remove 68*9e94795aSAndroid Build Coastguard Worker# support for it. 69*9e94795aSAndroid Build Coastguard Workermy_static_library_resources := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ 70*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/package-res.apk) 71*9e94795aSAndroid Build Coastguard Workermy_static_library_transitive_resource_packages_lists := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ 72*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/transitive-res-packages) 73*9e94795aSAndroid Build Coastguard Workermy_static_library_extra_packages := $(foreach l, $(call reverse-list,$(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)),\ 74*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/extra_packages) 75*9e94795aSAndroid Build Coastguard Workermy_shared_library_resources := $(foreach l, $(LOCAL_SHARED_ANDROID_LIBRARIES),\ 76*9e94795aSAndroid Build Coastguard Worker $(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/package-res.apk) 77*9e94795aSAndroid Build Coastguard Worker 78*9e94795aSAndroid Build Coastguard Workerifneq ($(my_static_library_resources),) 79*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_AAPT_FLAGS += --auto-add-overlay 80*9e94795aSAndroid Build Coastguard Workerendif 81*9e94795aSAndroid Build Coastguard Worker 82*9e94795aSAndroid Build Coastguard Workerifneq ($(my_apk_split_configs),) 83*9e94795aSAndroid Build Coastguard Worker# Join the Split APK paths with their configuration, separated by a ':'. 84*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_AAPT_FLAGS += $(addprefix --split ,$(join $(built_apk_splits),$(addprefix :,$(my_apk_split_configs)))) 85*9e94795aSAndroid Build Coastguard Workerendif 86*9e94795aSAndroid Build Coastguard Worker 87*9e94795aSAndroid Build Coastguard Workermy_srcjar := $(intermediates.COMMON)/aapt2.srcjar 88*9e94795aSAndroid Build Coastguard WorkerLOCAL_SRCJARS += $(my_srcjar) 89*9e94795aSAndroid Build Coastguard Worker 90*9e94795aSAndroid Build Coastguard Workeraapt_extra_packages := $(intermediates.COMMON)/extra_packages 91*9e94795aSAndroid Build Coastguard Worker 92*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_RES_FLAT := $(my_res_resources_flat) 93*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_OVERLAY_FLAT := $(my_static_library_resources) $(my_resources_flata) $(my_overlay_resources_flat) 94*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_SHARED_ANDROID_LIBRARIES := $(my_shared_library_resources) 95*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_options_file) 96*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_ASSET_DIRS := $(my_asset_dirs) 97*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_JAVA_GEN_DIR := $(intermediates.COMMON)/aapt2 98*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_SRCJAR := $(my_srcjar) 99*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_STATIC_LIBRARY_EXTRA_PACKAGES := $(my_static_library_extra_packages) 100*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_STATIC_LIBRARY_TRANSITIVE_RES_PACKAGES_LISTS := $(my_static_library_transitive_resource_packages_lists) 101*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_AAPT_EXTRA_PACKAGES := $(aapt_extra_packages) 102*9e94795aSAndroid Build Coastguard Worker$(my_res_package): .KATI_IMPLICIT_OUTPUTS := $(my_srcjar) $(aapt_extra_packages) 103*9e94795aSAndroid Build Coastguard Worker 104*9e94795aSAndroid Build Coastguard Workerifdef R_file_stamp 105*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_R_FILE_STAMP := $(R_file_stamp) 106*9e94795aSAndroid Build Coastguard Worker$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(R_file_stamp) 107*9e94795aSAndroid Build Coastguard Workerendif 108*9e94795aSAndroid Build Coastguard Worker 109*9e94795aSAndroid Build Coastguard Workerresource_export_package := 110*9e94795aSAndroid Build Coastguard Workerifdef LOCAL_EXPORT_PACKAGE_RESOURCES 111*9e94795aSAndroid Build Coastguard Worker# Put this module's resources into a PRODUCT-agnositc package that 112*9e94795aSAndroid Build Coastguard Worker# other packages can use to build their own PRODUCT-agnostic R.java (etc.) 113*9e94795aSAndroid Build Coastguard Worker# files. 114*9e94795aSAndroid Build Coastguard Workerresource_export_package := $(intermediates.COMMON)/package-export.apk 115*9e94795aSAndroid Build Coastguard Worker$(my_res_package): PRIVATE_RESOURCE_EXPORT_PACKAGE := $(resource_export_package) 116*9e94795aSAndroid Build Coastguard Worker$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(resource_export_package) 117*9e94795aSAndroid Build Coastguard Workerendif 118*9e94795aSAndroid Build Coastguard Worker 119*9e94795aSAndroid Build Coastguard Workerifdef proguard_options_file 120*9e94795aSAndroid Build Coastguard Worker$(my_res_package): .KATI_IMPLICIT_OUTPUTS += $(proguard_options_file) 121*9e94795aSAndroid Build Coastguard Workerendif 122*9e94795aSAndroid Build Coastguard Worker 123*9e94795aSAndroid Build Coastguard Worker$(my_res_package): $(full_android_manifest) $(my_static_library_resources) $(my_static_library_transitive_resource_packages_lists) $(my_shared_library_resources) 124*9e94795aSAndroid Build Coastguard Worker$(my_res_package): $(my_full_asset_paths) 125*9e94795aSAndroid Build Coastguard Worker$(my_res_package): $(my_res_resources_flat) $(my_overlay_resources_flat) \ 126*9e94795aSAndroid Build Coastguard Worker $(my_resources_flata) $(my_static_library_resources) $(my_static_library_extra_packages) \ 127*9e94795aSAndroid Build Coastguard Worker $(AAPT2) $(SOONG_ZIP) $(EXTRACT_JAR_PACKAGES) 128*9e94795aSAndroid Build Coastguard Worker @echo "AAPT2 link $@" 129*9e94795aSAndroid Build Coastguard Worker $(call aapt2-link) 130*9e94795aSAndroid Build Coastguard Workerifdef R_file_stamp 131*9e94795aSAndroid Build Coastguard Worker @rm -f $(PRIVATE_R_FILE_STAMP) 132*9e94795aSAndroid Build Coastguard Worker $(call find-generated-R.java,$(PRIVATE_JAVA_GEN_DIR),$(PRIVATE_R_FILE_STAMP)) 133*9e94795aSAndroid Build Coastguard Workerendif 134*9e94795aSAndroid Build Coastguard Workerifdef LOCAL_EXPORT_PACKAGE_RESOURCES 135*9e94795aSAndroid Build Coastguard Worker @rm -f $(PRIVATE_RESOURCE_EXPORT_PACKAGE) 136*9e94795aSAndroid Build Coastguard Worker 137*9e94795aSAndroid Build Coastguard Worker cp $@ $(PRIVATE_RESOURCE_EXPORT_PACKAGE) 138*9e94795aSAndroid Build Coastguard Workerendif 139*9e94795aSAndroid Build Coastguard Worker 140*9e94795aSAndroid Build Coastguard Worker# Clear inputs only used in this file, so that they're not re-used during the next build 141*9e94795aSAndroid Build Coastguard Workermy_res_resources := 142*9e94795aSAndroid Build Coastguard Workermy_overlay_resources := 143*9e94795aSAndroid Build Coastguard Workermy_compiled_res_base_dir := 144*9e94795aSAndroid Build Coastguard Workermy_asset_dirs := 145*9e94795aSAndroid Build Coastguard Workermy_full_asset_paths := 146*9e94795aSAndroid Build Coastguard Workermy_apk_split_configs := 147*9e94795aSAndroid Build Coastguard Workermy_generated_res_dirs := 148*9e94795aSAndroid Build Coastguard Workermy_generated_res_dirs_deps := 149*9e94795aSAndroid Build Coastguard Workermy_generated_res_zips := 150