Merge changes I1d1ec878,I25c1dc20
* changes: Remove unnecessary AddCareMapForAbOta() in merge_target_files. Run pyformat on merge_target_files.py
This commit is contained in:
@@ -127,7 +127,7 @@ import ota_from_target_files
|
|||||||
import sparse_img
|
import sparse_img
|
||||||
import verity_utils
|
import verity_utils
|
||||||
|
|
||||||
from common import AddCareMapForAbOta, ExternalError, PARTITIONS_WITH_CARE_MAP
|
from common import ExternalError
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -826,10 +826,6 @@ def generate_care_map(partitions, output_target_files_dir):
|
|||||||
image_size = verity_image_builder.CalculateMaxImageSize(partition_size)
|
image_size = verity_image_builder.CalculateMaxImageSize(partition_size)
|
||||||
OPTIONS.info_dict[image_size_prop] = image_size
|
OPTIONS.info_dict[image_size_prop] = image_size
|
||||||
|
|
||||||
AddCareMapForAbOta(
|
|
||||||
os.path.join(output_target_files_dir, 'META', 'care_map.pb'),
|
|
||||||
PARTITIONS_WITH_CARE_MAP, partition_image_map)
|
|
||||||
|
|
||||||
|
|
||||||
def process_special_cases(temp_dir, framework_meta, vendor_meta,
|
def process_special_cases(temp_dir, framework_meta, vendor_meta,
|
||||||
output_target_files_temp_dir,
|
output_target_files_temp_dir,
|
||||||
@@ -843,11 +839,12 @@ def process_special_cases(temp_dir, framework_meta, vendor_meta,
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
temp_dir: Location containing an 'output' directory where target files have
|
temp_dir: Location containing an 'output' directory where target files have
|
||||||
been extracted, e.g. <temp_dir>/output/SYSTEM, <temp_dir>/output/IMAGES, etc.
|
been extracted, e.g. <temp_dir>/output/SYSTEM, <temp_dir>/output/IMAGES,
|
||||||
|
etc.
|
||||||
framework_meta: The name of a directory containing the special items
|
framework_meta: The name of a directory containing the special items
|
||||||
extracted from the framework target files package.
|
extracted from the framework target files package.
|
||||||
vendor_meta: The name of a directory containing the special items
|
vendor_meta: The name of a directory containing the special items extracted
|
||||||
extracted from the vendor target files package.
|
from the vendor target files package.
|
||||||
output_target_files_temp_dir: The name of a directory that will be used to
|
output_target_files_temp_dir: The name of a directory that will be used to
|
||||||
create the output target files package after all the special cases are
|
create the output target files package after all the special cases are
|
||||||
processed.
|
processed.
|
||||||
@@ -858,9 +855,7 @@ def process_special_cases(temp_dir, framework_meta, vendor_meta,
|
|||||||
partitions. Used to filter apexkeys.txt and apkcerts.txt.
|
partitions. Used to filter apexkeys.txt and apkcerts.txt.
|
||||||
vendor_partition_set: Partitions that are considered vendor partitions. Used
|
vendor_partition_set: Partitions that are considered vendor partitions. Used
|
||||||
to filter apexkeys.txt and apkcerts.txt.
|
to filter apexkeys.txt and apkcerts.txt.
|
||||||
|
Args used if dexpreopt is applied:
|
||||||
The following are only used if dexpreopt is applied:
|
|
||||||
|
|
||||||
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
||||||
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
||||||
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
||||||
@@ -915,14 +910,14 @@ def process_special_cases(temp_dir, framework_meta, vendor_meta,
|
|||||||
|
|
||||||
|
|
||||||
def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
||||||
output_target_files_temp_dir,
|
output_target_files_temp_dir, framework_dexpreopt_tools,
|
||||||
framework_dexpreopt_tools, framework_dexpreopt_config,
|
framework_dexpreopt_config, vendor_dexpreopt_config):
|
||||||
vendor_dexpreopt_config):
|
|
||||||
"""If needed, generates dexopt files for vendor apps.
|
"""If needed, generates dexopt files for vendor apps.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
temp_dir: Location containing an 'output' directory where target files have
|
temp_dir: Location containing an 'output' directory where target files have
|
||||||
been extracted, e.g. <temp_dir>/output/SYSTEM, <temp_dir>/output/IMAGES, etc.
|
been extracted, e.g. <temp_dir>/output/SYSTEM, <temp_dir>/output/IMAGES,
|
||||||
|
etc.
|
||||||
framework_meta: The name of a directory containing the special items
|
framework_meta: The name of a directory containing the special items
|
||||||
extracted from the framework target files package.
|
extracted from the framework target files package.
|
||||||
vendor_meta: The name of a directory containing the special items extracted
|
vendor_meta: The name of a directory containing the special items extracted
|
||||||
@@ -940,8 +935,7 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
os.path.join(vendor_meta, *misc_info_path))
|
os.path.join(vendor_meta, *misc_info_path))
|
||||||
|
|
||||||
if (vendor_misc_info_dict.get('building_with_vsdk') != 'true' or
|
if (vendor_misc_info_dict.get('building_with_vsdk') != 'true' or
|
||||||
framework_dexpreopt_tools is None or
|
framework_dexpreopt_tools is None or framework_dexpreopt_config is None or
|
||||||
framework_dexpreopt_config is None or
|
|
||||||
vendor_dexpreopt_config is None):
|
vendor_dexpreopt_config is None):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -984,8 +978,10 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
# package.vdex
|
# package.vdex
|
||||||
# package.odex
|
# package.odex
|
||||||
dexpreopt_tools_files_temp_dir = os.path.join(temp_dir, 'tools')
|
dexpreopt_tools_files_temp_dir = os.path.join(temp_dir, 'tools')
|
||||||
dexpreopt_framework_config_files_temp_dir = os.path.join(temp_dir, 'system_config')
|
dexpreopt_framework_config_files_temp_dir = os.path.join(
|
||||||
dexpreopt_vendor_config_files_temp_dir = os.path.join(temp_dir, 'vendor_config')
|
temp_dir, 'system_config')
|
||||||
|
dexpreopt_vendor_config_files_temp_dir = os.path.join(temp_dir,
|
||||||
|
'vendor_config')
|
||||||
|
|
||||||
extract_items(
|
extract_items(
|
||||||
target_files=OPTIONS.framework_dexpreopt_tools,
|
target_files=OPTIONS.framework_dexpreopt_tools,
|
||||||
@@ -1000,10 +996,12 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
target_files_temp_dir=dexpreopt_vendor_config_files_temp_dir,
|
target_files_temp_dir=dexpreopt_vendor_config_files_temp_dir,
|
||||||
extract_item_list=('*',))
|
extract_item_list=('*',))
|
||||||
|
|
||||||
os.symlink(os.path.join(output_target_files_temp_dir, "SYSTEM"),
|
os.symlink(
|
||||||
os.path.join(temp_dir, "system"))
|
os.path.join(output_target_files_temp_dir, 'SYSTEM'),
|
||||||
os.symlink(os.path.join(output_target_files_temp_dir, "VENDOR"),
|
os.path.join(temp_dir, 'system'))
|
||||||
os.path.join(temp_dir, "vendor"))
|
os.symlink(
|
||||||
|
os.path.join(output_target_files_temp_dir, 'VENDOR'),
|
||||||
|
os.path.join(temp_dir, 'vendor'))
|
||||||
|
|
||||||
# The directory structure for flatteded APEXes is:
|
# The directory structure for flatteded APEXes is:
|
||||||
#
|
#
|
||||||
@@ -1026,7 +1024,7 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
# com.android.appsearch.apex
|
# com.android.appsearch.apex
|
||||||
# com.android.art.apex
|
# com.android.art.apex
|
||||||
# ...
|
# ...
|
||||||
apex_root = os.path.join(output_target_files_temp_dir, "SYSTEM", "apex")
|
apex_root = os.path.join(output_target_files_temp_dir, 'SYSTEM', 'apex')
|
||||||
framework_misc_info_dict = common.LoadDictionaryFromFile(
|
framework_misc_info_dict = common.LoadDictionaryFromFile(
|
||||||
os.path.join(framework_meta, *misc_info_path))
|
os.path.join(framework_meta, *misc_info_path))
|
||||||
|
|
||||||
@@ -1094,13 +1092,14 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
dex_img = 'VENDOR'
|
dex_img = 'VENDOR'
|
||||||
# Open vendor_filesystem_config to append the items generated by dexopt.
|
# Open vendor_filesystem_config to append the items generated by dexopt.
|
||||||
vendor_file_system_config = open(
|
vendor_file_system_config = open(
|
||||||
os.path.join(temp_dir, 'output', 'META', 'vendor_filesystem_config.txt'),
|
os.path.join(temp_dir, 'output', 'META',
|
||||||
'a')
|
'vendor_filesystem_config.txt'), 'a')
|
||||||
|
|
||||||
# Dexpreopt vendor apps.
|
# Dexpreopt vendor apps.
|
||||||
dexpreopt_config_suffix = '_dexpreopt.config'
|
dexpreopt_config_suffix = '_dexpreopt.config'
|
||||||
for config in glob.glob(os.path.join(
|
for config in glob.glob(
|
||||||
dexpreopt_vendor_config_files_temp_dir, '*' + dexpreopt_config_suffix)):
|
os.path.join(dexpreopt_vendor_config_files_temp_dir,
|
||||||
|
'*' + dexpreopt_config_suffix)):
|
||||||
app = os.path.basename(config)[:-len(dexpreopt_config_suffix)]
|
app = os.path.basename(config)[:-len(dexpreopt_config_suffix)]
|
||||||
logging.info('dexpreopt config: %s %s', config, app)
|
logging.info('dexpreopt config: %s %s', config, app)
|
||||||
|
|
||||||
@@ -1110,7 +1109,8 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
apk_dir = 'priv-app'
|
apk_dir = 'priv-app'
|
||||||
apk_path = os.path.join(temp_dir, 'vendor', apk_dir, app, app + '.apk')
|
apk_path = os.path.join(temp_dir, 'vendor', apk_dir, app, app + '.apk')
|
||||||
if not os.path.exists(apk_path):
|
if not os.path.exists(apk_path):
|
||||||
logging.warning('skipping dexpreopt for %s, no apk found in vendor/app '
|
logging.warning(
|
||||||
|
'skipping dexpreopt for %s, no apk found in vendor/app '
|
||||||
'or vendor/priv-app', app)
|
'or vendor/priv-app', app)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -1121,10 +1121,11 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
command = [
|
command = [
|
||||||
os.path.join(dexpreopt_tools_files_temp_dir, 'dexpreopt_gen'),
|
os.path.join(dexpreopt_tools_files_temp_dir, 'dexpreopt_gen'),
|
||||||
'-global',
|
'-global',
|
||||||
os.path.join(dexpreopt_framework_config_files_temp_dir, 'dexpreopt.config'),
|
os.path.join(dexpreopt_framework_config_files_temp_dir,
|
||||||
|
'dexpreopt.config'),
|
||||||
'-global_soong',
|
'-global_soong',
|
||||||
os.path.join(
|
os.path.join(dexpreopt_framework_config_files_temp_dir,
|
||||||
dexpreopt_framework_config_files_temp_dir, 'dexpreopt_soong.config'),
|
'dexpreopt_soong.config'),
|
||||||
'-module',
|
'-module',
|
||||||
config,
|
config,
|
||||||
'-dexpreopt_script',
|
'-dexpreopt_script',
|
||||||
@@ -1137,13 +1138,13 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
]
|
]
|
||||||
|
|
||||||
# Run the command from temp_dir so all tool paths are its descendants.
|
# Run the command from temp_dir so all tool paths are its descendants.
|
||||||
logging.info("running %s", command)
|
logging.info('running %s', command)
|
||||||
subprocess.check_call(command, cwd = temp_dir)
|
subprocess.check_call(command, cwd=temp_dir)
|
||||||
|
|
||||||
# Call the generated script.
|
# Call the generated script.
|
||||||
command = ['sh', 'dexpreopt_app.sh', apk_path]
|
command = ['sh', 'dexpreopt_app.sh', apk_path]
|
||||||
logging.info("running %s", command)
|
logging.info('running %s', command)
|
||||||
subprocess.check_call(command, cwd = temp_dir)
|
subprocess.check_call(command, cwd=temp_dir)
|
||||||
|
|
||||||
# Output files are in:
|
# Output files are in:
|
||||||
#
|
#
|
||||||
@@ -1171,13 +1172,16 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
# TODO(b/188179859): Support for other architectures.
|
# TODO(b/188179859): Support for other architectures.
|
||||||
arch = 'arm64'
|
arch = 'arm64'
|
||||||
|
|
||||||
dex_destination = os.path.join(temp_dir, 'output', dex_img, apk_dir, app, 'oat', arch)
|
dex_destination = os.path.join(temp_dir, 'output', dex_img, apk_dir, app,
|
||||||
|
'oat', arch)
|
||||||
os.makedirs(dex_destination)
|
os.makedirs(dex_destination)
|
||||||
dex2oat_path = os.path.join(
|
dex2oat_path = os.path.join(temp_dir, 'out', 'dex2oat_result', 'vendor',
|
||||||
temp_dir, 'out', 'dex2oat_result', 'vendor', apk_dir, app, 'oat', arch)
|
apk_dir, app, 'oat', arch)
|
||||||
shutil.copy(os.path.join(dex2oat_path, 'package.vdex'),
|
shutil.copy(
|
||||||
|
os.path.join(dex2oat_path, 'package.vdex'),
|
||||||
os.path.join(dex_destination, app + '.vdex'))
|
os.path.join(dex_destination, app + '.vdex'))
|
||||||
shutil.copy(os.path.join(dex2oat_path, 'package.odex'),
|
shutil.copy(
|
||||||
|
os.path.join(dex2oat_path, 'package.odex'),
|
||||||
os.path.join(dex_destination, app + '.odex'))
|
os.path.join(dex_destination, app + '.odex'))
|
||||||
|
|
||||||
# Append entries to vendor_file_system_config.txt, such as:
|
# Append entries to vendor_file_system_config.txt, such as:
|
||||||
@@ -1192,8 +1196,10 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
vendor_file_system_config.writelines([
|
vendor_file_system_config.writelines([
|
||||||
vendor_app_prefix + ' 0 2000 755 ' + selabel + '\n',
|
vendor_app_prefix + ' 0 2000 755 ' + selabel + '\n',
|
||||||
vendor_app_prefix + '/' + arch + ' 0 2000 755 ' + selabel + '\n',
|
vendor_app_prefix + '/' + arch + ' 0 2000 755 ' + selabel + '\n',
|
||||||
vendor_app_prefix + '/' + arch + '/' + app + '.odex 0 0 644 ' + selabel + '\n',
|
vendor_app_prefix + '/' + arch + '/' + app + '.odex 0 0 644 ' +
|
||||||
vendor_app_prefix + '/' + arch + '/' + app + '.vdex 0 0 644 ' + selabel + '\n',
|
selabel + '\n',
|
||||||
|
vendor_app_prefix + '/' + arch + '/' + app + '.vdex 0 0 644 ' +
|
||||||
|
selabel + '\n',
|
||||||
])
|
])
|
||||||
|
|
||||||
if not use_system_other_odex:
|
if not use_system_other_odex:
|
||||||
@@ -1202,7 +1208,8 @@ def process_dexopt(temp_dir, framework_meta, vendor_meta,
|
|||||||
# TODO(b/188179859): Rebuilding a vendor image in GRF mode (e.g., T(framework)
|
# TODO(b/188179859): Rebuilding a vendor image in GRF mode (e.g., T(framework)
|
||||||
# and S(vendor) may require logic similar to that in
|
# and S(vendor) may require logic similar to that in
|
||||||
# rebuild_image_with_sepolicy.
|
# rebuild_image_with_sepolicy.
|
||||||
vendor_img = os.path.join(output_target_files_temp_dir, 'IMAGES', 'vendor.img')
|
vendor_img = os.path.join(output_target_files_temp_dir, 'IMAGES',
|
||||||
|
'vendor.img')
|
||||||
if os.path.exists(vendor_img):
|
if os.path.exists(vendor_img):
|
||||||
logging.info('Deleting %s', vendor_img)
|
logging.info('Deleting %s', vendor_img)
|
||||||
os.remove(vendor_img)
|
os.remove(vendor_img)
|
||||||
@@ -1236,9 +1243,7 @@ def create_merged_package(temp_dir, framework_target_files, framework_item_list,
|
|||||||
vendor instance.
|
vendor instance.
|
||||||
rebuild_recovery: If true, rebuild the recovery patch used by non-A/B
|
rebuild_recovery: If true, rebuild the recovery patch used by non-A/B
|
||||||
devices and write it to the system image.
|
devices and write it to the system image.
|
||||||
|
Args used if dexpreopt is applied:
|
||||||
The following are only used if dexpreopt is applied:
|
|
||||||
|
|
||||||
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
||||||
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
||||||
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
||||||
@@ -1535,9 +1540,7 @@ def merge_target_files(temp_dir, framework_target_files, framework_item_list,
|
|||||||
vendor_otatools: Path to an otatools zip used for recompiling vendor images.
|
vendor_otatools: Path to an otatools zip used for recompiling vendor images.
|
||||||
rebuild_sepolicy: If true, rebuild odm.img (if target uses ODM) or
|
rebuild_sepolicy: If true, rebuild odm.img (if target uses ODM) or
|
||||||
vendor.img using a merged precompiled_sepolicy file.
|
vendor.img using a merged precompiled_sepolicy file.
|
||||||
|
Args used if dexpreopt is applied:
|
||||||
The following are only used if dexpreopt is applied:
|
|
||||||
|
|
||||||
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
framework_dexpreopt_tools: Location of dexpreopt_tools.zip.
|
||||||
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
framework_dexpreopt_config: Location of framework's dexpreopt_config.zip.
|
||||||
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
vendor_dexpreopt_config: Location of vendor's dexpreopt_config.zip.
|
||||||
@@ -1820,7 +1823,8 @@ def main():
|
|||||||
rebuild_sepolicy=OPTIONS.rebuild_sepolicy,
|
rebuild_sepolicy=OPTIONS.rebuild_sepolicy,
|
||||||
framework_dexpreopt_tools=OPTIONS.framework_dexpreopt_tools,
|
framework_dexpreopt_tools=OPTIONS.framework_dexpreopt_tools,
|
||||||
framework_dexpreopt_config=OPTIONS.framework_dexpreopt_config,
|
framework_dexpreopt_config=OPTIONS.framework_dexpreopt_config,
|
||||||
vendor_dexpreopt_config=OPTIONS.vendor_dexpreopt_config), OPTIONS.keep_tmp)
|
vendor_dexpreopt_config=OPTIONS.vendor_dexpreopt_config),
|
||||||
|
OPTIONS.keep_tmp)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Reference in New Issue
Block a user