Merge "Remove PRODUCT_SEPOLICY_SPLIT."
diff --git a/core/Makefile b/core/Makefile
index 4e5787d..c3c5fb3 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -5401,6 +5401,9 @@
ifdef BOARD_PREBUILT_DTBOIMAGE
$(hide) echo "flash dtbo" >> $@
endif
+ifneq ($(INSTALLED_VENDOR_KERNEL_BOOTIMAGE_TARGET),)
+ $(hide) echo "flash vendor_kernel_boot" >> $@
+endif
ifeq ($(BOARD_USES_PVMFWIMAGE),true)
$(hide) echo "flash pvmfw" >> $@
endif
diff --git a/core/board_config.mk b/core/board_config.mk
index c8ec5a9..f459d83 100644
--- a/core/board_config.mk
+++ b/core/board_config.mk
@@ -1000,6 +1000,14 @@
TARGET_FLATTEN_APEX := $(OVERRIDE_TARGET_FLATTEN_APEX)
endif
+# TODO(b/278826656) Remove the following message
+ifeq (true,$(TARGET_FLATTEN_APEX))
+ $(warning ********************************************************************************)
+ $(warning Flattened APEX will be deprecated soon. Please stop using flattened APEX and use)
+ $(warning "image" APEX instead.)
+ $(warning ********************************************************************************)
+endif
+
ifeq (,$(TARGET_BUILD_UNBUNDLED))
ifdef PRODUCT_EXTRA_VNDK_VERSIONS
$(foreach v,$(PRODUCT_EXTRA_VNDK_VERSIONS),$(call check_vndk_version,$(v)))
diff --git a/core/config.mk b/core/config.mk
index df0cbf5..c549296 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -551,7 +551,10 @@
DISABLE_PREOPT_BOOT_IMAGES :=
ifneq (,$(TARGET_BUILD_APPS)$(TARGET_BUILD_UNBUNDLED_IMAGE))
DISABLE_PREOPT := true
- DISABLE_PREOPT_BOOT_IMAGES := true
+ # VSDK builds perform dexpreopt during merge_target_files build step.
+ ifneq (true,$(BUILDING_WITH_VSDK))
+ DISABLE_PREOPT_BOOT_IMAGES := true
+ endif
endif
ifeq (true,$(TARGET_BUILD_UNBUNDLED))
ifneq (true,$(UNBUNDLED_BUILD_SDKS_FROM_SOURCE))
@@ -1201,13 +1204,6 @@
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))
-# Missing optional uses-libraries so that the platform doesn't create build rules that depend on
-# them.
-INTERNAL_PLATFORM_MISSING_USES_LIBRARIES := \
- com.google.android.ble \
- com.google.android.media.effects \
- com.google.android.wearable \
-
# This is the standard way to name a directory containing prebuilt target
# objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so
TARGET_PREBUILT_TAG := android-$(TARGET_ARCH)
@@ -1264,6 +1260,9 @@
.KATI_READONLY := JAVAC_NINJA_POOL R8_NINJA_POOL D8_NINJA_POOL
+# Soong modules that are known to have broken optional_uses_libs dependencies.
+BUILD_WARNING_BAD_OPTIONAL_USES_LIBS_ALLOWLIST := LegacyCamera Gallery2
+
# These goals don't need to collect and include Android.mks/CleanSpec.mks
# in the source tree.
dont_bother_goals := out product-graph
diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk
index 0e84f516..aa638d4 100644
--- a/core/config_sanitizers.mk
+++ b/core/config_sanitizers.mk
@@ -446,6 +446,13 @@
# If local module needs HWASAN, add compiler flags.
ifneq ($(filter hwaddress,$(my_sanitize)),)
my_cflags += $(HWADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS)
+
+ ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
+ ifneq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)
+ my_linker := /system/bin/linker_hwasan64
+ endif
+ endif
+
endif
# Use minimal diagnostics when integer overflow is enabled; never do it for HOST modules
diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk
index 2cf23a7..14fafa1 100644
--- a/core/dex_preopt_odex_install.mk
+++ b/core/dex_preopt_odex_install.mk
@@ -111,18 +111,19 @@
# Local module variables and functions used in dexpreopt and manifest_check.
################################################################################
-my_filtered_optional_uses_libraries := $(filter-out $(INTERNAL_PLATFORM_MISSING_USES_LIBRARIES), \
- $(LOCAL_OPTIONAL_USES_LIBRARIES))
-
# TODO(b/132357300): This may filter out too much, as PRODUCT_PACKAGES doesn't
# include all packages (the full list is unknown until reading all Android.mk
# makefiles). As a consequence, a library may be present but not included in
# dexpreopt, which will result in class loader context mismatch and a failure
-# to load dexpreopt code on device. We should fix this, either by deferring
-# dependency computation until the full list of product packages is known, or
-# by adding product-specific lists of missing libraries.
+# to load dexpreopt code on device.
+# However, we have to do filtering here. Otherwise, we may include extra
+# libraries that Soong and Make don't generate build rules for (e.g., a library
+# that exists in the source tree but not installable), and therefore get Ninja
+# errors.
+# We have deferred CLC computation to the Ninja phase, but the dependency
+# computation still needs to be done early. For now, this is the best we can do.
my_filtered_optional_uses_libraries := $(filter $(PRODUCT_PACKAGES), \
- $(my_filtered_optional_uses_libraries))
+ $(LOCAL_OPTIONAL_USES_LIBRARIES))
ifeq ($(LOCAL_MODULE_CLASS),APPS)
# compatibility libraries are added to class loader context of an app only if
diff --git a/core/instrumentation_test_config_template.xml b/core/instrumentation_test_config_template.xml
index 6ca964e..379126c 100644
--- a/core/instrumentation_test_config_template.xml
+++ b/core/instrumentation_test_config_template.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
+<!-- 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.
@@ -24,7 +24,7 @@
</target_preparer>
<test class="com.android.tradefed.testtype.{TEST_TYPE}" >
- <option name="package" value="{PACKAGE}" />
+ {EXTRA_TEST_RUNNER_CONFIGS}<option name="package" value="{PACKAGE}" />
<option name="runner" value="{RUNNER}" />
</test>
</configuration>
diff --git a/core/java_host_test_config_template.xml b/core/java_host_test_config_template.xml
index 26c1caf..e123dc7 100644
--- a/core/java_host_test_config_template.xml
+++ b/core/java_host_test_config_template.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 The Android Open Source Project
+<!-- 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.
@@ -21,6 +21,6 @@
{EXTRA_CONFIGS}
<test class="com.android.tradefed.testtype.HostTest" >
- <option name="jar" value="{MODULE}.jar" />
+ {EXTRA_TEST_RUNNER_CONFIGS}<option name="jar" value="{MODULE}.jar" />
</test>
</configuration>
diff --git a/core/native_test_config_template.xml b/core/native_test_config_template.xml
index ea982cf..788157c 100644
--- a/core/native_test_config_template.xml
+++ b/core/native_test_config_template.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
+<!-- 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.
@@ -26,7 +26,7 @@
</target_preparer>
<test class="com.android.tradefed.testtype.GTest" >
- <option name="native-test-device-path" value="{TEST_INSTALL_BASE}" />
+ {EXTRA_TEST_RUNNER_CONFIGS}<option name="native-test-device-path" value="{TEST_INSTALL_BASE}" />
<option name="module-name" value="{MODULE}" />
</test>
</configuration>
diff --git a/core/soong_config.mk b/core/soong_config.mk
index b485159..6383393 100644
--- a/core/soong_config.mk
+++ b/core/soong_config.mk
@@ -251,8 +251,6 @@
$(call add_json_list, TargetFSConfigGen, $(TARGET_FS_CONFIG_GEN))
-$(call add_json_list, MissingUsesLibraries, $(INTERNAL_PLATFORM_MISSING_USES_LIBRARIES))
-
$(call add_json_map, VendorVars)
$(foreach namespace,$(sort $(SOONG_CONFIG_NAMESPACES)),\
$(call add_json_map, $(namespace))\
@@ -296,6 +294,8 @@
$(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, BuildWarningBadOptionalUsesLibsAllowlist, $(BUILD_WARNING_BAD_OPTIONAL_USES_LIBS_ALLOWLIST))
+
$(call add_json_bool, BuildDebugfsRestrictionsEnabled, $(filter true,$(PRODUCT_SET_DEBUGFS_RESTRICTIONS)))
$(call add_json_bool, RequiresInsecureExecmemForSwiftshader, $(filter true,$(PRODUCT_REQUIRES_INSECURE_EXECMEM_FOR_SWIFTSHADER)))
diff --git a/target/product/base_system.mk b/target/product/base_system.mk
index d65e5a4..a23fdd5 100644
--- a/target/product/base_system.mk
+++ b/target/product/base_system.mk
@@ -265,7 +265,6 @@
sm \
snapshotctl \
snapuserd \
- SoundPicker \
storaged \
surfaceflinger \
svc \
@@ -291,6 +290,13 @@
wifi.rc \
wm \
+# These packages are not used on Android TV
+ifneq ($(PRODUCT_IS_ATV),true)
+ PRODUCT_PACKAGES += \
+ SoundPicker \
+
+endif
+
# VINTF data for system image
PRODUCT_PACKAGES += \
system_manifest.xml \
diff --git a/target/product/default_art_config.mk b/target/product/default_art_config.mk
index 752b199..1e28c80 100644
--- a/target/product/default_art_config.mk
+++ b/target/product/default_art_config.mk
@@ -115,4 +115,4 @@
dalvik.vm.dex2oat-Xms=64m \
dalvik.vm.dex2oat-Xmx=512m \
-PRODUCT_ENABLE_UFFD_GC := false # TODO(jiakaiz): Change this to "default".
+PRODUCT_ENABLE_UFFD_GC := default
diff --git a/tools/aconfig/src/cache.rs b/tools/aconfig/src/cache.rs
index 30810fa..44ad3dd 100644
--- a/tools/aconfig/src/cache.rs
+++ b/tools/aconfig/src/cache.rs
@@ -19,6 +19,7 @@
use std::io::{Read, Write};
use crate::aconfig::{FlagDeclaration, FlagState, FlagValue, Permission};
+use crate::codegen;
use crate::commands::Source;
const DEFAULT_FLAG_STATE: FlagState = FlagState::Disabled;
@@ -108,7 +109,7 @@
impl CacheBuilder {
pub fn new(namespace: String) -> Result<CacheBuilder> {
- ensure!(!namespace.is_empty(), "empty namespace");
+ ensure!(codegen::is_valid_identifier(&namespace), "bad namespace");
let cache = Cache { namespace, items: vec![] };
Ok(CacheBuilder { cache })
}
@@ -118,7 +119,7 @@
source: Source,
declaration: FlagDeclaration,
) -> Result<&mut CacheBuilder> {
- ensure!(!declaration.name.is_empty(), "empty flag name");
+ ensure!(codegen::is_valid_identifier(&declaration.name), "bad flag name");
ensure!(!declaration.description.is_empty(), "empty flag description");
ensure!(
self.cache.items.iter().all(|item| item.name != declaration.name),
@@ -146,8 +147,8 @@
source: Source,
value: FlagValue,
) -> Result<&mut CacheBuilder> {
- ensure!(!value.namespace.is_empty(), "empty flag namespace");
- ensure!(!value.name.is_empty(), "empty flag name");
+ ensure!(codegen::is_valid_identifier(&value.namespace), "bad flag namespace");
+ ensure!(codegen::is_valid_identifier(&value.name), "bad flag name");
ensure!(
value.namespace == self.cache.namespace,
"failed to set values for flag {}/{} from {}: expected namespace {}",
@@ -270,14 +271,14 @@
.add_flag_value(
Source::Memory,
FlagValue {
- namespace: "some-other-namespace".to_string(),
+ namespace: "some_other_namespace".to_string(),
name: "foo".to_string(),
state: FlagState::Enabled,
permission: Permission::ReadOnly,
},
)
.unwrap_err();
- assert_eq!(&format!("{:?}", error), "failed to set values for flag some-other-namespace/foo from <memory>: expected namespace ns");
+ assert_eq!(&format!("{:?}", error), "failed to set values for flag some_other_namespace/foo from <memory>: expected namespace ns");
let cache = builder.build();
let item = cache.iter().find(|&item| item.name == "foo").unwrap();
@@ -300,7 +301,7 @@
FlagDeclaration { name: "".to_string(), description: "Description".to_string() },
)
.unwrap_err();
- assert_eq!(&format!("{:?}", error), "empty flag name");
+ assert_eq!(&format!("{:?}", error), "bad flag name");
let error = builder
.add_flag_declaration(
@@ -332,7 +333,7 @@
},
)
.unwrap_err();
- assert_eq!(&format!("{:?}", error), "empty flag namespace");
+ assert_eq!(&format!("{:?}", error), "bad flag namespace");
let error = builder
.add_flag_value(
@@ -345,7 +346,7 @@
},
)
.unwrap_err();
- assert_eq!(&format!("{:?}", error), "empty flag name");
+ assert_eq!(&format!("{:?}", error), "bad flag name");
}
#[test]
diff --git a/tools/aconfig/src/codegen.rs b/tools/aconfig/src/codegen.rs
new file mode 100644
index 0000000..b60ec51
--- /dev/null
+++ b/tools/aconfig/src/codegen.rs
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+pub fn is_valid_identifier(s: &str) -> bool {
+ // Identifiers must match [a-z][a-z0-9_]*
+ let mut chars = s.chars();
+ let Some(first) = chars.next() else {
+ return false;
+ };
+ if !first.is_ascii_lowercase() {
+ return false;
+ }
+ chars.all(|ch| ch.is_ascii_lowercase() || ch.is_ascii_digit() || ch == '_')
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_is_valid_identifier() {
+ assert!(is_valid_identifier("foo"));
+ assert!(is_valid_identifier("foo_bar_123"));
+
+ assert!(!is_valid_identifier(""));
+ assert!(!is_valid_identifier("123_foo"));
+ assert!(!is_valid_identifier("foo-bar"));
+ assert!(!is_valid_identifier("foo-b\u{00e5}r"));
+ }
+}
diff --git a/tools/aconfig/src/codegen_java.rs b/tools/aconfig/src/codegen_java.rs
index 733b1c5..98288e7 100644
--- a/tools/aconfig/src/codegen_java.rs
+++ b/tools/aconfig/src/codegen_java.rs
@@ -31,7 +31,7 @@
let mut template = TinyTemplate::new();
template.add_template("java_code_gen", include_str!("../templates/java.template"))?;
let contents = template.render("java_code_gen", &context)?;
- let mut path: PathBuf = namespace.split('.').collect();
+ let mut path: PathBuf = ["aconfig", namespace].iter().collect();
// TODO: Allow customization of the java class name
path.push("Flags.java");
Ok(OutputFile { contents: contents.into(), path })
@@ -76,7 +76,7 @@
#[test]
fn test_generate_java_code() {
- let namespace = "com.example";
+ let namespace = "example";
let mut builder = CacheBuilder::new(namespace.to_string()).unwrap();
builder
.add_flag_declaration(
@@ -106,7 +106,7 @@
)
.unwrap();
let cache = builder.build();
- let expect_content = r#"package com.example;
+ let expect_content = r#"package aconfig.example;
import android.provider.DeviceConfig;
@@ -118,7 +118,7 @@
public static boolean test2() {
return DeviceConfig.getBoolean(
- "com.example",
+ "example",
"test2__test2",
false
);
@@ -127,7 +127,7 @@
}
"#;
let file = generate_java_code(&cache).unwrap();
- assert_eq!("com/example/Flags.java", file.path.to_str().unwrap());
+ assert_eq!("aconfig/example/Flags.java", file.path.to_str().unwrap());
assert_eq!(
expect_content.replace(' ', ""),
String::from_utf8(file.contents).unwrap().replace(' ', "")
diff --git a/tools/aconfig/src/codegen_rust.rs b/tools/aconfig/src/codegen_rust.rs
index d75e315..fe4231b 100644
--- a/tools/aconfig/src/codegen_rust.rs
+++ b/tools/aconfig/src/codegen_rust.rs
@@ -23,10 +23,10 @@
use crate::commands::OutputFile;
pub fn generate_rust_code(cache: &Cache) -> Result<OutputFile> {
- let namespace = cache.namespace().to_lowercase();
+ let namespace = cache.namespace();
let parsed_flags: Vec<TemplateParsedFlag> =
- cache.iter().map(|item| create_template_parsed_flag(&namespace, item)).collect();
- let context = TemplateContext { namespace, parsed_flags };
+ cache.iter().map(|item| create_template_parsed_flag(namespace, item)).collect();
+ let context = TemplateContext { namespace: namespace.to_string(), parsed_flags };
let mut template = TinyTemplate::new();
template.add_template("rust_code_gen", include_str!("../templates/rust.template"))?;
let contents = template.render("rust_code_gen", &context)?;
@@ -56,7 +56,7 @@
fn create_template_parsed_flag(namespace: &str, item: &Item) -> TemplateParsedFlag {
let template = TemplateParsedFlag {
name: item.name.clone(),
- fn_name: format!("{}_{}", namespace, item.name.replace('-', "_").to_lowercase()),
+ fn_name: format!("{}_{}", namespace, &item.name),
is_read_only_enabled: item.permission == Permission::ReadOnly
&& item.state == FlagState::Enabled,
is_read_only_disabled: item.permission == Permission::ReadOnly
@@ -111,7 +111,7 @@
#[inline(always)]
pub fn r#test_disabled_rw() -> bool {
- profcollect_libflags_rust::GetServerConfigurableFlag("test", "disabled-rw", "false") == "true"
+ flags_rust::GetServerConfigurableFlag("test", "disabled_rw", "false") == "true"
}
#[inline(always)]
@@ -121,7 +121,7 @@
#[inline(always)]
pub fn r#test_enabled_rw() -> bool {
- profcollect_libflags_rust::GetServerConfigurableFlag("test", "enabled-rw", "false") == "true"
+ flags_rust::GetServerConfigurableFlag("test", "enabled_rw", "false") == "true"
}
"#;
assert_eq!(expected.trim(), String::from_utf8(generated.contents).unwrap().trim());
diff --git a/tools/aconfig/src/main.rs b/tools/aconfig/src/main.rs
index b60909b..1d2ec95 100644
--- a/tools/aconfig/src/main.rs
+++ b/tools/aconfig/src/main.rs
@@ -26,6 +26,7 @@
mod aconfig;
mod cache;
+mod codegen;
mod codegen_cpp;
mod codegen_java;
mod codegen_rust;
diff --git a/tools/aconfig/templates/java.template b/tools/aconfig/templates/java.template
index 89da18b..30c7ad7 100644
--- a/tools/aconfig/templates/java.template
+++ b/tools/aconfig/templates/java.template
@@ -1,4 +1,4 @@
-package {namespace};
+package aconfig.{namespace};
{{ if readwrite }}
import android.provider.DeviceConfig;
{{ endif }}
@@ -10,7 +10,7 @@
"{namespace}",
"{item.feature_name}__{item.flag_name}",
{item.default_value}
- );
+ );
{{ -else- }}
return {item.default_value};
{{ -endif }}
diff --git a/tools/aconfig/templates/rust.template b/tools/aconfig/templates/rust.template
index 391c594..d7f4e8d 100644
--- a/tools/aconfig/templates/rust.template
+++ b/tools/aconfig/templates/rust.template
@@ -16,7 +16,7 @@
{{- if parsed_flag.is_read_write -}}
#[inline(always)]
pub fn r#{parsed_flag.fn_name}() -> bool \{
- profcollect_libflags_rust::GetServerConfigurableFlag("{namespace}", "{parsed_flag.name}", "false") == "true"
+ flags_rust::GetServerConfigurableFlag("{namespace}", "{parsed_flag.name}", "false") == "true"
}
{{ endif -}}
diff --git a/tools/aconfig/testdata/first.values b/tools/aconfig/testdata/first.values
index e6017fe..3c49111 100644
--- a/tools/aconfig/testdata/first.values
+++ b/tools/aconfig/testdata/first.values
@@ -1,18 +1,18 @@
flag_value {
namespace: "test"
- name: "disabled-ro"
+ name: "disabled_ro"
state: DISABLED
permission: READ_ONLY
}
flag_value {
namespace: "test"
- name: "enabled-ro"
+ name: "enabled_ro"
state: DISABLED
permission: READ_WRITE
}
flag_value {
namespace: "test"
- name: "enabled-rw"
+ name: "enabled_rw"
state: ENABLED
permission: READ_WRITE
}
diff --git a/tools/aconfig/testdata/second.values b/tools/aconfig/testdata/second.values
index 44b6b3e..3fe11ab 100644
--- a/tools/aconfig/testdata/second.values
+++ b/tools/aconfig/testdata/second.values
@@ -1,6 +1,6 @@
flag_value {
namespace: "test"
- name: "enabled-ro"
+ name: "enabled_ro"
state: ENABLED
permission: READ_ONLY
}
diff --git a/tools/aconfig/testdata/test.aconfig b/tools/aconfig/testdata/test.aconfig
index 16be425..986a526 100644
--- a/tools/aconfig/testdata/test.aconfig
+++ b/tools/aconfig/testdata/test.aconfig
@@ -4,14 +4,14 @@
# - test.aconfig: DISABLED + READ_WRITE (default)
# - first.values: DISABLED + READ_ONLY
flag {
- name: "disabled-ro"
+ name: "disabled_ro"
description: "This flag is DISABLED + READ_ONLY"
}
# This flag's final value is calculated from:
# - test.aconfig: DISABLED + READ_WRITE (default)
flag {
- name: "disabled-rw"
+ name: "disabled_rw"
description: "This flag is DISABLED + READ_WRITE"
}
@@ -20,7 +20,7 @@
# - first.values: DISABLED + READ_WRITE
# - second.values: ENABLED + READ_ONLY
flag {
- name: "enabled-ro"
+ name: "enabled_ro"
description: "This flag is ENABLED + READ_ONLY"
}
@@ -28,6 +28,6 @@
# - test.aconfig: DISABLED + READ_WRITE (default)
# - first.values: ENABLED + READ_WRITE
flag {
- name: "enabled-rw"
+ name: "enabled_rw"
description: "This flag is ENABLED + READ_WRITE"
}
diff --git a/tools/releasetools/img_from_target_files.py b/tools/releasetools/img_from_target_files.py
index 17f4cc5..fa53ad2 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
def LoadOptions(input_file):
"""Loads information from input_file to OPTIONS.
@@ -118,8 +118,9 @@
entries = [
'OTA/android-info.txt:android-info.txt',
- 'META/fastboot-info.txt:fastboot-info.txt',
]
+ if OPTIONS.use_fastboot_info:
+ entries.append('META/fastboot-info.txt:fastboot-info.txt')
with zipfile.ZipFile(input_file) as input_zip:
namelist = input_zip.namelist()
if 'PREBUILT_IMAGES/kernel_16k' in namelist:
diff --git a/tools/releasetools/ota_utils.py b/tools/releasetools/ota_utils.py
index fa9516e..63a863e 100644
--- a/tools/releasetools/ota_utils.py
+++ b/tools/releasetools/ota_utils.py
@@ -817,8 +817,8 @@
target_dir = ExtractTargetFiles(target_file)
cmd = ["delta_generator",
"--out_file", payload_file]
- with open(os.path.join(target_dir, "META", "ab_partitions.txt")) as fp:
- ab_partitions = fp.read().strip().split("\n")
+ with open(os.path.join(target_dir, "META", "ab_partitions.txt"), "r") as fp:
+ ab_partitions = fp.read().strip().splitlines()
cmd.extend(["--partition_names", ":".join(ab_partitions)])
cmd.extend(
["--new_partitions", GetPartitionImages(target_dir, ab_partitions, False)])