Merge "Support aconfig_declarations, aconfig_values and aconfig_value_set" into main
diff --git a/Changes.md b/Changes.md
index 5d8f104..6c0cf70 100644
--- a/Changes.md
+++ b/Changes.md
@@ -9,7 +9,11 @@
This behavior has been changed, and now the partition images only include what they'd have if you
did a clean build. This behavior can be disabled by setting the
-`BUILD_BROKEN_INCORRECT_PARTITION_IMAGES` environment variable.
+`BUILD_BROKEN_INCORRECT_PARTITION_IMAGES` environment variable or board config variable.
+
+Manually adding make rules that build to the staging directories without going through the make
+module system will not be compatible with this change. This includes many usages of
+`LOCAL_POST_INSTALL_CMD`.
## Perform validation of Soong plugins
diff --git a/cogsetup.sh b/cogsetup.sh
new file mode 100644
index 0000000..02fcc8f
--- /dev/null
+++ b/cogsetup.sh
@@ -0,0 +1,89 @@
+#
+# Copyright (C) 2023 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.
+#
+
+# This file is executed by build/envsetup.sh, and can use anything
+# defined in envsetup.sh.
+function _create_out_symlink_for_cog() {
+ if [[ "${OUT_DIR}" == "" ]]; then
+ OUT_DIR="out"
+ fi
+
+ if [[ -L "${OUT_DIR}" ]]; then
+ return
+ fi
+ if [ -d "${OUT_DIR}" ]; then
+ echo -e "\tOutput directory ${OUT_DIR} cannot be present in a Cog workspace."
+ echo -e "\tDelete \"${OUT_DIR}\" or create a symlink from \"${OUT_DIR}\" to a directory outside your workspace."
+ return 1
+ fi
+
+ DEFAULT_OUTPUT_DIR="${HOME}/.cog/android-build-out"
+ mkdir -p ${DEFAULT_OUTPUT_DIR}
+ ln -s ${DEFAULT_OUTPUT_DIR} `pwd`/out
+}
+
+# This function moves the reclient binaries into a directory that exists in a
+# non-cog part of the overall filesystem. This is to workaround the problem
+# described in b/289391270.
+function _copy_reclient_binaries_from_cog() {
+ local NONCOG_RECLIENT_BIN_DIR="${HOME}/.cog/reclient/bin"
+ if [ ! -d "$NONCOG_RECLIENT_BIN_DIR" ]; then
+ # Create the non cog directory if it doesn't exist.
+ mkdir -p ${NONCOG_RECLIENT_BIN_DIR}
+ else
+ # Clear out the non cog directory if it does exist.
+ rm -f ${NONCOG_RECLIENT_BIN_DIR}/*
+ fi
+
+ local TOP=$(gettop)
+
+ # Copy the binaries out of live.
+ cp $TOP/prebuilts/remoteexecution-client/live/* $NONCOG_RECLIENT_BIN_DIR
+
+ # Finally set the RBE_DIR env var to point to the out-of-cog directory.
+ export RBE_DIR=$NONCOG_RECLIENT_BIN_DIR
+}
+
+# This function sets up the build environment to be appropriate for Cog.
+function _setup_cog_env() {
+ _create_out_symlink_for_cog
+ if [ "$?" -eq "1" ]; then
+ echo -e "\e[0;33mWARNING:\e[00m Cog environment setup failed!"
+ return 1
+ fi
+ _copy_reclient_binaries_from_cog
+
+ export ANDROID_BUILD_ENVIRONMENT_CONFIG="googler-cog"
+
+ # Running repo command within Cog workspaces is not supported, so override
+ # it with this function. If the user is running repo within a Cog workspace,
+ # we'll fail with an error, otherwise, we run the original repo command with
+ # the given args.
+ ORIG_REPO_PATH=`which repo`
+ function repo {
+ if [[ "${PWD}" == /google/cog/* ]]; then
+ echo "\e[01;31mERROR:\e[0mrepo command is disallowed within Cog workspaces."
+ return 1
+ fi
+ ${ORIG_REPO_PATH} "$@"
+ }
+}
+
+if [[ "${PWD}" != /google/cog/* ]]; then
+ echo -e "\e[01;31mERROR:\e[0m This script must be run from a Cog workspace."
+fi
+
+_setup_cog_env
\ No newline at end of file
diff --git a/core/Makefile b/core/Makefile
index f1b2d29..a591fbb 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -3449,7 +3449,7 @@
skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(systemimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(systemimage_intermediates)/file_list.txt) \
$(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \
|| ( mkdir -p $${DIST_DIR}; \
cp $(INSTALLED_FILES_FILE) $${DIST_DIR}/installed-files-rescued.txt; \
@@ -3558,7 +3558,7 @@
$(call generate-image-prop-dictionary, $(userdataimage_intermediates)/userdata_image_info.txt,userdata,skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(userdataimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(userdataimage_intermediates)/file_list.txt) \
$(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt \
$(INSTALLED_USERDATAIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE))
@@ -3617,7 +3617,7 @@
$(call generate-image-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt,cache,skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(cacheimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(cacheimage_intermediates)/file_list.txt) \
$(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt \
$(INSTALLED_CACHEIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE))
@@ -3701,7 +3701,7 @@
$(call generate-image-prop-dictionary, $(systemotherimage_intermediates)/system_other_image_info.txt,system,skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(systemotherimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(systemotherimage_intermediates)/file_list.txt) \
$(TARGET_OUT_SYSTEM_OTHER) $(systemotherimage_intermediates)/system_other_image_info.txt \
$(INSTALLED_SYSTEMOTHERIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_SYSTEMOTHERIMAGE_TARGET),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE))
@@ -3804,7 +3804,7 @@
$(call generate-image-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt,vendor,skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(vendorimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(vendorimage_intermediates)/file_list.txt) \
$(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt \
$(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET) $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_VENDORIMAGE_PARTITION_SIZE))
@@ -3874,7 +3874,7 @@
$(call generate-image-prop-dictionary, $(productimage_intermediates)/product_image_info.txt,product,skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(productimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(productimage_intermediates)/file_list.txt) \
$(TARGET_OUT_PRODUCT) $(productimage_intermediates)/product_image_info.txt \
$(INSTALLED_PRODUCTIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_PRODUCTIMAGE_TARGET),$(BOARD_PRODUCTIMAGE_PARTITION_SIZE))
@@ -3939,7 +3939,7 @@
$(call generate-image-prop-dictionary, $(system_extimage_intermediates)/system_ext_image_info.txt,system_ext, skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(system_extimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(system_extimage_intermediates)/file_list.txt) \
$(TARGET_OUT_SYSTEM_EXT) \
$(system_extimage_intermediates)/system_ext_image_info.txt \
$(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \
@@ -4027,7 +4027,7 @@
skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(odmimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(odmimage_intermediates)/file_list.txt) \
$(TARGET_OUT_ODM) $(odmimage_intermediates)/odm_image_info.txt \
$(INSTALLED_ODMIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_ODMIMAGE_TARGET),$(BOARD_ODMIMAGE_PARTITION_SIZE))
@@ -4093,7 +4093,7 @@
vendor_dlkm, skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(vendor_dlkmimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(vendor_dlkmimage_intermediates)/file_list.txt) \
$(TARGET_OUT_VENDOR_DLKM) $(vendor_dlkmimage_intermediates)/vendor_dlkm_image_info.txt \
$(INSTALLED_VENDOR_DLKMIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_VENDOR_DLKMIMAGE_TARGET),$(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE))
@@ -4159,7 +4159,7 @@
odm_dlkm, skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(odm_dlkmimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(odm_dlkmimage_intermediates)/file_list.txt) \
$(TARGET_OUT_ODM_DLKM) $(odm_dlkmimage_intermediates)/odm_dlkm_image_info.txt \
$(INSTALLED_ODM_DLKMIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_ODM_DLKMIMAGE_TARGET),$(BOARD_ODM_DLKMIMAGE_PARTITION_SIZE))
@@ -4227,7 +4227,7 @@
system_dlkm, skip_fsck=true)
PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \
$(BUILD_IMAGE) \
- --input-directory-filter-file $(system_dlkmimage_intermediates)/file_list.txt \
+ $(if $(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES),,--input-directory-filter-file $(system_dlkmimage_intermediates)/file_list.txt) \
$(TARGET_OUT_SYSTEM_DLKM) $(system_dlkmimage_intermediates)/system_dlkm_image_info.txt \
$(INSTALLED_SYSTEM_DLKMIMAGE_TARGET) $(TARGET_OUT)
$(call assert-max-image-size,$(INSTALLED_SYSTEM_DLKMIMAGE_TARGET),$(BOARD_SYSTEM_DLKMIMAGE_PARTITION_SIZE))
@@ -4979,6 +4979,50 @@
$(INTERNAL_PVMFWIMAGE_FILES) \
# -----------------------------------------------------------------
+# Run apex_sepolicy_tests for all installed APEXes
+
+ifeq (,$(TARGET_BUILD_UNBUNDLED))
+intermediate := $(call intermediates-dir-for,PACKAGING,apex_sepolicy_tests)
+apex_dirs := \
+ $(TARGET_OUT)/apex/% \
+ $(TARGET_OUT_SYSTEM_EXT)/apex/% \
+ $(TARGET_OUT_VENDOR)/apex/% \
+ $(TARGET_OUT_PRODUCT)/apex/% \
+
+apex_files := $(sort $(filter $(apex_dirs), $(INTERNAL_ALLIMAGES_FILES)))
+apex_dirs :=
+
+# $1: apex file
+# $2: output file
+define _run_apex_sepolicy_tests
+$2: $1 \
+ $(HOST_OUT_EXECUTABLES)/apex_sepolicy_tests \
+ $(HOST_OUT_EXECUTABLES)/deapexer \
+ $(HOST_OUT_EXECUTABLES)/debugfs_static
+ @rm -rf $$@
+ @mkdir -p $(dir $$@)
+ $(HOST_OUT_EXECUTABLES)/apex_sepolicy_tests --all -f <($(HOST_OUT_EXECUTABLES)/deapexer --debugfs_path $(HOST_OUT_EXECUTABLES)/debugfs_static list -Z $$<)
+ @touch $$@
+endef
+
+# $1: apex file list
+define run_apex_sepolicy_tests
+$(foreach apex_file,$1, \
+ $(eval passfile := $(patsubst $(PRODUCT_OUT)/%,$(intermediate)/%.pass,$(apex_file))) \
+ $(eval $(call _run_apex_sepolicy_tests,$(apex_file),$(passfile))) \
+ $(passfile))
+endef
+
+.PHONY: run_apex_sepolicy_tests
+run_apex_sepolicy_tests: $(call run_apex_sepolicy_tests,$(apex_files))
+
+droid_targets: run_apex_sepolicy_tests
+
+apex_files :=
+intermediate :=
+endif # TARGET_BUILD_UNBUNDLED
+
+# -----------------------------------------------------------------
# Check VINTF of build
# Note: vendor_dlkm, odm_dlkm, and system_dlkm does not have VINTF files.
@@ -5588,7 +5632,7 @@
$(hide) echo "flash vbmeta_system" >> $@
endif
ifneq (,$(strip $(BOARD_AVB_VBMETA_VENDOR)))
- $(hide) echo "flash --apply-vbmeta vbmeta_vendor" >> $@
+ $(hide) echo "flash vbmeta_vendor" >> $@
endif
ifneq (,$(strip $(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)))
$(hide) $(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS), \
diff --git a/core/OWNERS b/core/OWNERS
index eb1d5c3..88f6d06 100644
--- a/core/OWNERS
+++ b/core/OWNERS
@@ -5,3 +5,5 @@
# For version updates
per-file version_defaults.mk = aseaton@google.com,lubomir@google.com,pscovanner@google.com,bkhalife@google.com,jainne@google.com
+# For sdk extensions version updates
+per-file version_defaults.mk = amhk@google.com,gurpreetgs@google.com,mkhokhlova@google.com,robertogil@google.com
diff --git a/core/android_soong_config_vars.mk b/core/android_soong_config_vars.mk
index 718500d..4dd66c9 100644
--- a/core/android_soong_config_vars.mk
+++ b/core/android_soong_config_vars.mk
@@ -154,8 +154,11 @@
$(call add_soong_config_var_value,ANDROID,avf_kernel_modules_enabled,$(PRODUCT_AVF_KERNEL_MODULES_ENABLED))
endif
+$(call add_soong_config_var_value,ANDROID,release_avf_enable_dice_changes,$(RELEASE_AVF_ENABLE_LLPVM_CHANGES))
+$(call add_soong_config_var_value,ANDROID,release_avf_enable_remote_attestation,$(RELEASE_AVF_ENABLE_REMOTE_ATTESTATION))
$(call add_soong_config_var_value,ANDROID,release_avf_enable_multi_tenant_microdroid_vm,$(RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM))
$(call add_soong_config_var_value,ANDROID,release_avf_enable_device_assignment,$(RELEASE_AVF_ENABLE_DEVICE_ASSIGNMENT))
+$(call add_soong_config_var_value,ANDROID,release_avf_enable_dice_changes,$(RELEASE_AVF_ENABLE_DICE_CHANGES))
$(call add_soong_config_var_value,ANDROID,release_avf_enable_vendor_modules,$(RELEASE_AVF_ENABLE_VENDOR_MODULES))
# Enable system_server optimizations by default unless explicitly set or if
diff --git a/core/board_config.mk b/core/board_config.mk
index 2699512..eb4c5ec 100644
--- a/core/board_config.mk
+++ b/core/board_config.mk
@@ -187,6 +187,7 @@
BUILD_BROKEN_USES_NETWORK \
BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE \
BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES \
+ BUILD_BROKEN_INCORRECT_PARTITION_IMAGES \
_build_broken_var_list += \
$(foreach m,$(AVAILABLE_BUILD_MODULE_TYPES) \
diff --git a/core/config.mk b/core/config.mk
index 8ff85cf..c339590 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -1224,8 +1224,12 @@
TARGET_AVAILABLE_SDK_VERSIONS := $(filter-out %/module-lib %/system-server,$(TARGET_AVAILABLE_SDK_VERSIONS))
TARGET_AVAIALBLE_SDK_VERSIONS := $(call numerically_sort,$(TARGET_AVAILABLE_SDK_VERSIONS))
-TARGET_SDK_VERSIONS_WITHOUT_JAVA_18_SUPPORT := $(call numbers_less_than,24,$(TARGET_AVAILABLE_SDK_VERSIONS))
-TARGET_SDK_VERSIONS_WITHOUT_JAVA_19_SUPPORT := $(call numbers_less_than,30,$(TARGET_AVAILABLE_SDK_VERSIONS))
+TARGET_SDK_VERSIONS_WITHOUT_JAVA_1_8_SUPPORT := $(call numbers_less_than,24,$(TARGET_AVAILABLE_SDK_VERSIONS))
+TARGET_SDK_VERSIONS_WITHOUT_JAVA_1_9_SUPPORT := $(call numbers_less_than,30,$(TARGET_AVAILABLE_SDK_VERSIONS))
+TARGET_SDK_VERSIONS_WITHOUT_JAVA_11_SUPPORT := $(call numbers_less_than,32,$(TARGET_AVAILABLE_SDK_VERSIONS))
+TARGET_SDK_VERSIONS_WITHOUT_JAVA_17_SUPPORT := $(call numbers_less_than,34,$(TARGET_AVAILABLE_SDK_VERSIONS))
+
+JAVA_LANGUAGE_VERSIONS_WITHOUT_SYSTEM_MODULES := 1.7 1.8
# This is the standard way to name a directory containing prebuilt target
# objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so
diff --git a/core/java_common.mk b/core/java_common.mk
index 0e03d0b..a5ed057 100644
--- a/core/java_common.mk
+++ b/core/java_common.mk
@@ -25,15 +25,19 @@
# Host modules always default to 1.9
LOCAL_JAVA_LANGUAGE_VERSION := 1.9
else
- ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_18_SUPPORT)))
+ ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_1_8_SUPPORT)))
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
- else ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_19_SUPPORT)))
+ else ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_1_9_SUPPORT)))
LOCAL_JAVA_LANGUAGE_VERSION := 1.8
+ else ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_11_SUPPORT)))
+ LOCAL_JAVA_LANGUAGE_VERSION := 1.9
+ else ifneq (,$(filter $(LOCAL_SDK_VERSION), $(TARGET_SDK_VERSIONS_WITHOUT_JAVA_17_SUPPORT)))
+ LOCAL_JAVA_LANGUAGE_VERSION := 11
else ifneq (,$(LOCAL_SDK_VERSION)$(TARGET_BUILD_USE_PREBUILT_SDKS))
# TODO(ccross): allow 1.9 for current and unbundled once we have SDK system modules
LOCAL_JAVA_LANGUAGE_VERSION := 1.8
else
- LOCAL_JAVA_LANGUAGE_VERSION := 1.9
+ LOCAL_JAVA_LANGUAGE_VERSION := 17
endif
endif
endif
@@ -410,7 +414,7 @@
full_java_system_modules_deps :=
my_system_modules_dir :=
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_USE_SYSTEM_MODULES :=
-ifeq ($(LOCAL_JAVA_LANGUAGE_VERSION),1.9)
+ifeq (,$(filter $(LOCAL_JAVA_LANGUAGE_VERSION),$(JAVA_LANGUAGE_VERSIONS_WITHOUT_SYSTEM_MODULES)))
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_USE_SYSTEM_MODULES := true
ifdef my_system_modules
ifneq ($(my_system_modules),none)
diff --git a/core/packaging/flags.mk b/core/packaging/flags.mk
index 697fe24..ca319ce 100644
--- a/core/packaging/flags.mk
+++ b/core/packaging/flags.mk
@@ -69,31 +69,45 @@
# Aconfig Flags
# Create a summary file of build flags for each partition
-# $(1): built aconfig flags textprot file (out)
-# $(2): installed aconfig flags textprot file (out)
+# $(1): built aconfig flags file (out)
+# $(2): installed aconfig flags file (out)
# $(3): input aconfig files for the partition (in)
+# $(4): file format, passed to `aconfig dump` (in)
+# $(5): text placed in aconfig file when no flags present (out)
define generate-partition-aconfig-flag-file
$(eval $(strip $(1)): PRIVATE_OUT := $(strip $(1)))
$(eval $(strip $(1)): PRIVATE_IN := $(strip $(3)))
$(strip $(1)): $(ACONFIG) $(strip $(3))
mkdir -p $$(dir $$(PRIVATE_OUT))
$$(if $$(PRIVATE_IN), \
- $$(ACONFIG) dump --format textproto --out $$(PRIVATE_OUT) \
+ $$(ACONFIG) dump --format $(4) --out $$(PRIVATE_OUT) \
$$(addprefix --cache ,$$(PRIVATE_IN)), \
- echo "# No aconfig flags" > $$(PRIVATE_OUT) \
+ echo $(5) > $$(PRIVATE_OUT) \
)
$(call copy-one-file, $(1), $(2))
endef
$(foreach partition, $(_FLAG_PARTITIONS), \
- $(eval aconfig_flag_summaries.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/aconfig_flags.textproto) \
+ $(eval aconfig_flag_summaries_textproto.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/aconfig_flags.textproto) \
+ $(eval aconfig_flag_summaries_protobuf.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/aconfig_flags.pb) \
$(eval $(call generate-partition-aconfig-flag-file, \
$(TARGET_OUT_FLAGS)/$(partition)/aconfig_flags.textproto, \
- $(aconfig_flag_summaries.$(partition)), \
+ $(aconfig_flag_summaries_textproto.$(partition)), \
$(sort $(foreach m,$(call register-names-for-partition, $(partition)), \
$(ALL_MODULES.$(m).ACONFIG_FILES) \
- )) \
+ )), \
+ textproto, \
+ "# No aconfig flags" \
+ )) \
+ $(eval $(call generate-partition-aconfig-flag-file, \
+ $(TARGET_OUT_FLAGS)/$(partition)/aconfig_flags.pb, \
+ $(aconfig_flag_summaries_protobuf.$(partition)), \
+ $(sort $(foreach m,$(call register-names-for-partition, $(partition)), \
+ $(ALL_MODULES.$(m).ACONFIG_FILES) \
+ )), \
+ protobuf, \
+ "" \
)) \
)
@@ -103,7 +117,8 @@
required_flags_files := \
$(sort $(foreach partition, $(filter $(IMAGES_TO_BUILD), $(_FLAG_PARTITIONS)), \
$(build_flag_summaries.$(partition)) \
- $(aconfig_flag_summaries.$(partition)) \
+ $(aconfig_flag_summaries_textproto.$(partition)) \
+ $(aconfig_flag_summaries_protobuf.$(partition)) \
))
ALL_DEFAULT_INSTALLED_MODULES += $(required_flags_files)
@@ -118,6 +133,7 @@
required_flags_files:=
$(foreach partition, $(_FLAG_PARTITIONS), \
$(eval build_flag_summaries.$(partition):=) \
- $(eval aconfig_flag_summaries.$(partition):=) \
+ $(eval aconfig_flag_summaries_textproto.$(partition):=) \
+ $(eval aconfig_flag_summaries_protobuf.$(partition):=) \
)
diff --git a/core/product_config.mk b/core/product_config.mk
index 9f0cf25..b475d75 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -282,7 +282,11 @@
#############################################################################
# Check product include tag allowlist
-BLUEPRINT_INCLUDE_TAGS_ALLOWLIST := com.android.mainline_go com.android.mainline
+BLUEPRINT_INCLUDE_TAGS_ALLOWLIST := \
+ com.android.mainline_go \
+ com.android.mainline \
+ mainline_module_prebuilt_nightly \
+ mainline_module_prebuilt_monthly_release
.KATI_READONLY := BLUEPRINT_INCLUDE_TAGS_ALLOWLIST
$(foreach include_tag,$(PRODUCT_INCLUDE_TAGS), \
$(if $(filter $(include_tag),$(BLUEPRINT_INCLUDE_TAGS_ALLOWLIST)),,\
@@ -293,7 +297,8 @@
# we still analyse it.
# This means that in setups where we two have two prebuilts of module_sdk, we need a "default" to use in analysis
# This should be a no-op in aosp and internal since no Android.bp file contains blueprint_package_includes
-PRODUCT_INCLUDE_TAGS += com.android.mainline # Use the big android one by default
+# Use the big android one and main-based prebuilts by default
+PRODUCT_INCLUDE_TAGS += com.android.mainline mainline_module_prebuilt_nightly
endif
#############################################################################
@@ -546,30 +551,12 @@
$(KATI_obsolete_var OVERRIDE_PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE,Use PRODUCT_ENFORCE_PRODUCT_PARTITION_INTERFACE instead)
-# If build command defines PRODUCT_USE_PRODUCT_VNDK_OVERRIDE as `false`,
-# PRODUCT_PRODUCT_VNDK_VERSION will not be defined automatically.
-# PRODUCT_USE_PRODUCT_VNDK_OVERRIDE can be used for testing only.
-PRODUCT_USE_PRODUCT_VNDK := false
-ifneq ($(PRODUCT_USE_PRODUCT_VNDK_OVERRIDE),)
- PRODUCT_USE_PRODUCT_VNDK := $(PRODUCT_USE_PRODUCT_VNDK_OVERRIDE)
-else ifeq ($(PRODUCT_SHIPPING_API_LEVEL),)
- # No shipping level defined. Enforce the product interface by default.
- PRODUCT_USE_PRODUCT_VNDK := true
-else ifeq ($(call math_gt,$(PRODUCT_SHIPPING_API_LEVEL),29),true)
- # Enforce product interface for VNDK if PRODUCT_SHIPPING_API_LEVEL is greater
- # than 29.
- PRODUCT_USE_PRODUCT_VNDK := true
+# From Android V, Define PRODUCT_PRODUCT_VNDK_VERSION as current by default.
+# This is required to make all devices have product variants.
+ifndef PRODUCT_PRODUCT_VNDK_VERSION
+ PRODUCT_PRODUCT_VNDK_VERSION := current
endif
-ifeq ($(PRODUCT_USE_PRODUCT_VNDK),true)
- ifndef PRODUCT_PRODUCT_VNDK_VERSION
- PRODUCT_PRODUCT_VNDK_VERSION := current
- endif
-endif
-
-$(KATI_obsolete_var PRODUCT_USE_PRODUCT_VNDK,Use PRODUCT_PRODUCT_VNDK_VERSION instead)
-$(KATI_obsolete_var PRODUCT_USE_PRODUCT_VNDK_OVERRIDE,Use PRODUCT_PRODUCT_VNDK_VERSION instead)
-
ifdef PRODUCT_ENFORCE_RRO_EXEMPTED_TARGETS
$(error PRODUCT_ENFORCE_RRO_EXEMPTED_TARGETS is deprecated, consider using RRO for \
$(PRODUCT_ENFORCE_RRO_EXEMPTED_TARGETS))
diff --git a/core/soong_config.mk b/core/soong_config.mk
index f004c00..e00447a 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -275,16 +275,17 @@
$(call add_json_str, ShippingApiLevel, $(PRODUCT_SHIPPING_API_LEVEL))
-$(call add_json_list, BuildBrokenPluginValidation, $(BUILD_BROKEN_PLUGIN_VALIDATION))
-$(call add_json_bool, BuildBrokenClangProperty, $(filter true,$(BUILD_BROKEN_CLANG_PROPERTY)))
-$(call add_json_bool, BuildBrokenClangAsFlags, $(filter true,$(BUILD_BROKEN_CLANG_ASFLAGS)))
-$(call add_json_bool, BuildBrokenClangCFlags, $(filter true,$(BUILD_BROKEN_CLANG_CFLAGS)))
-$(call add_json_bool, GenruleSandboxing, $(filter true,$(GENRULE_SANDBOXING)))
-$(call add_json_bool, BuildBrokenEnforceSyspropOwner, $(filter true,$(BUILD_BROKEN_ENFORCE_SYSPROP_OWNER)))
-$(call add_json_bool, BuildBrokenTrebleSyspropNeverallow, $(filter true,$(BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW)))
-$(call add_json_bool, BuildBrokenUsesSoongPython2Modules, $(filter true,$(BUILD_BROKEN_USES_SOONG_PYTHON2_MODULES)))
-$(call add_json_bool, BuildBrokenVendorPropertyNamespace, $(filter true,$(BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE)))
-$(call add_json_list, BuildBrokenInputDirModules, $(BUILD_BROKEN_INPUT_DIR_MODULES))
+$(call add_json_list, BuildBrokenPluginValidation, $(BUILD_BROKEN_PLUGIN_VALIDATION))
+$(call add_json_bool, BuildBrokenClangProperty, $(filter true,$(BUILD_BROKEN_CLANG_PROPERTY)))
+$(call add_json_bool, BuildBrokenClangAsFlags, $(filter true,$(BUILD_BROKEN_CLANG_ASFLAGS)))
+$(call add_json_bool, BuildBrokenClangCFlags, $(filter true,$(BUILD_BROKEN_CLANG_CFLAGS)))
+$(call add_json_bool, GenruleSandboxing, $(filter true,$(GENRULE_SANDBOXING)))
+$(call add_json_bool, BuildBrokenEnforceSyspropOwner, $(filter true,$(BUILD_BROKEN_ENFORCE_SYSPROP_OWNER)))
+$(call add_json_bool, BuildBrokenTrebleSyspropNeverallow, $(filter true,$(BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW)))
+$(call add_json_bool, BuildBrokenUsesSoongPython2Modules, $(filter true,$(BUILD_BROKEN_USES_SOONG_PYTHON2_MODULES)))
+$(call add_json_bool, BuildBrokenVendorPropertyNamespace, $(filter true,$(BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE)))
+$(call add_json_bool, BuildBrokenIncorrectPartitionImages, $(filter true,$(BUILD_BROKEN_INCORRECT_PARTITION_IMAGES)))
+$(call add_json_list, BuildBrokenInputDirModules, $(BUILD_BROKEN_INPUT_DIR_MODULES))
$(call add_json_list, BuildWarningBadOptionalUsesLibsAllowlist, $(BUILD_WARNING_BAD_OPTIONAL_USES_LIBS_ALLOWLIST))
diff --git a/core/version_util.mk b/core/version_util.mk
index 457f0f7..dca7482 100644
--- a/core/version_util.mk
+++ b/core/version_util.mk
@@ -169,17 +169,14 @@
ifndef PLATFORM_VNDK_VERSION
# This is the definition of the VNDK version for the current VNDK libraries.
- # The version is only available when PLATFORM_VERSION_CODENAME == REL.
- # Otherwise, it will be set to a CODENAME version. The ABI is allowed to be
- # changed only before the Android version is released. Once
- # PLATFORM_VNDK_VERSION is set to actual version, the ABI for this version
- # will be frozon and emit build errors if any ABI for the VNDK libs are
- # changed.
- # After that the snapshot of the VNDK with this version will be generated.
- #
- # The VNDK version follows PLATFORM_SDK_VERSION.
+ # With trunk stable, VNDK will not be frozen but deprecated.
+ # This version will be removed with the VNDK deprecation.
ifeq (REL,$(PLATFORM_VERSION_CODENAME))
- PLATFORM_VNDK_VERSION := $(PLATFORM_SDK_VERSION)
+ ifdef RELEASE_PLATFORM_VNDK_VERSION
+ PLATFORM_VNDK_VERSION := $(RELEASE_PLATFORM_VNDK_VERSION)
+ else
+ PLATFORM_VNDK_VERSION := $(PLATFORM_SDK_VERSION)
+ endif
else
PLATFORM_VNDK_VERSION := $(PLATFORM_VERSION_CODENAME)
endif
diff --git a/envsetup.sh b/envsetup.sh
index 0a90460..63837ec 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -2006,6 +2006,11 @@
fi
done
done
+
+ if [[ "${PWD}" == /google/cog/* ]]; then
+ f="build/make/cogsetup.sh"
+ echo "including $f"; . "$T/$f"
+ fi
}
function showcommands() {
diff --git a/target/product/gsi/Android.mk b/target/product/gsi/Android.mk
index adeb159..15752aa 100644
--- a/target/product/gsi/Android.mk
+++ b/target/product/gsi/Android.mk
@@ -1,5 +1,14 @@
LOCAL_PATH:= $(call my-dir)
+# VNDK will not be frozen if the PLATFORM_VNDK_VERSION is a codename or greater than 34
+ifeq ($(call math_is_number,$(PLATFORM_VNDK_VERSION)),)
+UNFROZEN_VNDK := true
+else
+ifeq ($(call math_gt,$(PLATFORM_VNDK_VERSION),34),true)
+UNFROZEN_VNDK := true
+endif
+endif
+
#####################################################################
# list of vndk libraries from the source code.
INTERNAL_VNDK_LIB_LIST := $(SOONG_VNDK_LIBRARIES_FILE)
@@ -9,10 +18,14 @@
# TODO(b/62012285): the lib list should be stored somewhere under
# /prebuilts/vndk
ifeq (REL,$(PLATFORM_VERSION_CODENAME))
+ifndef UNFROZEN_VNDK
LATEST_VNDK_LIB_LIST := $(LOCAL_PATH)/$(PLATFORM_VNDK_VERSION).txt
ifeq ($(wildcard $(LATEST_VNDK_LIB_LIST)),)
$(error $(LATEST_VNDK_LIB_LIST) file not found. Please copy "$(LOCAL_PATH)/current.txt" to "$(LATEST_VNDK_LIB_LIST)" and commit a CL for release branch)
endif
+else # UNFROZEN_VNDK
+LATEST_VNDK_LIB_LIST := $(LOCAL_PATH)/current.txt
+endif # UNFROZEN_VNDK
else
LATEST_VNDK_LIB_LIST := $(LOCAL_PATH)/current.txt
endif
diff --git a/tools/aconfig/src/codegen_cpp.rs b/tools/aconfig/src/codegen_cpp.rs
index 8c2d7ba..5eadf2a 100644
--- a/tools/aconfig/src/codegen_cpp.rs
+++ b/tools/aconfig/src/codegen_cpp.rs
@@ -38,9 +38,9 @@
let cpp_namespace = package.replace('.', "::");
ensure!(codegen::is_valid_name_ident(&header));
let context = Context {
- header: header.clone(),
- cpp_namespace,
- package: package.to_string(),
+ header: &header,
+ cpp_namespace: &cpp_namespace,
+ package,
readwrite,
for_test: codegen_mode == CodegenMode::Test,
class_elements,
@@ -77,10 +77,10 @@
}
#[derive(Serialize)]
-pub struct Context {
- pub header: String,
- pub cpp_namespace: String,
- pub package: String,
+pub struct Context<'a> {
+ pub header: &'a str,
+ pub cpp_namespace: &'a str,
+ pub package: &'a str,
pub readwrite: bool,
pub for_test: bool,
pub class_elements: Vec<ClassElement>,
@@ -364,6 +364,7 @@
const TEST_SOURCE_FILE_EXPECTED: &str = r#"
#include "com_android_aconfig_test.h"
#include <server_configurable_flags/get_flags.h>
+#include <unordered_map>
namespace com::android::aconfig::test {
@@ -517,7 +518,7 @@
for file in generated {
generated_files_map.insert(
String::from(file.path.to_str().unwrap()),
- String::from_utf8(file.contents.clone()).unwrap(),
+ String::from_utf8(file.contents).unwrap(),
);
}
diff --git a/tools/aconfig/src/codegen_java.rs b/tools/aconfig/src/codegen_java.rs
index c31d715..702ef22 100644
--- a/tools/aconfig/src/codegen_java.rs
+++ b/tools/aconfig/src/codegen_java.rs
@@ -118,6 +118,7 @@
const EXPECTED_FEATUREFLAGS_COMMON_CONTENT: &str = r#"
package com.android.aconfig.test;
+ /** @hide */
public interface FeatureFlags {
@com.android.aconfig.annotations.AssumeFalseForR8
boolean disabledRo();
@@ -132,11 +133,17 @@
const EXPECTED_FLAG_COMMON_CONTENT: &str = r#"
package com.android.aconfig.test;
+ /** @hide */
public final class Flags {
+ /** @hide */
public static final String FLAG_DISABLED_RO = "com.android.aconfig.test.disabled_ro";
+ /** @hide */
public static final String FLAG_DISABLED_RW = "com.android.aconfig.test.disabled_rw";
+ /** @hide */
public static final String FLAG_ENABLED_FIXED_RO = "com.android.aconfig.test.enabled_fixed_ro";
+ /** @hide */
public static final String FLAG_ENABLED_RO = "com.android.aconfig.test.enabled_ro";
+ /** @hide */
public static final String FLAG_ENABLED_RW = "com.android.aconfig.test.enabled_rw";
@com.android.aconfig.annotations.AssumeFalseForR8
@@ -163,29 +170,30 @@
package com.android.aconfig.test;
import java.util.HashMap;
import java.util.Map;
+ /** @hide */
public class FakeFeatureFlagsImpl implements FeatureFlags {
public FakeFeatureFlagsImpl() {
resetAll();
}
@Override
public boolean disabledRo() {
- return getFlag(Flags.FLAG_DISABLED_RO);
+ return getValue(Flags.FLAG_DISABLED_RO);
}
@Override
public boolean disabledRw() {
- return getFlag(Flags.FLAG_DISABLED_RW);
+ return getValue(Flags.FLAG_DISABLED_RW);
}
@Override
public boolean enabledFixedRo() {
- return getFlag(Flags.FLAG_ENABLED_FIXED_RO);
+ return getValue(Flags.FLAG_ENABLED_FIXED_RO);
}
@Override
public boolean enabledRo() {
- return getFlag(Flags.FLAG_ENABLED_RO);
+ return getValue(Flags.FLAG_ENABLED_RO);
}
@Override
public boolean enabledRw() {
- return getFlag(Flags.FLAG_ENABLED_RW);
+ return getValue(Flags.FLAG_ENABLED_RW);
}
public void setFlag(String flagName, boolean value) {
if (!this.mFlagMap.containsKey(flagName)) {
@@ -198,7 +206,7 @@
entry.setValue(null);
}
}
- private boolean getFlag(String flagName) {
+ private boolean getValue(String flagName) {
Boolean value = this.mFlagMap.get(flagName);
if (value == null) {
throw new IllegalArgumentException(flagName + " is not set");
@@ -234,6 +242,7 @@
let expect_featureflagsimpl_content = r#"
package com.android.aconfig.test;
import android.provider.DeviceConfig;
+ /** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
@Override
public boolean disabledRo() {
@@ -241,7 +250,7 @@
}
@Override
public boolean disabledRw() {
- return DeviceConfig.getBoolean(
+ return getValue(
"aconfig_test",
"com.android.aconfig.test.disabled_rw",
false
@@ -257,12 +266,33 @@
}
@Override
public boolean enabledRw() {
- return DeviceConfig.getBoolean(
+ return getValue(
"aconfig_test",
"com.android.aconfig.test.enabled_rw",
true
);
}
+ private boolean getValue(String nameSpace,
+ String flagName, boolean defaultValue) {
+ boolean value = defaultValue;
+ try {
+ value = DeviceConfig.getBoolean(
+ nameSpace,
+ flagName,
+ defaultValue
+ );
+ } catch (NullPointerException e) {
+ throw new RuntimeException(
+ "Cannot read value of flag " + flagName + " from DeviceConfig. " +
+ "It could be that the code using flag executed " +
+ "before SettingsProvider initialization. " +
+ "Please use fixed read-only flag by adding " +
+ "is_fixed_read_only: true in flag declaration.",
+ e
+ );
+ }
+ return value;
+ }
}
"#;
let mut file_set = HashMap::from([
@@ -282,7 +312,7 @@
None,
crate::test::first_significant_code_diff(
file_set.get(file_path).unwrap(),
- &String::from_utf8(file.contents.clone()).unwrap()
+ &String::from_utf8(file.contents).unwrap()
),
"File {} content is not correct",
file_path
@@ -316,6 +346,7 @@
"#;
let expect_featureflagsimpl_content = r#"
package com.android.aconfig.test;
+ /** @hide */
public final class FeatureFlagsImpl implements FeatureFlags {
@Override
public boolean disabledRo() {
@@ -362,7 +393,7 @@
None,
crate::test::first_significant_code_diff(
file_set.get(file_path).unwrap(),
- &String::from_utf8(file.contents.clone()).unwrap()
+ &String::from_utf8(file.contents).unwrap()
),
"File {} content is not correct",
file_path
diff --git a/tools/aconfig/src/main.rs b/tools/aconfig/src/main.rs
index 84073f7..7e44baf 100644
--- a/tools/aconfig/src/main.rs
+++ b/tools/aconfig/src/main.rs
@@ -137,14 +137,14 @@
}
fn write_output_file_realtive_to_dir(root: &Path, output_file: &OutputFile) -> Result<()> {
- let path = root.join(output_file.path.clone());
+ let path = root.join(&output_file.path);
let parent = path
.parent()
.ok_or(anyhow!("unable to locate parent of output file {}", path.display()))?;
fs::create_dir_all(parent)
.with_context(|| format!("failed to create directory {}", parent.display()))?;
- let mut file = fs::File::create(path.clone())
- .with_context(|| format!("failed to open {}", path.display()))?;
+ let mut file =
+ fs::File::create(&path).with_context(|| format!("failed to open {}", path.display()))?;
file.write_all(&output_file.contents)
.with_context(|| format!("failed to write to {}", path.display()))?;
Ok(())
diff --git a/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template b/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
index 82bea81..e4a1fb7 100644
--- a/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
+++ b/tools/aconfig/templates/FakeFeatureFlagsImpl.java.template
@@ -3,6 +3,7 @@
import java.util.HashMap;
import java.util.Map;
+/** @hide */
public class FakeFeatureFlagsImpl implements FeatureFlags \{
public FakeFeatureFlagsImpl() \{
resetAll();
@@ -11,7 +12,7 @@
{{ for item in class_elements}}
@Override
public boolean {item.method_name}() \{
- return getFlag(Flags.FLAG_{item.flag_name_constant_suffix});
+ return getValue(Flags.FLAG_{item.flag_name_constant_suffix});
}
{{ endfor}}
public void setFlag(String flagName, boolean value) \{
@@ -27,7 +28,7 @@
}
}
- private boolean getFlag(String flagName) \{
+ private boolean getValue(String flagName) \{
Boolean value = this.mFlagMap.get(flagName);
if (value == null) \{
throw new IllegalArgumentException(flagName + " is not set");
diff --git a/tools/aconfig/templates/FeatureFlags.java.template b/tools/aconfig/templates/FeatureFlags.java.template
index 31cfdfc..9350d60 100644
--- a/tools/aconfig/templates/FeatureFlags.java.template
+++ b/tools/aconfig/templates/FeatureFlags.java.template
@@ -1,5 +1,6 @@
package {package_name};
+/** @hide */
public interface FeatureFlags \{
{{ for item in class_elements}}
{{ -if not item.is_read_write }}
diff --git a/tools/aconfig/templates/FeatureFlagsImpl.java.template b/tools/aconfig/templates/FeatureFlagsImpl.java.template
index 96de06c..3913fa4 100644
--- a/tools/aconfig/templates/FeatureFlagsImpl.java.template
+++ b/tools/aconfig/templates/FeatureFlagsImpl.java.template
@@ -3,12 +3,13 @@
{{ if is_read_write- }}
import android.provider.DeviceConfig;
{{ endif }}
+/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
{{ for item in class_elements}}
@Override
public boolean {item.method_name}() \{
{{ -if item.is_read_write }}
- return DeviceConfig.getBoolean(
+ return getValue(
"{item.device_config_namespace}",
"{item.device_config_flag}",
{item.default_value}
@@ -18,9 +19,33 @@
{{ endif- }}
}
{{ endfor }}
+{{ if is_read_write- }}
+ private boolean getValue(String nameSpace,
+ String flagName, boolean defaultValue) \{
+ boolean value = defaultValue;
+ try \{
+ value = DeviceConfig.getBoolean(
+ nameSpace,
+ flagName,
+ defaultValue
+ );
+ } catch (NullPointerException e) \{
+ throw new RuntimeException(
+ "Cannot read value of flag " + flagName + " from DeviceConfig. " +
+ "It could be that the code using flag executed " +
+ "before SettingsProvider initialization. " +
+ "Please use fixed read-only flag by adding " +
+ "is_fixed_read_only: true in flag declaration.",
+ e
+ );
+ }
+ return value;
+ }
+{{ endif- }}
}
{{ else }}
{#- Generate only stub if in test mode #}
+/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
{{ for item in class_elements}}
@Override
diff --git a/tools/aconfig/templates/Flags.java.template b/tools/aconfig/templates/Flags.java.template
index 7f04700..39024a8 100644
--- a/tools/aconfig/templates/Flags.java.template
+++ b/tools/aconfig/templates/Flags.java.template
@@ -1,7 +1,9 @@
package {package_name};
+/** @hide */
public final class Flags \{
{{- for item in class_elements}}
+ /** @hide */
public static final String FLAG_{item.flag_name_constant_suffix} = "{item.device_config_flag}";
{{- endfor }}
{{ for item in class_elements}}
diff --git a/tools/aconfig/templates/cpp_source_file.template b/tools/aconfig/templates/cpp_source_file.template
index f373bc6..c0e7343 100644
--- a/tools/aconfig/templates/cpp_source_file.template
+++ b/tools/aconfig/templates/cpp_source_file.template
@@ -2,6 +2,9 @@
{{ if readwrite }}
#include <server_configurable_flags/get_flags.h>
{{ endif }}
+{{ if for_test }}
+#include <unordered_map>
+{{ endif }}
namespace {cpp_namespace} \{
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index ec53a47..4bcb8fc 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -194,7 +194,7 @@
'': {
'handlers': ['default'],
'propagate': True,
- 'level': 'INFO',
+ 'level': 'WARNING',
}
}
}
diff --git a/tools/releasetools/img_from_target_files.py b/tools/releasetools/img_from_target_files.py
index 5412b2a..a3e3681 100755
--- a/tools/releasetools/img_from_target_files.py
+++ b/tools/releasetools/img_from_target_files.py
@@ -64,7 +64,7 @@
OPTIONS.retrofit_dap = None
OPTIONS.build_super = None
OPTIONS.sparse_userimages = None
-OPTIONS.use_fastboot_info = False
+OPTIONS.use_fastboot_info = True
OPTIONS.build_super_image = None
def LoadOptions(input_file):
diff --git a/tools/releasetools/ota_from_raw_img.py b/tools/releasetools/ota_from_raw_img.py
index 63f88ea..0c1c05a 100644
--- a/tools/releasetools/ota_from_raw_img.py
+++ b/tools/releasetools/ota_from_raw_img.py
@@ -84,6 +84,7 @@
cmd.append("--is_partial_update")
if args.max_timestamp:
cmd.append("--max_timestamp=" + str(args.max_timestamp))
+ cmd.append("--partition_timestamps=boot:" + str(args.max_timestamp))
logger.info("Running %s", cmd)
subprocess.check_call(cmd)