Loading tools/releasetools/ota_from_target_files.py +28 −3 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,10 @@ Common options that apply to both of non-A/B and A/B OTAs --skip_compatibility_check --skip_compatibility_check Skip adding the compatibility package to the generated OTA package. Skip adding the compatibility package to the generated OTA package. --output_metadata_path Write a copy of the metadata to a separate file. Therefore, users can read the post build fingerprint without extracting the OTA package. Non-A/B OTA specific options Non-A/B OTA specific options -b (--binary) <file> -b (--binary) <file> Loading Loading @@ -225,6 +229,7 @@ OPTIONS.key_passwords = [] OPTIONS.skip_postinstall = False OPTIONS.skip_postinstall = False OPTIONS.retrofit_dynamic_partitions = False OPTIONS.retrofit_dynamic_partitions = False OPTIONS.skip_compatibility_check = False OPTIONS.skip_compatibility_check = False OPTIONS.output_metadata_path = None METADATA_NAME = 'META-INF/com/android/metadata' METADATA_NAME = 'META-INF/com/android/metadata' Loading Loading @@ -978,10 +983,22 @@ endif; FinalizeMetadata(metadata, staging_file, output_file, needed_property_files) FinalizeMetadata(metadata, staging_file, output_file, needed_property_files) def WriteMetadata(metadata, output_zip): def WriteMetadata(metadata, output): """Writes the metadata to the zip archive or a file. Args: metadata: The metadata dict for the package. output: A ZipFile object or a string of the output file path. """ value = "".join(["%s=%s\n" % kv for kv in sorted(metadata.iteritems())]) value = "".join(["%s=%s\n" % kv for kv in sorted(metadata.iteritems())]) common.ZipWriteStr(output_zip, METADATA_NAME, value, if isinstance(output, zipfile.ZipFile): common.ZipWriteStr(output, METADATA_NAME, value, compress_type=zipfile.ZIP_STORED) compress_type=zipfile.ZIP_STORED) return with open(output, 'w') as f: f.write(value) def HandleDowngradeMetadata(metadata, target_info, source_info): def HandleDowngradeMetadata(metadata, target_info, source_info): Loading Loading @@ -1425,6 +1442,11 @@ def FinalizeMetadata(metadata, input_file, output_file, needed_property_files): for property_files in needed_property_files: for property_files in needed_property_files: property_files.Verify(output_zip, metadata[property_files.name].strip()) property_files.Verify(output_zip, metadata[property_files.name].strip()) # If requested, dump the metadata to a separate file. output_metadata_path = OPTIONS.output_metadata_path if output_metadata_path: WriteMetadata(metadata, output_metadata_path) def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_file): def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_file): target_info = BuildInfo(OPTIONS.target_info_dict, OPTIONS.oem_dicts) target_info = BuildInfo(OPTIONS.target_info_dict, OPTIONS.oem_dicts) Loading Loading @@ -2043,6 +2065,8 @@ def main(argv): OPTIONS.retrofit_dynamic_partitions = True OPTIONS.retrofit_dynamic_partitions = True elif o == "--skip_compatibility_check": elif o == "--skip_compatibility_check": OPTIONS.skip_compatibility_check = True OPTIONS.skip_compatibility_check = True elif o == "--output_metadata_path": OPTIONS.output_metadata_path = a else: else: return False return False return True return True Loading Loading @@ -2075,6 +2099,7 @@ def main(argv): "skip_postinstall", "skip_postinstall", "retrofit_dynamic_partitions", "retrofit_dynamic_partitions", "skip_compatibility_check", "skip_compatibility_check", "output_metadata_path=", ], extra_option_handler=option_handler) ], extra_option_handler=option_handler) if len(args) != 2: if len(args) != 2: Loading Loading
tools/releasetools/ota_from_target_files.py +28 −3 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,10 @@ Common options that apply to both of non-A/B and A/B OTAs --skip_compatibility_check --skip_compatibility_check Skip adding the compatibility package to the generated OTA package. Skip adding the compatibility package to the generated OTA package. --output_metadata_path Write a copy of the metadata to a separate file. Therefore, users can read the post build fingerprint without extracting the OTA package. Non-A/B OTA specific options Non-A/B OTA specific options -b (--binary) <file> -b (--binary) <file> Loading Loading @@ -225,6 +229,7 @@ OPTIONS.key_passwords = [] OPTIONS.skip_postinstall = False OPTIONS.skip_postinstall = False OPTIONS.retrofit_dynamic_partitions = False OPTIONS.retrofit_dynamic_partitions = False OPTIONS.skip_compatibility_check = False OPTIONS.skip_compatibility_check = False OPTIONS.output_metadata_path = None METADATA_NAME = 'META-INF/com/android/metadata' METADATA_NAME = 'META-INF/com/android/metadata' Loading Loading @@ -978,10 +983,22 @@ endif; FinalizeMetadata(metadata, staging_file, output_file, needed_property_files) FinalizeMetadata(metadata, staging_file, output_file, needed_property_files) def WriteMetadata(metadata, output_zip): def WriteMetadata(metadata, output): """Writes the metadata to the zip archive or a file. Args: metadata: The metadata dict for the package. output: A ZipFile object or a string of the output file path. """ value = "".join(["%s=%s\n" % kv for kv in sorted(metadata.iteritems())]) value = "".join(["%s=%s\n" % kv for kv in sorted(metadata.iteritems())]) common.ZipWriteStr(output_zip, METADATA_NAME, value, if isinstance(output, zipfile.ZipFile): common.ZipWriteStr(output, METADATA_NAME, value, compress_type=zipfile.ZIP_STORED) compress_type=zipfile.ZIP_STORED) return with open(output, 'w') as f: f.write(value) def HandleDowngradeMetadata(metadata, target_info, source_info): def HandleDowngradeMetadata(metadata, target_info, source_info): Loading Loading @@ -1425,6 +1442,11 @@ def FinalizeMetadata(metadata, input_file, output_file, needed_property_files): for property_files in needed_property_files: for property_files in needed_property_files: property_files.Verify(output_zip, metadata[property_files.name].strip()) property_files.Verify(output_zip, metadata[property_files.name].strip()) # If requested, dump the metadata to a separate file. output_metadata_path = OPTIONS.output_metadata_path if output_metadata_path: WriteMetadata(metadata, output_metadata_path) def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_file): def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_file): target_info = BuildInfo(OPTIONS.target_info_dict, OPTIONS.oem_dicts) target_info = BuildInfo(OPTIONS.target_info_dict, OPTIONS.oem_dicts) Loading Loading @@ -2043,6 +2065,8 @@ def main(argv): OPTIONS.retrofit_dynamic_partitions = True OPTIONS.retrofit_dynamic_partitions = True elif o == "--skip_compatibility_check": elif o == "--skip_compatibility_check": OPTIONS.skip_compatibility_check = True OPTIONS.skip_compatibility_check = True elif o == "--output_metadata_path": OPTIONS.output_metadata_path = a else: else: return False return False return True return True Loading Loading @@ -2075,6 +2099,7 @@ def main(argv): "skip_postinstall", "skip_postinstall", "retrofit_dynamic_partitions", "retrofit_dynamic_partitions", "skip_compatibility_check", "skip_compatibility_check", "output_metadata_path=", ], extra_option_handler=option_handler) ], extra_option_handler=option_handler) if len(args) != 2: if len(args) != 2: Loading