Merge "Install LOCAL_SOONG_INSTALL_SYMLINKS even if LOCAL_SOONG_INSTALLED_MODULE isn't set" into main
diff --git a/core/Makefile b/core/Makefile
index a129441..82545de 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -1438,6 +1438,28 @@
endif # my_installed_prebuilt_gki_apex not defined
+ifneq ($(BOARD_KERNEL_PATH_16K),)
+BUILT_BOOT_OTA_PACKAGE_4K := $(PRODUCT_OUT)/boot_ota_4k.zip
+$(BUILT_BOOT_OTA_PACKAGE_4K): $(OTA_FROM_RAW_IMG) $(INSTALLED_BOOTIMAGE_TARGET) $(DEFAULT_SYSTEM_DEV_CERTIFICATE).pk8
+ $(OTA_FROM_RAW_IMG) --package_key $(DEFAULT_SYSTEM_DEV_CERTIFICATE) \
+ --max_timestamp `cat $(BUILD_DATETIME_FILE)` \
+ --path $(HOST_OUT) \
+ --partition_name boot \
+ --output $@ \
+ $(INSTALLED_BOOTIMAGE_TARGET)
+
+boototapackage_4k: $(BUILT_BOOT_OTA_PACKAGE_4K)
+.PHONY: boototapackage_4k
+
+$(eval $(call copy-one-file,$(BUILT_BOOT_OTA_PACKAGE_4K),$(TARGET_OUT)/boot_otas/boot_ota_4k.zip))
+$(eval $(call copy-one-file,$(BUILT_BOOT_OTA_PACKAGE_16K),$(TARGET_OUT)/boot_otas/boot_ota_16k.zip))
+
+ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT)/boot_otas/boot_ota_4k.zip
+ALL_DEFAULT_INSTALLED_MODULES += $(TARGET_OUT)/boot_otas/boot_ota_16k.zip
+
+
+endif
+
my_apex_extracted_boot_image :=
my_installed_prebuilt_gki_apex :=
diff --git a/core/android_soong_config_vars.mk b/core/android_soong_config_vars.mk
index b5c20d1..66d96b1 100644
--- a/core/android_soong_config_vars.mk
+++ b/core/android_soong_config_vars.mk
@@ -154,6 +154,8 @@
$(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_multi_tenant_microdroid_vm,$(RELEASE_AVF_ENABLE_MULTI_TENANT_MICRODROID_VM))
+
# Enable system_server optimizations by default unless explicitly set or if
# there may be dependent runtime jars.
# TODO(b/240588226): Remove the off-by-default exceptions after handling
diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk
index af6d921..54a57d1 100644
--- a/core/dex_preopt_odex_install.mk
+++ b/core/dex_preopt_odex_install.mk
@@ -527,7 +527,6 @@
_system_other :=
my_dexpreopt_zip := $(intermediates)/dexpreopt.zip
- DEXPREOPT.$(LOCAL_MODULE).POST_INSTALLED_DEXPREOPT_ZIP := $(my_dexpreopt_zip)
$(my_dexpreopt_zip): PRIVATE_MODULE := $(LOCAL_MODULE)
$(my_dexpreopt_zip): $(my_dexpreopt_deps)
$(my_dexpreopt_zip): | $(DEXPREOPT_GEN_DEPS)
@@ -551,6 +550,11 @@
ALL_MODULES.$(my_register_name).INSTALLED += $(addprefix $(PRODUCT_OUT)/,$(my_dexpreopt_zip_contents))
+ # Normally this happens in sbom.mk, which is included from base_rules.mk. But since
+ # dex_preopt_odex_install.mk is included after base_rules.mk, it misses these odex files.
+ $(foreach installed_file,$(addprefix $(PRODUCT_OUT)/,$(my_dexpreopt_zip_contents)), \
+ $(eval ALL_INSTALLED_FILES.$(installed_file) := $(my_register_name)))
+
my_dexpreopt_config :=
my_dexpreopt_config_for_postprocessing :=
my_dexpreopt_jar_copy :=
diff --git a/core/main.mk b/core/main.mk
index 5006707..d42c8ad 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -220,11 +220,13 @@
# property_overrides_split_enabled is true. Otherwise it will be installed in
# /system/build.prop
ifdef BOARD_VNDK_VERSION
+ ifneq ($(KEEP_VNDK),false)
ifeq ($(BOARD_VNDK_VERSION),current)
ADDITIONAL_VENDOR_PROPERTIES := ro.vndk.version=$(PLATFORM_VNDK_VERSION)
else
ADDITIONAL_VENDOR_PROPERTIES := ro.vndk.version=$(BOARD_VNDK_VERSION)
endif
+ endif
# TODO(b/290159430): ro.vndk.deprecate is a temporal variable for deprecating VNDK.
# This variable will be removed once ro.vndk.version can be removed.
@@ -337,12 +339,14 @@
# modules. It uses the version in PRODUCT_PRODUCT_VNDK_VERSION. If the value
# is "current", use PLATFORM_VNDK_VERSION.
ifdef PRODUCT_PRODUCT_VNDK_VERSION
+ifneq ($(KEEP_VNDK),false)
ifeq ($(PRODUCT_PRODUCT_VNDK_VERSION),current)
ADDITIONAL_PRODUCT_PROPERTIES += ro.product.vndk.version=$(PLATFORM_VNDK_VERSION)
else
ADDITIONAL_PRODUCT_PROPERTIES += ro.product.vndk.version=$(PRODUCT_PRODUCT_VNDK_VERSION)
endif
endif
+endif
ADDITIONAL_PRODUCT_PROPERTIES += ro.build.characteristics=$(TARGET_AAPT_CHARACTERISTICS)
@@ -2183,10 +2187,7 @@
metadata_list := $(OUT_DIR)/.module_paths/METADATA.list
metadata_files := $(subst $(newline),$(space),$(file <$(metadata_list)))
-# (TODO: b/272358583 find another way of always rebuilding this target)
-# Remove the sbom-metadata.csv whenever makefile is evaluated
-$(shell rm $(PRODUCT_OUT)/sbom-metadata.csv >/dev/null 2>&1)
-$(PRODUCT_OUT)/sbom-metadata.csv: $(installed_files) $(metadata_list) $(metadata_files)
+$(PRODUCT_OUT)/sbom-metadata.csv:
rm -f $@
echo installed_file,module_path,soong_module_type,is_prebuilt_make_module,product_copy_files,kernel_module_copy_files,is_platform_generated,build_output_path,static_libraries,whole_static_libraries,is_static_lib >> $@
$(eval _all_static_libs :=)
@@ -2197,7 +2198,6 @@
$(eval _module_path := $(strip $(sort $(ALL_MODULES.$(_module_name).PATH)))) \
$(eval _soong_module_type := $(strip $(sort $(ALL_MODULES.$(_module_name).SOONG_MODULE_TYPE)))) \
$(eval _is_prebuilt_make_module := $(ALL_MODULES.$(_module_name).IS_PREBUILT_MAKE_MODULE)) \
- $(eval _post_installed_dexpreopt_zip := $(DEXPREOPT.$(_module_name).POST_INSTALLED_DEXPREOPT_ZIP)) \
$(eval _product_copy_files := $(sort $(filter %:$(_path_on_device),$(product_copy_files_without_owner)))) \
$(eval _kernel_module_copy_files := $(sort $(filter %$(_path_on_device),$(KERNEL_MODULE_COPY_FILES)))) \
$(eval _is_build_prop := $(call is-build-prop,$f)) \
@@ -2218,9 +2218,6 @@
$(foreach l,$(_static_libs),$(eval _all_static_libs += $l:$(strip $(sort $(ALL_MODULES.$l.PATH))):$(strip $(sort $(ALL_MODULES.$l.SOONG_MODULE_TYPE))):$(ALL_STATIC_LIBRARIES.$l.BUILT_FILE))) \
$(foreach l,$(_whole_static_libs),$(eval _all_static_libs += $l:$(strip $(sort $(ALL_MODULES.$l.PATH))):$(strip $(sort $(ALL_MODULES.$l.SOONG_MODULE_TYPE))):$(ALL_STATIC_LIBRARIES.$l.BUILT_FILE))) \
echo /$(_path_on_device),$(_module_path),$(_soong_module_type),$(_is_prebuilt_make_module),$(_product_copy_files),$(_kernel_module_copy_files),$(_is_platform_generated),$(_build_output_path),$(_static_libs),$(_whole_static_libs), >> $@; \
- $(if $(_post_installed_dexpreopt_zip), \
- for i in $$(zipinfo -1 $(_post_installed_dexpreopt_zip)); do echo /$$i$(comma)$(_module_path)$(comma)$(_soong_module_type)$(comma)$(_is_prebuilt_make_module)$(comma)$(_product_copy_files)$(comma)$(_kernel_module_copy_files)$(comma)$(_is_platform_generated)$(comma)$(PRODUCT_OUT)/$$i$(comma)$(_static_libs)$(comma)$(_whole_static_libs)$(comma) >> $@ ; done ; \
- ) \
)
$(foreach l,$(sort $(_all_static_libs)), \
$(eval _lib_stem := $(call word-colon,1,$l)) \
@@ -2233,11 +2230,17 @@
echo $(_lib_stem).a,$(_module_path),$(_soong_module_type),,,,,$(_built_file),$(_static_libs),$(_whole_static_libs),$(_is_static_lib) >> $@; \
)
+# (TODO: b/272358583 find another way of always rebuilding sbom.spdx)
+# Remove the always_dirty_file.txt whenever the makefile is evaluated
+$(shell rm -f $(PRODUCT_OUT)/always_dirty_file.txt)
+$(PRODUCT_OUT)/always_dirty_file.txt:
+ touch $@
+
.PHONY: sbom
ifeq ($(TARGET_BUILD_APPS),)
sbom: $(PRODUCT_OUT)/sbom.spdx.json
$(PRODUCT_OUT)/sbom.spdx.json: $(PRODUCT_OUT)/sbom.spdx
-$(PRODUCT_OUT)/sbom.spdx: $(PRODUCT_OUT)/sbom-metadata.csv $(GEN_SBOM)
+$(PRODUCT_OUT)/sbom.spdx: $(PRODUCT_OUT)/sbom-metadata.csv $(GEN_SBOM) $(installed_files) $(metadata_list) $(metadata_files) $(PRODUCT_OUT)/always_dirty_file.txt
rm -rf $@
$(GEN_SBOM) --output_file $@ --metadata $(PRODUCT_OUT)/sbom-metadata.csv --build_version $(BUILD_FINGERPRINT_FROM_FILE) --product_mfr "$(PRODUCT_MANUFACTURER)" --json
@@ -2256,7 +2259,7 @@
$(eval _dep_modules := $(filter %.$(_module_name),$(ALL_MODULES)) $(filter %.$(_module_name)$(TARGET_2ND_ARCH_MODULE_SUFFIX),$(ALL_MODULES)))
$(eval _is_apex := $(filter %.apex,$(3)))
-$(4): $(3) $(metadata_list) $(metadata_files)
+$(4):
rm -rf $$@
echo installed_file,module_path,soong_module_type,is_prebuilt_make_module,product_copy_files,kernel_module_copy_files,is_platform_generated,build_output_path,static_libraries,whole_static_libraries,is_static_lib >> $$@
echo /$(_path_on_device),$(_module_path),$(_soong_module_type),,,,,$(3),,, >> $$@
@@ -2265,7 +2268,7 @@
echo $(patsubst $(PRODUCT_OUT)/apex/$(_module_name)/%,%,$(ALL_MODULES.$m.INSTALLED)),$(sort $(ALL_MODULES.$m.PATH)),$(sort $(ALL_MODULES.$m.SOONG_MODULE_TYPE)),,,,,$(strip $(ALL_MODULES.$m.BUILT)),,, >> $$@;))
$(2): $(1)
-$(1): $(4) $(GEN_SBOM)
+$(1): $(4) $(3) $(GEN_SBOM) $(installed_files) $(metadata_list) $(metadata_files)
rm -rf $$@
$(GEN_SBOM) --output_file $$@ --metadata $(4) --build_version $$(BUILD_FINGERPRINT_FROM_FILE) --product_mfr "$(PRODUCT_MANUFACTURER)" --json $(if $(filter %.apk,$(3)),--unbundled_apk,--unbundled_apex)
endef
diff --git a/core/proguard.flags b/core/proguard.flags
index d790061..6dbee84 100644
--- a/core/proguard.flags
+++ b/core/proguard.flags
@@ -51,4 +51,13 @@
@**android**.annotation*.Keep <init>(...);
}
+# Keep Dalvik optimization annotations. These annotations are special in that
+# 1) we want them preserved for visibility with ART, but 2) they don't have
+# RUNTIME retention. These minimal keep rules ensure they're not stripped by R8.
+# TODO(b/215417388): Export this rule from the owning library, core-libart,
+# via export_proguard_flags_files.
+-keepclassmembers,allowshrinking,allowoptimization,allowobfuscation,allowaccessmodification class * {
+ @dalvik.annotation.optimization.** *;
+}
+
-include proguard_basic_keeps.flags
diff --git a/target/product/base_system.mk b/target/product/base_system.mk
index 009d611..c74d0a3 100644
--- a/target/product/base_system.mk
+++ b/target/product/base_system.mk
@@ -344,6 +344,7 @@
PRODUCT_HOST_PACKAGES += \
BugReport \
adb \
+ adevice \
art-tools \
atest \
bcc \
diff --git a/tools/aconfig/src/protos.rs b/tools/aconfig/src/protos.rs
index b93abcc..d3b5b37 100644
--- a/tools/aconfig/src/protos.rs
+++ b/tools/aconfig/src/protos.rs
@@ -215,6 +215,17 @@
super::tracepoint::verify_fields(tp)?;
}
ensure!(pf.bug.len() == 1, "bad flag declaration: exactly one bug required");
+ if pf.is_fixed_read_only() {
+ ensure!(
+ pf.permission() == ProtoFlagPermission::READ_ONLY,
+ "bad parsed flag: flag is is_fixed_read_only but permission is not READ_ONLY"
+ );
+ for tp in pf.trace.iter() {
+ ensure!(tp.permission() == ProtoFlagPermission::READ_ONLY,
+ "bad parsed flag: flag is is_fixed_read_only but a tracepoint's permission is not READ_ONLY"
+ );
+ }
+ }
Ok(())
}
@@ -547,7 +558,7 @@
description: "This is the description of the second flag."
bug: "SOME_BUG"
state: ENABLED
- permission: READ_WRITE
+ permission: READ_ONLY
trace {
source: "flags.declarations"
state: DISABLED
@@ -556,7 +567,7 @@
trace {
source: "flags.values"
state: ENABLED
- permission: READ_WRITE
+ permission: READ_ONLY
}
is_fixed_read_only: true
}
@@ -570,14 +581,14 @@
assert_eq!(second.description(), "This is the description of the second flag.");
assert_eq!(second.bug, vec!["SOME_BUG"]);
assert_eq!(second.state(), ProtoFlagState::ENABLED);
- assert_eq!(second.permission(), ProtoFlagPermission::READ_WRITE);
+ assert_eq!(second.permission(), ProtoFlagPermission::READ_ONLY);
assert_eq!(2, second.trace.len());
assert_eq!(second.trace[0].source(), "flags.declarations");
assert_eq!(second.trace[0].state(), ProtoFlagState::DISABLED);
assert_eq!(second.trace[0].permission(), ProtoFlagPermission::READ_ONLY);
assert_eq!(second.trace[1].source(), "flags.values");
assert_eq!(second.trace[1].state(), ProtoFlagState::ENABLED);
- assert_eq!(second.trace[1].permission(), ProtoFlagPermission::READ_WRITE);
+ assert_eq!(second.trace[1].permission(), ProtoFlagPermission::READ_ONLY);
assert!(second.is_fixed_read_only());
// valid input: empty
diff --git a/tools/aconfig/tests/aconfig_prod_mode_test.rs b/tools/aconfig/tests/aconfig_prod_mode_test.rs
index 708604b..950c441 100644
--- a/tools/aconfig/tests/aconfig_prod_mode_test.rs
+++ b/tools/aconfig/tests/aconfig_prod_mode_test.rs
@@ -1,3 +1,4 @@
+#[cfg(not(feature = "cargo"))]
#[test]
fn test_flags() {
assert!(!aconfig_test_rust_library::disabled_ro());
diff --git a/tools/aconfig/tests/aconfig_test_mode_test.rs b/tools/aconfig/tests/aconfig_test_mode_test.rs
index 7d40a44..3f56d2c 100644
--- a/tools/aconfig/tests/aconfig_test_mode_test.rs
+++ b/tools/aconfig/tests/aconfig_test_mode_test.rs
@@ -1,3 +1,4 @@
+#[cfg(not(feature = "cargo"))]
#[test]
fn test_flags() {
assert!(!aconfig_test_rust_library::disabled_ro());
diff --git a/tools/releasetools/test_common.py b/tools/releasetools/test_common.py
index 86fb480..c69a13d 100644
--- a/tools/releasetools/test_common.py
+++ b/tools/releasetools/test_common.py
@@ -15,14 +15,13 @@
#
import copy
-import json
import os
import subprocess
import tempfile
-import time
import unittest
import zipfile
from hashlib import sha1
+from typing import BinaryIO
import common
import test_utils
@@ -36,14 +35,24 @@
GiB = 1024 * MiB
-def get_2gb_string():
+def get_2gb_file():
size = int(2 * GiB + 1)
block_size = 4 * KiB
step_size = 4 * MiB
- # Generate a long string with holes, e.g. 'xyz\x00abc\x00...'.
+ tmpfile = tempfile.NamedTemporaryFile()
+ tmpfile.truncate(size)
for _ in range(0, size, step_size):
- yield os.urandom(block_size)
- yield b'\0' * (step_size - block_size)
+ tmpfile.write(os.urandom(block_size))
+ tmpfile.seek(step_size - block_size, os.SEEK_CUR)
+ return tmpfile
+
+
+def hash_file(filename):
+ sha1_hash = sha1()
+ with open(filename, "rb") as fp:
+ for data in iter(lambda: fp.read(4*MiB), b''):
+ sha1_hash.update(data)
+ return sha1_hash
class BuildInfoTest(test_utils.ReleaseToolsTestCase):
@@ -222,17 +231,17 @@
info_dict = copy.deepcopy(self.TEST_INFO_FINGERPRINT_DICT)
build_info = common.BuildInfo(info_dict)
self.assertEqual(
- 'product-brand/product-name/product-device:version-release/build-id/'
- 'version-incremental:build-type/build-tags', build_info.fingerprint)
+ 'product-brand/product-name/product-device:version-release/build-id/'
+ 'version-incremental:build-type/build-tags', build_info.fingerprint)
build_props = info_dict['build.prop'].build_props
del build_props['ro.build.id']
build_props['ro.build.legacy.id'] = 'legacy-build-id'
build_info = common.BuildInfo(info_dict, use_legacy_id=True)
self.assertEqual(
- 'product-brand/product-name/product-device:version-release/'
- 'legacy-build-id/version-incremental:build-type/build-tags',
- build_info.fingerprint)
+ 'product-brand/product-name/product-device:version-release/'
+ 'legacy-build-id/version-incremental:build-type/build-tags',
+ build_info.fingerprint)
self.assertRaises(common.ExternalError, common.BuildInfo, info_dict, None,
False)
@@ -241,9 +250,9 @@
info_dict['vbmeta_digest'] = 'abcde12345'
build_info = common.BuildInfo(info_dict, use_legacy_id=False)
self.assertEqual(
- 'product-brand/product-name/product-device:version-release/'
- 'legacy-build-id.abcde123/version-incremental:build-type/build-tags',
- build_info.fingerprint)
+ 'product-brand/product-name/product-device:version-release/'
+ 'legacy-build-id.abcde123/version-incremental:build-type/build-tags',
+ build_info.fingerprint)
def test___getitem__(self):
target_info = common.BuildInfo(self.TEST_INFO_DICT, None)
@@ -376,7 +385,7 @@
info_dict['build.prop'].build_props[
'ro.product.property_source_order'] = 'bad-source'
with self.assertRaisesRegexp(common.ExternalError,
- 'Invalid ro.product.property_source_order'):
+ 'Invalid ro.product.property_source_order'):
info = common.BuildInfo(info_dict, None)
info.GetBuildProp('ro.product.device')
@@ -429,6 +438,13 @@
self.assertIsNone(zip_file.testzip())
def _test_ZipWrite(self, contents, extra_zipwrite_args=None):
+ with tempfile.NamedTemporaryFile() as test_file:
+ test_file_name = test_file.name
+ for data in contents:
+ test_file.write(bytes(data))
+ return self._test_ZipWriteFile(test_file_name, extra_zipwrite_args)
+
+ def _test_ZipWriteFile(self, test_file_name, extra_zipwrite_args=None):
extra_zipwrite_args = dict(extra_zipwrite_args or {})
test_file = tempfile.NamedTemporaryFile(delete=False)
@@ -441,17 +457,12 @@
arcname = extra_zipwrite_args.get("arcname", test_file_name)
if arcname[0] == "/":
arcname = arcname[1:]
+ sha1_hash = hash_file(test_file_name)
zip_file.close()
zip_file = zipfile.ZipFile(zip_file_name, "w", allowZip64=True)
try:
- sha1_hash = sha1()
- for data in contents:
- sha1_hash.update(bytes(data))
- test_file.write(bytes(data))
- test_file.close()
-
expected_mode = extra_zipwrite_args.get("perms", 0o644)
expected_compress_type = extra_zipwrite_args.get("compress_type",
zipfile.ZIP_STORED)
@@ -467,7 +478,6 @@
test_file_name, expected_stat, expected_mode,
expected_compress_type)
finally:
- os.remove(test_file_name)
os.remove(zip_file_name)
def _test_ZipWriteStr(self, zinfo_or_arcname, contents, extra_args=None):
@@ -502,14 +512,13 @@
finally:
os.remove(zip_file_name)
- def _test_ZipWriteStr_large_file(self, large, small, extra_args=None):
+ def _test_ZipWriteStr_large_file(self, large_file: BinaryIO, small, extra_args=None):
extra_args = dict(extra_args or {})
zip_file = tempfile.NamedTemporaryFile(delete=False)
zip_file_name = zip_file.name
- test_file = tempfile.NamedTemporaryFile(delete=False)
- test_file_name = test_file.name
+ test_file_name = large_file.name
arcname_large = test_file_name
arcname_small = "bar"
@@ -522,11 +531,7 @@
zip_file = zipfile.ZipFile(zip_file_name, "w", allowZip64=True)
try:
- sha1_hash = sha1()
- for data in large:
- sha1_hash.update(data)
- test_file.write(data)
- test_file.close()
+ sha1_hash = hash_file(test_file_name)
# Arbitrary timestamp, just to make sure common.ZipWrite() restores
# the timestamp after writing.
@@ -551,7 +556,6 @@
expected_compress_type=expected_compress_type)
finally:
os.remove(zip_file_name)
- os.remove(test_file_name)
def _test_reset_ZIP64_LIMIT(self, func, *args):
default_limit = (1 << 31) - 1
@@ -577,10 +581,10 @@
})
def test_ZipWrite_large_file(self):
- file_contents = get_2gb_string()
- self._test_ZipWrite(file_contents, {
- "compress_type": zipfile.ZIP_DEFLATED,
- })
+ with get_2gb_file() as tmpfile:
+ self._test_ZipWriteFile(tmpfile.name, {
+ "compress_type": zipfile.ZIP_DEFLATED,
+ })
def test_ZipWrite_resets_ZIP64_LIMIT(self):
self._test_reset_ZIP64_LIMIT(self._test_ZipWrite, "")
@@ -627,11 +631,11 @@
# zipfile.writestr() doesn't work when the str size is over 2GiB even with
# the workaround. We will only test the case of writing a string into a
# large archive.
- long_string = get_2gb_string()
short_string = os.urandom(1024)
- self._test_ZipWriteStr_large_file(long_string, short_string, {
- "compress_type": zipfile.ZIP_DEFLATED,
- })
+ with get_2gb_file() as large_file:
+ self._test_ZipWriteStr_large_file(large_file, short_string, {
+ "compress_type": zipfile.ZIP_DEFLATED,
+ })
def test_ZipWriteStr_resets_ZIP64_LIMIT(self):
self._test_reset_ZIP64_LIMIT(self._test_ZipWriteStr, 'foo', b'')
@@ -821,9 +825,9 @@
)
APKCERTS_CERTMAP1 = {
- 'RecoveryLocalizer.apk' : 'certs/devkey',
- 'Settings.apk' : 'build/make/target/product/security/platform',
- 'TV.apk' : 'PRESIGNED',
+ 'RecoveryLocalizer.apk': 'certs/devkey',
+ 'Settings.apk': 'build/make/target/product/security/platform',
+ 'TV.apk': 'PRESIGNED',
}
APKCERTS_TXT2 = (
@@ -838,10 +842,10 @@
)
APKCERTS_CERTMAP2 = {
- 'Compressed1.apk' : 'certs/compressed1',
- 'Compressed2a.apk' : 'certs/compressed2',
- 'Compressed2b.apk' : 'certs/compressed2',
- 'Compressed3.apk' : 'certs/compressed3',
+ 'Compressed1.apk': 'certs/compressed1',
+ 'Compressed2a.apk': 'certs/compressed2',
+ 'Compressed2b.apk': 'certs/compressed2',
+ 'Compressed3.apk': 'certs/compressed3',
}
APKCERTS_TXT3 = (
@@ -850,7 +854,7 @@
)
APKCERTS_CERTMAP3 = {
- 'Compressed4.apk' : 'certs/compressed4',
+ 'Compressed4.apk': 'certs/compressed4',
}
# Test parsing with no optional fields, both optional fields, and only the
@@ -867,9 +871,9 @@
)
APKCERTS_CERTMAP4 = {
- 'RecoveryLocalizer.apk' : 'certs/devkey',
- 'Settings.apk' : 'build/make/target/product/security/platform',
- 'TV.apk' : 'PRESIGNED',
+ 'RecoveryLocalizer.apk': 'certs/devkey',
+ 'Settings.apk': 'build/make/target/product/security/platform',
+ 'TV.apk': 'PRESIGNED',
}
def setUp(self):
@@ -973,7 +977,7 @@
extracted_from_privkey = common.ExtractAvbPublicKey('avbtool', privkey)
extracted_from_pubkey = common.ExtractAvbPublicKey('avbtool', pubkey)
with open(extracted_from_privkey, 'rb') as privkey_fp, \
- open(extracted_from_pubkey, 'rb') as pubkey_fp:
+ open(extracted_from_pubkey, 'rb') as pubkey_fp:
self.assertEqual(privkey_fp.read(), pubkey_fp.read())
def test_ParseCertificate(self):
@@ -1237,7 +1241,8 @@
self.assertEqual(
'1-5 9-10',
sparse_image.file_map['//system/file1'].extra['text_str'])
- self.assertTrue(sparse_image.file_map['//system/file2'].extra['incomplete'])
+ self.assertTrue(
+ sparse_image.file_map['//system/file2'].extra['incomplete'])
self.assertTrue(
sparse_image.file_map['/system/app/file3'].extra['incomplete'])
@@ -1345,7 +1350,7 @@
'recovery_api_version': 3,
'fstab_version': 2,
'system_root_image': 'true',
- 'no_recovery' : 'true',
+ 'no_recovery': 'true',
'recovery_as_boot': 'true',
}
@@ -1667,6 +1672,7 @@
self.assertRaises(common.ExternalError, common._GenerateGkiCertificate,
test_file.name, 'generic_kernel')
+
class InstallRecoveryScriptFormatTest(test_utils.ReleaseToolsTestCase):
"""Checks the format of install-recovery.sh.
@@ -1676,7 +1682,7 @@
def setUp(self):
self._tempdir = common.MakeTempDir()
# Create a fake dict that contains the fstab info for boot&recovery.
- self._info = {"fstab" : {}}
+ self._info = {"fstab": {}}
fake_fstab = [
"/dev/soc.0/by-name/boot /boot emmc defaults defaults",
"/dev/soc.0/by-name/recovery /recovery emmc defaults defaults"]
@@ -2023,11 +2029,11 @@
input_zip, 'odm', placeholder_values)
self.assertEqual({
- 'ro.odm.build.date.utc': '1578430045',
- 'ro.odm.build.fingerprint':
- 'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
- 'ro.product.odm.device': 'coral',
- 'ro.product.odm.name': 'product1',
+ 'ro.odm.build.date.utc': '1578430045',
+ 'ro.odm.build.fingerprint':
+ 'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
+ 'ro.product.odm.device': 'coral',
+ 'ro.product.odm.name': 'product1',
}, partition_props.build_props)
with zipfile.ZipFile(input_file, 'r', allowZip64=True) as input_zip:
@@ -2210,8 +2216,8 @@
copied_props = copy.deepcopy(partition_props)
self.assertEqual({
- 'ro.odm.build.date.utc': '1578430045',
- 'ro.odm.build.fingerprint':
- 'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
- 'ro.product.odm.device': 'coral',
+ 'ro.odm.build.date.utc': '1578430045',
+ 'ro.odm.build.fingerprint':
+ 'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
+ 'ro.product.odm.device': 'coral',
}, copied_props.build_props)