Performs basic APEX validation in the merged target files package.

Uses apex_utils.GetApexInfoFromTargetFiles to find and parse APEX files
in the target files partition dirs. Raises an error on failure to parse
or duplicate package names.

Bug: 177225446
Test: releasetools_test
Test: Create a merged build that provides the VNDK APEX on both vendor
      and system. Observe failure.
Change-Id: I1356e263b7b32d6063129e079f3ba7ab4ff132a7
This commit is contained in:
Daniel Norman
2021-04-15 16:39:22 -07:00
parent 06b891d2bd
commit e9af70ad68
5 changed files with 79 additions and 9 deletions

View File

@@ -516,7 +516,7 @@ def SignApex(avbtool, apex_data, payload_key, container_key, container_pw,
raise ApexInfoError(
'Failed to get type for {}:\n{}'.format(apex_file, e))
def GetSystemApexInfoFromTargetFiles(input_file):
def GetApexInfoFromTargetFiles(input_file, partition, compressed_only=True):
"""
Get information about system APEX stored in the input_file zip
@@ -532,15 +532,17 @@ def GetSystemApexInfoFromTargetFiles(input_file):
if not isinstance(input_file, str):
raise RuntimeError("must pass filepath to target-files zip or directory")
apex_subdir = os.path.join(partition.upper(), 'apex')
if os.path.isdir(input_file):
tmp_dir = input_file
else:
tmp_dir = UnzipTemp(input_file, ["SYSTEM/apex/*"])
target_dir = os.path.join(tmp_dir, "SYSTEM/apex/")
tmp_dir = UnzipTemp(input_file, [os.path.join(apex_subdir, '*')])
target_dir = os.path.join(tmp_dir, apex_subdir)
# Partial target-files packages for vendor-only builds may not contain
# a system apex directory.
if not os.path.exists(target_dir):
logger.info('No APEX directory at path: %s', target_dir)
return []
apex_infos = []
@@ -585,6 +587,7 @@ def GetSystemApexInfoFromTargetFiles(input_file):
'--output', decompressed_file_path])
apex_info.decompressed_size = os.path.getsize(decompressed_file_path)
if not compressed_only or apex_info.is_compressed:
apex_infos.append(apex_info)
return apex_infos