Allow forcing AAPT2 on
Building with FORCE_AAPT2=true will turn on AAPT2 for all modules unless they set LOCAL_USE_AAPT2 := false. The build system will attempt to rewrite common AAPT patterns into AAPT2 patterns, including removing --extra-packages for support library packages, removing LOCAL_RESOURCE_DIR point to support library resources, adding a default empty manifest file if it doesn't exist, and converting LOCAL_STATIC_JAVA_AAR_LIBRARIES to LOCAL_STATIC_ANDROID_LIBRARIES. Bug: 79481102 Test: m checkbuild Change-Id: I8d9d55fe4d5d5c965c64b0407efe74e0afc35c3a
This commit is contained in:
@@ -23,7 +23,7 @@ my_full_libs_manifest_files += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES)
|
|||||||
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/AndroidManifest.xml)
|
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/AndroidManifest.xml)
|
||||||
|
|
||||||
# With aapt2, we'll link in the built resource from the AAR.
|
# With aapt2, we'll link in the built resource from the AAR.
|
||||||
ifndef LOCAL_USE_AAPT2
|
ifneq ($(LOCAL_USE_AAPT2),true)
|
||||||
LOCAL_RESOURCE_DIR += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\
|
LOCAL_RESOURCE_DIR += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\
|
||||||
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/res)
|
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/res)
|
||||||
endif # LOCAL_USE_AAPT2
|
endif # LOCAL_USE_AAPT2
|
||||||
|
@@ -2147,6 +2147,17 @@ $(SOONG_ZIP) -o $(PRIVATE_SRCJAR) -C $(PRIVATE_JAVA_GEN_DIR) -D $(PRIVATE_JAVA_G
|
|||||||
$(EXTRACT_JAR_PACKAGES) -i $(PRIVATE_SRCJAR) -o $(PRIVATE_AAPT_EXTRA_PACKAGES) --prefix '--extra-packages '
|
$(EXTRACT_JAR_PACKAGES) -i $(PRIVATE_SRCJAR) -o $(PRIVATE_AAPT_EXTRA_PACKAGES) --prefix '--extra-packages '
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define _create-default-manifest-file
|
||||||
|
$(1):
|
||||||
|
rm -f $1
|
||||||
|
echo '<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="missing.manifest"></manifest>' > $1
|
||||||
|
endef
|
||||||
|
|
||||||
|
define create-default-manifest-file
|
||||||
|
$(eval $(call _create-default-manifest-file,$(1)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
xlint_unchecked := -Xlint:unchecked
|
xlint_unchecked := -Xlint:unchecked
|
||||||
|
|
||||||
|
63
core/force_aapt2.mk
Normal file
63
core/force_aapt2.mk
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2018 The Android Open Source Project
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Including this makefile will force AAPT2 on if FORCE_AAPT2==true,
|
||||||
|
# rewriting some properties to convert standard AAPT usage to AAPT2.
|
||||||
|
|
||||||
|
ifeq ($(FORCE_AAPT2),true)
|
||||||
|
ifneq ($(LOCAL_USE_AAPT2),true)
|
||||||
|
# Force AAPT2 on
|
||||||
|
LOCAL_USE_AAPT2 := true
|
||||||
|
# Move LOCAL_STATIC_JAVA_AAR_LIBRARIES to LOCAL_STATIC_ANDROID_LIBRARIES
|
||||||
|
LOCAL_STATIC_ANDROID_LIBRARIES := $(strip $(LOCAL_STATIC_ANDROID_LIBRARIES) $(LOCAL_STATIC_JAVA_AAR_LIBRARIES))
|
||||||
|
LOCAL_STATIC_JAVA_AAR_LIBRARIES :=
|
||||||
|
# Filter out support library resources
|
||||||
|
LOCAL_RESOURCE_DIR := $(filter-out \
|
||||||
|
prebuilts/sdk/current/% \
|
||||||
|
frameworks/support/%,\
|
||||||
|
$(LOCAL_RESOURCE_DIR))
|
||||||
|
# Filter out unnecessary aapt flags
|
||||||
|
LOCAL_AAPT_FLAGS := $(subst --extra-packages=,--extra-packages$(space), \
|
||||||
|
$(filter-out \
|
||||||
|
--extra-packages=android.support.% \
|
||||||
|
--extra-packages=androidx.% \
|
||||||
|
--auto-add-overlay,\
|
||||||
|
$(subst --extra-packages$(space),--extra-packages=,$(LOCAL_AAPT_FLAGS))))
|
||||||
|
|
||||||
|
# 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
|
||||||
|
$(call pretty-warning, Missing manifest file)
|
||||||
|
LOCAL_FULL_MANIFEST_FILE := $(call local-intermediates-dir,COMMON)/DefaultManifest.xml
|
||||||
|
$(call create-default-manifest-file,$(LOCAL_FULL_MANIFEST_FILE))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
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)")
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
@@ -444,7 +444,7 @@ ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),)
|
|||||||
common_proguard_flags += -dontshrink # don't shrink tests by default
|
common_proguard_flags += -dontshrink # don't shrink tests by default
|
||||||
endif # test package
|
endif # test package
|
||||||
ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
|
ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
|
common_proguard_flag_files += $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
|
||||||
$(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags)
|
$(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags)
|
||||||
endif
|
endif
|
||||||
|
@@ -477,7 +477,7 @@ endif
|
|||||||
ifdef LOCAL_AAPT2_ONLY
|
ifdef LOCAL_AAPT2_ONLY
|
||||||
my_link_type += aapt2_only
|
my_link_type += aapt2_only
|
||||||
endif
|
endif
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
my_allowed_types += aapt2_only
|
my_allowed_types += aapt2_only
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -87,6 +87,8 @@ else
|
|||||||
LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d)))
|
LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d)))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
include $(BUILD_SYSTEM)/force_aapt2.mk
|
||||||
|
|
||||||
package_resource_overlays := $(strip \
|
package_resource_overlays := $(strip \
|
||||||
$(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \
|
$(wildcard $(foreach dir, $(PRODUCT_PACKAGE_OVERLAYS), \
|
||||||
$(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \
|
$(addprefix $(dir)/, $(LOCAL_RESOURCE_DIR)))) \
|
||||||
@@ -153,7 +155,7 @@ LOCAL_USE_AAPT2 := true
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
my_res_package :=
|
my_res_package :=
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
# In aapt2 the last takes precedence.
|
# In aapt2 the last takes precedence.
|
||||||
my_resource_dirs := $(call reverse-list,$(LOCAL_RESOURCE_DIR))
|
my_resource_dirs := $(call reverse-list,$(LOCAL_RESOURCE_DIR))
|
||||||
my_res_dir :=
|
my_res_dir :=
|
||||||
@@ -357,7 +359,7 @@ $(R_file_stamp) $(my_res_package): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOC
|
|||||||
###############################
|
###############################
|
||||||
## AAPT/AAPT2
|
## AAPT/AAPT2
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res
|
my_compiled_res_base_dir := $(intermediates.COMMON)/flat-res
|
||||||
ifneq (,$(renderscript_target_api))
|
ifneq (,$(renderscript_target_api))
|
||||||
ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true)
|
ifneq ($(call math_gt_or_eq,$(renderscript_target_api),21),true)
|
||||||
@@ -509,7 +511,7 @@ $(resource_export_package) $(R_file_stamp) $(LOCAL_BUILT_MODULE): $(all_library_
|
|||||||
$(LOCAL_INTERMEDIATE_TARGETS): \
|
$(LOCAL_INTERMEDIATE_TARGETS): \
|
||||||
PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports)
|
PRIVATE_AAPT_INCLUDES := $(all_library_res_package_exports)
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
$(my_res_package) : $(all_library_res_package_export_deps)
|
$(my_res_package) : $(all_library_res_package_export_deps)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -593,7 +595,7 @@ $(LOCAL_BUILT_MODULE): PRIVATE_RESOURCE_INTERMEDIATES_DIR := $(intermediates.COM
|
|||||||
$(LOCAL_BUILT_MODULE): PRIVATE_FULL_CLASSES_JAR := $(full_classes_jar)
|
$(LOCAL_BUILT_MODULE): PRIVATE_FULL_CLASSES_JAR := $(full_classes_jar)
|
||||||
$(LOCAL_BUILT_MODULE) : $(jni_shared_libraries)
|
$(LOCAL_BUILT_MODULE) : $(jni_shared_libraries)
|
||||||
$(LOCAL_BUILT_MODULE) : $(JAR_ARGS)
|
$(LOCAL_BUILT_MODULE) : $(JAR_ARGS)
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
$(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package)
|
$(LOCAL_BUILT_MODULE): PRIVATE_RES_PACKAGE := $(my_res_package)
|
||||||
$(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP)
|
$(LOCAL_BUILT_MODULE) : $(my_res_package) $(AAPT2) | $(ACP)
|
||||||
else
|
else
|
||||||
@@ -604,7 +606,7 @@ ifdef LOCAL_COMPRESSED_MODULE
|
|||||||
$(LOCAL_BUILT_MODULE) : $(MINIGZIP)
|
$(LOCAL_BUILT_MODULE) : $(MINIGZIP)
|
||||||
endif
|
endif
|
||||||
@echo "target Package: $(PRIVATE_MODULE) ($@)"
|
@echo "target Package: $(PRIVATE_MODULE) ($@)"
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
$(call copy-file-to-new-target)
|
$(call copy-file-to-new-target)
|
||||||
else # ! LOCAL_USE_AAPT2
|
else # ! LOCAL_USE_AAPT2
|
||||||
$(if $(PRIVATE_SOURCE_ARCHIVE),\
|
$(if $(PRIVATE_SOURCE_ARCHIVE),\
|
||||||
@@ -620,7 +622,7 @@ ifeq ($(full_classes_jar),)
|
|||||||
$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
|
$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
|
||||||
else # full_classes_jar
|
else # full_classes_jar
|
||||||
$(add-dex-to-package)
|
$(add-dex-to-package)
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
$(call add-jar-resources-to-package,$@,$(PRIVATE_FULL_CLASSES_JAR),$(PRIVATE_RESOURCE_INTERMEDIATES_DIR))
|
$(call add-jar-resources-to-package,$@,$(PRIVATE_FULL_CLASSES_JAR),$(PRIVATE_RESOURCE_INTERMEDIATES_DIR))
|
||||||
endif
|
endif
|
||||||
endif # full_classes_jar
|
endif # full_classes_jar
|
||||||
|
@@ -607,11 +607,13 @@ $(common_classes_pre_proguard_jar) : $(my_src_jar)
|
|||||||
$(common_javalib_jar) : $(common_classes_jar)
|
$(common_javalib_jar) : $(common_classes_jar)
|
||||||
$(transform-prebuilt-to-target)
|
$(transform-prebuilt-to-target)
|
||||||
|
|
||||||
|
include $(BUILD_SYSTEM)/force_aapt2.mk
|
||||||
|
|
||||||
ifdef LOCAL_AAPT2_ONLY
|
ifdef LOCAL_AAPT2_ONLY
|
||||||
LOCAL_USE_AAPT2 := true
|
LOCAL_USE_AAPT2 := true
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
ifneq ($(my_src_aar),)
|
ifneq ($(my_src_aar),)
|
||||||
|
|
||||||
$(intermediates.COMMON)/export_proguard_flags : $(my_src_proguard_options)
|
$(intermediates.COMMON)/export_proguard_flags : $(my_src_proguard_options)
|
||||||
|
@@ -28,6 +28,8 @@ intermediates.COMMON := $(call local-intermediates-dir,COMMON)
|
|||||||
|
|
||||||
my_res_package :=
|
my_res_package :=
|
||||||
|
|
||||||
|
include $(BUILD_SYSTEM)/force_aapt2.mk
|
||||||
|
|
||||||
ifdef LOCAL_AAPT2_ONLY
|
ifdef LOCAL_AAPT2_ONLY
|
||||||
LOCAL_USE_AAPT2 := true
|
LOCAL_USE_AAPT2 := true
|
||||||
endif
|
endif
|
||||||
@@ -44,7 +46,7 @@ ifdef LOCAL_RESOURCE_DIR
|
|||||||
need_compile_res := true
|
need_compile_res := true
|
||||||
LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d)))
|
LOCAL_RESOURCE_DIR := $(foreach d,$(LOCAL_RESOURCE_DIR),$(call clean-path,$(d)))
|
||||||
endif
|
endif
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
ifneq ($(LOCAL_STATIC_ANDROID_LIBRARIES),)
|
ifneq ($(LOCAL_STATIC_ANDROID_LIBRARIES),)
|
||||||
need_compile_res := true
|
need_compile_res := true
|
||||||
endif
|
endif
|
||||||
@@ -82,7 +84,7 @@ LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_
|
|||||||
R_file_stamp := $(intermediates.COMMON)/src/R.stamp
|
R_file_stamp := $(intermediates.COMMON)/src/R.stamp
|
||||||
LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp)
|
LOCAL_INTERMEDIATE_TARGETS += $(R_file_stamp)
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
# For library we treat all the resource equal with no overlay.
|
# For library we treat all the resource equal with no overlay.
|
||||||
my_res_resources := $(all_resources)
|
my_res_resources := $(all_resources)
|
||||||
my_overlay_resources :=
|
my_overlay_resources :=
|
||||||
@@ -117,7 +119,7 @@ framework_res_package_export := \
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
import_proguard_flag_files := $(strip $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
|
import_proguard_flag_files := $(strip $(foreach l,$(LOCAL_STATIC_ANDROID_LIBRARIES),\
|
||||||
$(call intermediates-dir-for,JAVA_LIBRARIES,$(l),,COMMON)/export_proguard_flags))
|
$(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))
|
$(intermediates.COMMON)/export_proguard_flags: $(import_proguard_flag_files) $(addprefix $(LOCAL_PATH)/,$(LOCAL_EXPORT_PROGUARD_FLAG_FILES))
|
||||||
@@ -140,7 +142,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_M
|
|||||||
|
|
||||||
# add --non-constant-id to prevent inlining constants.
|
# add --non-constant-id to prevent inlining constants.
|
||||||
# AAR needs text symbol file R.txt.
|
# AAR needs text symbol file R.txt.
|
||||||
ifdef LOCAL_USE_AAPT2
|
ifeq ($(LOCAL_USE_AAPT2),true)
|
||||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --static-lib --output-text-symbols $(intermediates.COMMON)/R.txt
|
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --static-lib --output-text-symbols $(intermediates.COMMON)/R.txt
|
||||||
ifndef LOCAL_AAPT_NAMESPACES
|
ifndef LOCAL_AAPT_NAMESPACES
|
||||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS += --no-static-lib-packages
|
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_AAPT_FLAGS += --no-static-lib-packages
|
||||||
@@ -168,7 +170,7 @@ $(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_PROGUARD_OPTIONS_FILE := $(proguard_optio
|
|||||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME :=
|
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_PACKAGE_NAME :=
|
||||||
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR :=
|
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_MANIFEST_INSTRUMENTATION_FOR :=
|
||||||
|
|
||||||
ifdef LOCAL_USE_AAPT2
|
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.
|
# 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_compiled_res_base_dir := $(intermediates.COMMON)/flat-res/res
|
||||||
ifneq (,$(renderscript_target_api))
|
ifneq (,$(renderscript_target_api))
|
||||||
|
Reference in New Issue
Block a user