diff options
author | Daniel Zheng <zhengdaniel@google.com> | 2024-02-28 12:59:52 -0800 |
---|---|---|
committer | Daniel Zheng <zhengdaniel@google.com> | 2024-02-28 20:47:20 -0800 |
commit | 474afa8f06e297924c7fe03e47ce8d6e7c703024 (patch) | |
tree | 98237e725bd3a8d5a14a5e80d10131391f8c9f40 | |
parent | e6045f8b74ae7962701f0e1f05f90e1e3cae1072 (diff) | |
download | build-474afa8f06e297924c7fe03e47ce8d6e7c703024.tar.gz |
fallback on older cow version
If a device's source or target cow version is specified at 2 (or
undefined) we should fallback on using the v2 writer.
e.g.
1. v3 -> v2 downgrade OTA
2. v2 -> v3
Bug: 322279333
Test: ota_from_target_files
Change-Id: I8c5139eceeb64ee255ddea66017b3e17bbdc44c0
-rw-r--r-- | tools/releasetools/common.py | 4 | ||||
-rwxr-xr-x | tools/releasetools/ota_from_target_files.py | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 199037728d..8a8a613c78 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -480,6 +480,10 @@ class BuildInfo(object): return self.get("virtual_ab_compression_method", "") @property + def vabc_cow_version(self): + return self.get("virtual_ab_cow_version", "") + + @property def vendor_api_level(self): vendor_prop = self.info_dict.get("vendor.build.prop") if not vendor_prop: diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py index dbbbca2189..c0ff5d2741 100755 --- a/tools/releasetools/ota_from_target_files.py +++ b/tools/releasetools/ota_from_target_files.py @@ -908,6 +908,16 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None): source_info.vabc_compression_param, target_info.vabc_compression_param, source_info.vabc_compression_param)) vabc_compression_param = source_info.vabc_compression_param + # Virtual AB Cow version 3 is introduced in Android U with improved memory + # and install time performance. All OTA's with + # both the source build and target build with VIRTUAL_AB_COW_VERSION = 3 + # can support the new format. Otherwise, fallback on older versions + if not source_info.vabc_cow_version or not target_info.vabc_cow_version: + logger.info("Source or Target doesn't have VABC_COW_VERSION specified, default to version 2") + OPTIONS.vabc_cow_version = 2 + elif source_info.vabc_cow_version != target_info.vabc_cow_version: + logger.info("Source and Target have different cow VABC_COW_VERSION specified, default to minimum version") + OPTIONS.vabc_cow_version = min(source_info.vabc_cow_version, target_info.vabc_cow_version) # Virtual AB Compression was introduced in Androd S. # Later, we backported VABC to Android R. But verity support was not # backported, so if VABC is used and we are on Android R, disable |