Run validation on user specified vabc_compression_param

During OTA generation, we check the vabc compression param specified by
target files, and override compression param to gz if the specified
compression method is unsupported. Run the same validation on
compression param passed by --vabc_compression_param as well.

Test: th
Change-Id: If855a2ee8c3c280c74efd5a67df229ab6c5709c5
This commit is contained in:
Kelvin Zhang
2023-10-09 14:06:18 -07:00
parent a43c06e5d6
commit 7d1b29bd5d

View File

@@ -827,6 +827,15 @@ def ExtractOrCopyTargetFiles(target_file):
return ExtractTargetFiles(target_file)
def ValidateCompressinParam(target_info):
vabc_compression_param = OPTIONS.vabc_compression_param
if vabc_compression_param:
minimum_api_level_required = VABC_COMPRESSION_PARAM_SUPPORT[vabc_compression_param]
if target_info.vendor_api_level < minimum_api_level_required:
raise ValueError("Specified VABC compression param {} is only supported for API level >= {}, device is on API level {}".format(
vabc_compression_param, minimum_api_level_required, target_info.vendor_api_level))
def GenerateAbOtaPackage(target_file, output_file, source_file=None):
"""Generates an Android OTA package that has A/B update payload."""
# If input target_files are directories, create a copy so that we can modify
@@ -834,6 +843,8 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
target_info = common.BuildInfo(OPTIONS.info_dict, OPTIONS.oem_dicts)
if OPTIONS.disable_vabc and target_info.is_release_key:
raise ValueError("Disabling VABC on release-key builds is not supported.")
ValidateCompressinParam(target_info)
vabc_compression_param = target_info.vabc_compression_param
target_file = ExtractOrCopyTargetFiles(target_file)
if source_file is not None:
@@ -862,10 +873,11 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
if not source_info.is_vabc or not target_info.is_vabc:
logger.info("Either source or target does not support VABC, disabling.")
OPTIONS.disable_vabc = True
if source_info.vabc_compression_param != target_info.vabc_compression_param:
if OPTIONS.vabc_compression_param is None and \
source_info.vabc_compression_param != target_info.vabc_compression_param:
logger.info("Source build and target build use different compression methods {} vs {}, default to source builds parameter {}".format(
source_info.vabc_compression_param, target_info.vabc_compression_param, source_info.vabc_compression_param))
OPTIONS.vabc_compression_param = source_info.vabc_compression_param
vabc_compression_param = source_info.vabc_compression_param
# Virtual AB Compression was introduced in Androd S.
# Later, we backported VABC to Android R. But verity support was not
@@ -879,9 +891,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
assert "ab_partitions" in OPTIONS.info_dict, \
"META/ab_partitions.txt is required for ab_update."
source_info = None
if target_info.vabc_compression_param:
if OPTIONS.vabc_compression_param is None and vabc_compression_param:
minimum_api_level_required = VABC_COMPRESSION_PARAM_SUPPORT[
target_info.vabc_compression_param]
vabc_compression_param]
if target_info.vendor_api_level < minimum_api_level_required:
logger.warning(
"This full OTA is configured to use VABC compression algorithm"
@@ -891,10 +903,10 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
" served to a device running old build, OTA might fail due to "
"unsupported compression parameter. For safety, gz is used because "
"it's supported since day 1.".format(
target_info.vabc_compression_param,
vabc_compression_param,
minimum_api_level_required,
target_info.vendor_api_level))
OPTIONS.vabc_compression_param = "gz"
vabc_compression_param = "gz"
if OPTIONS.partial == []:
logger.info(
@@ -950,6 +962,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
logger.error("VABC XOR not supported on this vendor, disabling")
OPTIONS.enable_vabc_xor = False
if OPTIONS.vabc_compression_param:
vabc_compression_param = OPTIONS.vabc_compression_param
additional_args = []
# Prepare custom images.
@@ -964,9 +979,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
elif OPTIONS.partial:
target_file = GetTargetFilesZipForPartialUpdates(target_file,
OPTIONS.partial)
if OPTIONS.vabc_compression_param:
if vabc_compression_param != target_info.vabc_compression_param:
target_file = GetTargetFilesZipForCustomVABCCompression(
target_file, OPTIONS.vabc_compression_param)
target_file, vabc_compression_param)
if OPTIONS.skip_postinstall:
target_file = GetTargetFilesZipWithoutPostinstallConfig(target_file)
# Target_file may have been modified, reparse ab_partitions