Merge "Revert "Determine build_ota_package based on recovery.fstab install location"" into main
diff --git a/core/Makefile b/core/Makefile
index 5d82c21..ada5be5 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -5441,7 +5441,8 @@
ifneq (,$(BUILT_KERNEL_VERSION_FILE))
$(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC): $(BUILT_KERNEL_VERSION_FILE)
$(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC):
- cp $(BUILT_KERNEL_VERSION_FILE) $(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)
+ if ! cmp -s $(BUILT_KERNEL_VERSION_FILE) $@ ; then cp $(BUILT_KERNEL_VERSION_FILE) $@; fi
+.KATI_RESTAT: $(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)
else
# We make this a warning rather than an error to avoid breaking too many builds. When it happens,
# we use a placeholder as the kernel version, which is consumed by uffd_gc_utils.py.
diff --git a/core/android_soong_config_vars.mk b/core/android_soong_config_vars.mk
index 6c350f0..a205ab5 100644
--- a/core/android_soong_config_vars.mk
+++ b/core/android_soong_config_vars.mk
@@ -310,6 +310,17 @@
# Variables for controlling android.hardware.composer.hwc3-service.pixel
$(call soong_config_set,google_graphics,board_hwc_version,$(BOARD_HWC_VERSION))
+# Flag ExcludeExtractApk is to support "extract_apk" property for the following conditions.
+ifneq ($(WITH_DEXPREOPT),true)
+ $(call soong_config_set_bool,PrebuiltGmsCore,ExcludeExtractApk,true)
+endif
+ifeq ($(DONT_DEXPREOPT_PREBUILTS),true)
+ $(call soong_config_set_bool,PrebuiltGmsCore,ExcludeExtractApk,true)
+endif
+ifeq ($(WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY),true)
+ $(call soong_config_set_bool,PrebuiltGmsCore,ExcludeExtractApk,true)
+endif
+
# Variables for extra branches
# TODO(b/383238397): Use bootstrap_go_package to enable extra flags.
-include vendor/google/build/extra_soong_config_vars.mk
diff --git a/core/config.mk b/core/config.mk
index f94eacf..b892924 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -865,15 +865,18 @@
.KATI_READONLY := PLATFORM_SEPOLICY_VERSION BOARD_SEPOLICY_VERS
# A list of SEPolicy versions, besides PLATFORM_SEPOLICY_VERSION, that the framework supports.
-PLATFORM_SEPOLICY_COMPAT_VERSIONS := $(filter-out $(PLATFORM_SEPOLICY_VERSION), \
+PLATFORM_SEPOLICY_COMPAT_VERSIONS := \
29.0 \
30.0 \
31.0 \
32.0 \
33.0 \
34.0 \
+
+PLATFORM_SEPOLICY_COMPAT_VERSIONS += $(foreach ver,\
202404 \
- )
+ 202504 \
+ ,$(if $(filter true,$(call math_gt,$(PLATFORM_SEPOLICY_VERSION),$(ver))),$(ver)))
.KATI_READONLY := \
PLATFORM_SEPOLICY_COMPAT_VERSIONS \
diff --git a/core/product.mk b/core/product.mk
index 1b336b0..8031a34 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -501,6 +501,9 @@
_product_list_vars += PRODUCT_ALLOWED_ANDROIDMK_FILES
# When PRODUCT_IGNORE_ALL_ANDROIDMK is set to true, path of file that contains a list of allowed Android.mk files
_product_single_value_vars += PRODUCT_ANDROIDMK_ALLOWLIST_FILE
+# Setting PRODUCT_SOONG_ONLY will cause the build to default to --soong-only mode, and the main
+# kati invocation will not be run.
+_product_single_value_vars += PRODUCT_SOONG_ONLY
.KATI_READONLY := _product_single_value_vars _product_list_vars
_product_var_list :=$= $(_product_single_value_vars) $(_product_list_vars)
diff --git a/core/product_config.mk b/core/product_config.mk
index d18770b..019d711 100644
--- a/core/product_config.mk
+++ b/core/product_config.mk
@@ -699,4 +699,12 @@
product-build-image-config :=
+ifdef PRODUCT_SOONG_ONLY
+ ifneq ($(PRODUCT_SOONG_ONLY),true)
+ ifneq ($(PRODUCT_SOONG_ONLY),false)
+ $(error PRODUCT_SOONG_ONLY can only be true, false or unset)
+ endif
+ endif
+endif
+
$(call readonly-product-vars)
diff --git a/core/soong_config.mk b/core/soong_config.mk
index 4537824..b485285 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -386,6 +386,7 @@
$(foreach image_type,INIT_BOOT BOOT VENDOR_BOOT SYSTEM VENDOR CACHE USERDATA PRODUCT SYSTEM_EXT OEM ODM VENDOR_DLKM ODM_DLKM SYSTEM_DLKM VBMETA VBMETA_SYSTEM VBMETA_SYSTEM_DLKM VBMETA_VENDOR_DLKM, \
$(call add_json_map,$(call to-lower,$(image_type))) \
$(call add_json_bool, BuildingImage, $(filter true,$(BUILDING_$(image_type)_IMAGE))) \
+ $(call add_json_bool, PrebuiltImage, $(filter true,$(BOARD_PREBUILT_$(image_type)IMAGE))) \
$(call add_json_str, BoardErofsCompressor, $(BOARD_$(image_type)IMAGE_EROFS_COMPRESSOR)) \
$(call add_json_str, BoardErofsCompressHints, $(BOARD_$(image_type)IMAGE_EROFS_COMPRESS_HINTS)) \
$(call add_json_str, BoardErofsPclusterSize, $(BOARD_$(image_type)IMAGE_EROFS_PCLUSTER_SIZE)) \
diff --git a/target/product/runtime_libart.mk b/target/product/runtime_libart.mk
index 9e8afa8..fa65a4e 100644
--- a/target/product/runtime_libart.mk
+++ b/target/product/runtime_libart.mk
@@ -142,6 +142,7 @@
# be too much of a problem for platform developers because a change to framework code should not
# trigger dexpreopt for the ART boot image.
WITH_DEXPREOPT_ART_BOOT_IMG_ONLY := true
+ $(call soong_config_set_bool,PrebuiltGmsCore,ExcludeExtractApk,true)
endif
# Enable resolution of startup const strings.
diff --git a/teams/Android.bp b/teams/Android.bp
index a2b0d14..7e0795f 100644
--- a/teams/Android.bp
+++ b/teams/Android.bp
@@ -4402,5 +4402,12 @@
trendy_team_id: "5440764114206720",
}
+team {
+ name: "trendy_team_desktop_wifi",
+
+ // go/trendy/manage/engineers/6463689697099776
+ trendy_team_id: "6463689697099776",
+}
+
// DON'T ADD NEW RULES HERE. For more details refer to
// go/new-android-ownership-model
diff --git a/tools/aconfig/aconfig/src/codegen/java.rs b/tools/aconfig/aconfig/src/codegen/java.rs
index f41a6ca..44bb8aa 100644
--- a/tools/aconfig/aconfig/src/codegen/java.rs
+++ b/tools/aconfig/aconfig/src/codegen/java.rs
@@ -26,25 +26,34 @@
use aconfig_protos::{ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag};
use std::collections::HashMap;
+// Arguments to configure codegen for generate_java_code.
+pub struct JavaCodegenConfig {
+ pub codegen_mode: CodegenMode,
+ pub flag_ids: HashMap<String, u16>,
+ pub allow_instrumentation: bool,
+ pub package_fingerprint: u64,
+ pub new_exported: bool,
+ pub check_api_level: bool,
+}
+
pub fn generate_java_code<I>(
package: &str,
parsed_flags_iter: I,
- codegen_mode: CodegenMode,
- flag_ids: HashMap<String, u16>,
- allow_instrumentation: bool,
- package_fingerprint: u64,
- new_exported: bool,
+ config: JavaCodegenConfig,
) -> Result<Vec<OutputFile>>
where
I: Iterator<Item = ProtoParsedFlag>,
{
- let flag_elements: Vec<FlagElement> =
- parsed_flags_iter.map(|pf| create_flag_element(package, &pf, flag_ids.clone())).collect();
+ let flag_elements: Vec<FlagElement> = parsed_flags_iter
+ .map(|pf| {
+ create_flag_element(package, &pf, config.flag_ids.clone(), config.check_api_level)
+ })
+ .collect();
let namespace_flags = gen_flags_by_namespace(&flag_elements);
let properties_set: BTreeSet<String> =
flag_elements.iter().map(|fe| format_property_name(&fe.device_config_namespace)).collect();
- let is_test_mode = codegen_mode == CodegenMode::Test;
- let library_exported = codegen_mode == CodegenMode::Exported;
+ let is_test_mode = config.codegen_mode == CodegenMode::Test;
+ let library_exported = config.codegen_mode == CodegenMode::Exported;
let runtime_lookup_required =
flag_elements.iter().any(|elem| elem.is_read_write) || library_exported;
let container = (flag_elements.first().expect("zero template flags").container).to_string();
@@ -57,11 +66,11 @@
properties_set,
package_name: package.to_string(),
library_exported,
- allow_instrumentation,
+ allow_instrumentation: config.allow_instrumentation,
container,
is_platform_container,
- package_fingerprint: format!("0x{:X}L", package_fingerprint),
- new_exported,
+ package_fingerprint: format!("0x{:X}L", config.package_fingerprint),
+ new_exported: config.new_exported,
};
let mut template = TinyTemplate::new();
template.add_template("Flags.java", include_str!("../../templates/Flags.java.template"))?;
@@ -152,12 +161,15 @@
pub is_read_write: bool,
pub method_name: String,
pub properties: String,
+ pub finalized_sdk_present: bool,
+ pub finalized_sdk_value: i32,
}
fn create_flag_element(
package: &str,
pf: &ProtoParsedFlag,
flag_offsets: HashMap<String, u16>,
+ check_api_level: bool,
) -> FlagElement {
let device_config_flag = codegen::create_device_config_ident(package, pf.name())
.expect("values checked at flag parse time");
@@ -190,6 +202,8 @@
is_read_write: pf.permission() == ProtoFlagPermission::READ_WRITE,
method_name: format_java_method_name(pf.name()),
properties: format_property_name(pf.namespace()),
+ finalized_sdk_present: check_api_level,
+ finalized_sdk_value: i32::MAX, // TODO: b/378936061 - Read value from artifact.
}
}
@@ -523,14 +537,18 @@
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
let flag_ids =
assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap();
+ let config = JavaCodegenConfig {
+ codegen_mode: mode,
+ flag_ids,
+ allow_instrumentation: true,
+ package_fingerprint: 5801144784618221668,
+ new_exported: false,
+ check_api_level: false,
+ };
let generated_files = generate_java_code(
crate::test::TEST_PACKAGE,
modified_parsed_flags.into_iter(),
- mode,
- flag_ids,
- true,
- 5801144784618221668,
- false,
+ config,
)
.unwrap();
let expect_flags_content = EXPECTED_FLAG_COMMON_CONTENT.to_string()
@@ -679,14 +697,18 @@
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
let flag_ids =
assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap();
+ let config = JavaCodegenConfig {
+ codegen_mode: mode,
+ flag_ids,
+ allow_instrumentation: true,
+ package_fingerprint: 5801144784618221668,
+ new_exported: false,
+ check_api_level: false,
+ };
let generated_files = generate_java_code(
crate::test::TEST_PACKAGE,
modified_parsed_flags.into_iter(),
- mode,
- flag_ids,
- true,
- 5801144784618221668,
- false,
+ config,
)
.unwrap();
@@ -879,14 +901,18 @@
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
let flag_ids =
assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap();
+ let config = JavaCodegenConfig {
+ codegen_mode: mode,
+ flag_ids,
+ allow_instrumentation: true,
+ package_fingerprint: 5801144784618221668,
+ new_exported: true,
+ check_api_level: false,
+ };
let generated_files = generate_java_code(
crate::test::TEST_PACKAGE,
modified_parsed_flags.into_iter(),
- mode,
- flag_ids,
- true,
- 5801144784618221668,
- true,
+ config,
)
.unwrap();
@@ -925,6 +951,7 @@
let expect_feature_flags_impl_content = r#"
package com.android.aconfig.test;
+ import android.os.Build;
import android.os.flagging.AconfigPackage;
import android.util.Log;
/** @hide */
@@ -1068,14 +1095,18 @@
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
let flag_ids =
assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap();
+ let config = JavaCodegenConfig {
+ codegen_mode: mode,
+ flag_ids,
+ allow_instrumentation: true,
+ package_fingerprint: 5801144784618221668,
+ new_exported: false,
+ check_api_level: false,
+ };
let generated_files = generate_java_code(
crate::test::TEST_PACKAGE,
modified_parsed_flags.into_iter(),
- mode,
- flag_ids,
- true,
- 5801144784618221668,
- false,
+ config,
)
.unwrap();
@@ -1191,14 +1222,18 @@
crate::commands::modify_parsed_flags_based_on_mode(parsed_flags, mode).unwrap();
let flag_ids =
assign_flag_ids(crate::test::TEST_PACKAGE, modified_parsed_flags.iter()).unwrap();
+ let config = JavaCodegenConfig {
+ codegen_mode: mode,
+ flag_ids,
+ allow_instrumentation: true,
+ package_fingerprint: 5801144784618221668,
+ new_exported: false,
+ check_api_level: false,
+ };
let generated_files = generate_java_code(
crate::test::TEST_PACKAGE,
modified_parsed_flags.into_iter(),
- mode,
- flag_ids,
- true,
- 5801144784618221668,
- false,
+ config,
)
.unwrap();
let expect_featureflags_content = r#"
diff --git a/tools/aconfig/aconfig/src/commands.rs b/tools/aconfig/aconfig/src/commands.rs
index 2f96015..ea1069e 100644
--- a/tools/aconfig/aconfig/src/commands.rs
+++ b/tools/aconfig/aconfig/src/commands.rs
@@ -23,7 +23,7 @@
use std::path::PathBuf;
use crate::codegen::cpp::generate_cpp_code;
-use crate::codegen::java::generate_java_code;
+use crate::codegen::java::{generate_java_code, JavaCodegenConfig};
use crate::codegen::rust::generate_rust_code;
use crate::codegen::CodegenMode;
use crate::dump::{DumpFormat, DumpPredicate};
@@ -219,6 +219,7 @@
codegen_mode: CodegenMode,
allow_instrumentation: bool,
new_exported: bool,
+ check_api_level: bool,
) -> Result<Vec<OutputFile>> {
let parsed_flags = input.try_parse_flags()?;
let modified_parsed_flags =
@@ -230,15 +231,15 @@
let mut flag_names = extract_flag_names(parsed_flags)?;
let package_fingerprint = compute_flags_fingerprint(&mut flag_names);
let flag_ids = assign_flag_ids(&package, modified_parsed_flags.iter())?;
- generate_java_code(
- &package,
- modified_parsed_flags.into_iter(),
+ let config = JavaCodegenConfig {
codegen_mode,
flag_ids,
allow_instrumentation,
package_fingerprint,
new_exported,
- )
+ check_api_level,
+ };
+ generate_java_code(&package, modified_parsed_flags.into_iter(), config)
}
pub fn create_cpp_lib(
diff --git a/tools/aconfig/aconfig/src/main.rs b/tools/aconfig/aconfig/src/main.rs
index 288786b..e2fa554 100644
--- a/tools/aconfig/aconfig/src/main.rs
+++ b/tools/aconfig/aconfig/src/main.rs
@@ -91,6 +91,16 @@
.long("new-exported")
.value_parser(clap::value_parser!(bool))
.default_value("false"),
+ )
+ // Allows build flag toggling of checking API level in exported
+ // flag lib for finalized API flags.
+ // TODO: b/378936061 - Remove once build flag for API level
+ // check is fully enabled.
+ .arg(
+ Arg::new("check-api-level")
+ .long("check-api-level")
+ .value_parser(clap::value_parser!(bool))
+ .default_value("false"),
),
)
.subcommand(
@@ -274,9 +284,15 @@
let allow_instrumentation =
get_required_arg::<bool>(sub_matches, "allow-instrumentation")?;
let new_exported = get_required_arg::<bool>(sub_matches, "new-exported")?;
- let generated_files =
- commands::create_java_lib(cache, *mode, *allow_instrumentation, *new_exported)
- .context("failed to create java lib")?;
+ let check_api_level = get_required_arg::<bool>(sub_matches, "check-api-level")?;
+ let generated_files = commands::create_java_lib(
+ cache,
+ *mode,
+ *allow_instrumentation,
+ *new_exported,
+ *check_api_level,
+ )
+ .context("failed to create java lib")?;
let dir = PathBuf::from(get_required_arg::<String>(sub_matches, "out")?);
generated_files
.iter()
diff --git a/tools/aconfig/aconfig/templates/FeatureFlagsImpl.java.template b/tools/aconfig/aconfig/templates/FeatureFlagsImpl.java.template
index 750a6be..5baa475 100644
--- a/tools/aconfig/aconfig/templates/FeatureFlagsImpl.java.template
+++ b/tools/aconfig/aconfig/templates/FeatureFlagsImpl.java.template
@@ -66,6 +66,7 @@
}
{{ -else- }}{#- device config for exproted mode #}
{{ -if new_exported }}
+import android.os.Build;
import android.os.flagging.AconfigPackage;
import android.util.Log;
/** @hide */
@@ -80,7 +81,11 @@
AconfigPackage reader = AconfigPackage.load("{package_name}");
{{ -for namespace_with_flags in namespace_flags }}
{{ -for flag in namespace_with_flags.flags }}
+ {{ -if flag.finalized_sdk_present }}
+ {flag.method_name} = Build.VERSION.SDK_INT >= {flag.finalized_sdk_value} ? true : reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
+ {{ - else }}
{flag.method_name} = reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
+ {{ -endif}}
{{ -endfor }}
{{ -endfor }}
} catch (Exception e) \{
diff --git a/tools/filelistdiff/allowlist_next b/tools/filelistdiff/allowlist_next
index 8f91c9f..9cc7f34 100644
--- a/tools/filelistdiff/allowlist_next
+++ b/tools/filelistdiff/allowlist_next
@@ -1,9 +1,3 @@
# Allowlist only for the next release configuration.
# TODO(b/369678122): The list will be cleared when the trunk configurations are
# available to the next.
-
-# KATI only installed files
-framework/oat/x86_64/apex@com.android.compos@javalib@service-compos.jar@classes.odex
-framework/oat/x86_64/apex@com.android.compos@javalib@service-compos.jar@classes.odex.fsv_meta
-framework/oat/x86_64/apex@com.android.compos@javalib@service-compos.jar@classes.vdex
-framework/oat/x86_64/apex@com.android.compos@javalib@service-compos.jar@classes.vdex.fsv_meta
diff --git a/tools/ide_query/cc_analyzer/README.md b/tools/ide_query/cc_analyzer/README.md
new file mode 100644
index 0000000..7b822d2
--- /dev/null
+++ b/tools/ide_query/cc_analyzer/README.md
@@ -0,0 +1,3 @@
+See instructions in
+[Android Clang/LLVM-based Tools Readme Doc](https://android.googlesource.com/platform/prebuilts/clang-tools/+/main/README.md)
+for cutting a new release.
diff --git a/tools/ide_query/cc_analyzer/include_scanner.cc b/tools/ide_query/cc_analyzer/include_scanner.cc
index 8916a3e..1d3f26e 100644
--- a/tools/ide_query/cc_analyzer/include_scanner.cc
+++ b/tools/ide_query/cc_analyzer/include_scanner.cc
@@ -94,6 +94,11 @@
std::unordered_map<std::string, std::string> &abs_paths)
: abs_paths_(abs_paths) {}
bool BeginSourceFileAction(clang::CompilerInstance &ci) override {
+ // Be more resilient against all warnings/errors, as we want
+ // include-scanning to work even on incomplete sources.
+ ci.getDiagnostics().setEnableAllWarnings(false);
+ ci.getDiagnostics().setSeverityForAll(clang::diag::Flavor::WarningOrError,
+ clang::diag::Severity::Ignored);
std::string cwd;
auto cwd_or_err = ci.getVirtualFileSystem().getCurrentWorkingDirectory();
if (!cwd_or_err || cwd_or_err.get().empty()) return false;
@@ -154,6 +159,8 @@
main_file.get()->getBuffer().str());
std::vector<std::string> argv = cmd.CommandLine;
+ // Disable all warnings to be more robust in analysis.
+ argv.insert(llvm::find(argv, "--"), {"-Wno-error", "-w"});
fs = OverlayBuiltinHeaders(argv, std::move(fs));
llvm::IntrusiveRefCntPtr<clang::FileManager> files(
diff --git a/tools/perf/benchmarks b/tools/perf/benchmarks
index 4fdb8c2..8c24e12 100755
--- a/tools/perf/benchmarks
+++ b/tools/perf/benchmarks
@@ -794,6 +794,24 @@
preroll=1,
postroll=2,
),
+ Benchmark(id="systemui_flicker_add_log_call",
+ title="Add a Log call to flicker",
+ change=Modify("platform_testing/libraries/flicker/src/android/tools/flicker/FlickerServiceResultsCollector.kt",
+ lambda: f'Log.v(LOG_TAG, "BENCHMARK = {random.randint(0, 1000000)}");\n',
+ before="Log.v(LOG_TAG,"),
+ modules=["WMShellFlickerTestsPip"],
+ preroll=1,
+ postroll=2,
+ ),
+ Benchmark(id="systemui_core_add_log_call",
+ title="Add a Log call SystemUIApplication",
+ change=Modify("frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java",
+ lambda: f'Log.v(TAG, "BENCHMARK = {random.randint(0, 1000000)}");\n',
+ before="Log.wtf(TAG,"),
+ modules=["SystemUI-core"],
+ preroll=1,
+ postroll=2,
+ ),
]
def _error(self, message):