android OTA修改
来源:互联网 发布:知乎 搞笑的段子 编辑:程序博客网 时间:2024/06/05 17:29
- def WriteFullOTAPackage(input_zip, output_zip):
- # TODO: how to determine this? We don't know what version it will
- # be installed on top of. For now, we expect the API just won't
- # change very often.
- script = edify_generator.EdifyGenerator(3, OPTIONS.info_dict)
- metadata = {"post-build": GetBuildProp("ro.build.fingerprint",
- OPTIONS.info_dict),
- "pre-device": GetBuildProp("ro.product.device",
- OPTIONS.info_dict),
- "post-timestamp": GetBuildProp("ro.build.date.utc",
- OPTIONS.info_dict),
- }
- device_specific = common.DeviceSpecificParams(
- input_zip=input_zip,
- input_version=OPTIONS.info_dict["recovery_api_version"],
- output_zip=output_zip,
- script=script,
- input_tmp=OPTIONS.input_tmp,
- metadata=metadata,
- info_dict=OPTIONS.info_dict)
- if not OPTIONS.omit_prereq:
- ts = GetBuildProp("ro.build.date.utc", OPTIONS.info_dict)
- script.AssertOlderBuild(ts)
- AppendAssertions(script, OPTIONS.info_dict)
- device_specific.FullOTA_Assertions()
- device_specific.FullOTA_InstallBegin()
- script.ShowProgress(0.5, 0)
- device_specific.Install_Parameter()
- if OPTIONS.wipe_user_data:
- script.FormatPartition("/data")
- if "selinux_fc" in OPTIONS.info_dict:
- WritePolicyConfig(OPTIONS.info_dict["selinux_fc"], output_zip)
- script.FormatPartition("/system")
- script.Mount("/system")
- script.UnpackPackageDir("recovery", "/system")
- script.UnpackPackageDir("system", "/system")
- symlinks = CopySystemFiles(input_zip, output_zip)
- script.MakeSymlinks(symlinks)
- boot_img = common.GetBootableImage("boot.img", "boot.img",
- OPTIONS.input_tmp, "BOOT")
- recovery_img = common.GetBootableImage("recovery.img", "recovery.img",
- OPTIONS.input_tmp, "RECOVERY")
- MakeRecoveryPatch(OPTIONS.input_tmp, output_zip, recovery_img, boot_img)
- Item.GetMetadata(input_zip)
- Item.Get("system").SetPermissions(script)
- common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
- common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
- script.ShowProgress(0.2, 0)
- script.ShowProgress(0.2, 10)
- script.WriteRawImage("/boot", "boot.img")
- script.ShowProgress(0.1, 0)
- device_specific.FullOTA_InstallEnd()
- if OPTIONS.extra_script is not None:
- script.AppendExtra(OPTIONS.extra_script)
- script.UnmountAll()
- script.AddToZip(input_zip, output_zip)
- WriteMetadata(metadata, output_zip)
如果想把recovery.img全部烧录而不产生差分包
# MakeRecoveryPatch(OPTIONS.input_tmp, output_zip, recovery_img, boot_img)//
common.CheckSize(recovery_img.data, "recovery.img", OPTIONS.info_dict)
common.ZipWriteStr(output_zip, "recovery.img", recovery_img.data)
script.WriteRawImage("/recovery", "recovery.img")
- def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
- source_version = OPTIONS.source_info_dict["recovery_api_version"]
- target_version = OPTIONS.target_info_dict["recovery_api_version"]
- if source_version == 0:
- print ("WARNING: generating edify script for a source that "
- "can't install it.")
- script = edify_generator.EdifyGenerator(source_version,
- OPTIONS.target_info_dict)
- metadata = {"pre-device": GetBuildProp("ro.product.device",
- OPTIONS.source_info_dict),
- "post-timestamp": GetBuildProp("ro.build.date.utc",
- OPTIONS.target_info_dict),
- }
- device_specific = common.DeviceSpecificParams(
- source_zip=source_zip,
- source_version=source_version,
- target_zip=target_zip,
- target_version=target_version,
- output_zip=output_zip,
- script=script,
- metadata=metadata,
- info_dict=OPTIONS.info_dict)
- print "Loading target..."
- target_data = LoadSystemFiles(target_zip)
- print "Loading source..."
- source_data = LoadSystemFiles(source_zip)
- verbatim_targets = []
- patch_list = []
- diffs = []
- largest_source_size = 0
- for fn in sorted(target_data.keys()):
- tf = target_data[fn]
- assert fn == tf.name
- sf = source_data.get(fn, None)
- if sf is None or fn in OPTIONS.require_verbatim:
- # This file should be included verbatim
- if fn in OPTIONS.prohibit_verbatim:
- raise common.ExternalError("\"%s\" must be sent verbatim" % (fn,))
- print "send", fn, "verbatim"
- tf.AddToZip(output_zip)
- verbatim_targets.append((fn, tf.size))
- elif tf.sha1 != sf.sha1:
- # File is different; consider sending as a patch
- diffs.append(common.Difference(tf, sf))
- else:
- # Target file identical to source.
- pass
- common.ComputeDifferences(diffs)
- for diff in diffs:
- tf, sf, d = diff.GetPatch()
- if d is None or len(d) > tf.size * OPTIONS.patch_threshold:
- # patch is almost as big as the file; don't bother patching
- tf.AddToZip(output_zip)
- verbatim_targets.append((tf.name, tf.size))
- else:
- common.ZipWriteStr(output_zip, "patch/" + tf.name + ".p", d)
- patch_list.append((tf.name, tf, sf, tf.size, common.sha1(d).hexdigest()))
- largest_source_size = max(largest_source_size, sf.size)
- source_fp = GetBuildProp("ro.build.fingerprint", OPTIONS.source_info_dict)
- target_fp = GetBuildProp("ro.build.fingerprint", OPTIONS.target_info_dict)
- metadata["pre-build"] = source_fp
- metadata["post-build"] = target_fp
- script.Mount("/system")
- script.AssertSomeFingerprint(source_fp, target_fp)
- source_boot = common.GetBootableImage(
- "/tmp/boot.img", "boot.img", OPTIONS.source_tmp, "BOOT",
- OPTIONS.source_info_dict)
- target_boot = common.GetBootableImage(
- "/tmp/boot.img", "boot.img", OPTIONS.target_tmp, "BOOT")
- updating_boot = (source_boot.data != target_boot.data)
- source_recovery = common.GetBootableImage(
- "/tmp/recovery.img", "recovery.img", OPTIONS.source_tmp, "RECOVERY",
- OPTIONS.source_info_dict)
- target_recovery = common.GetBootableImage(
- "/tmp/recovery.img", "recovery.img", OPTIONS.target_tmp, "RECOVERY")
- updating_recovery = (source_recovery.data != target_recovery.data)
- # Here's how we divide up the progress bar:
- # 0.1 for verifying the start state (PatchCheck calls)
- # 0.8 for applying patches (ApplyPatch calls)
- # 0.1 for unpacking verbatim files, symlinking, and doing the
- # device-specific commands.
- AppendAssertions(script, OPTIONS.target_info_dict)
- device_specific.IncrementalOTA_Assertions()
- script.Print("Verifying current system...")
- device_specific.IncrementalOTA_VerifyBegin()
- script.ShowProgress(0.1, 0)
- total_verify_size = float(sum([i[2].size for i in patch_list]) + 1)
- if updating_boot:
- total_verify_size += source_boot.size
- so_far = 0
- for fn, tf, sf, size, patch_sha in patch_list:
- script.PatchCheck("/"+fn, tf.sha1, sf.sha1)
- so_far += sf.size
- script.SetProgress(so_far / total_verify_size)
- if updating_boot:
- d = common.Difference(target_boot, source_boot)
- _, _, d = d.ComputePatch()
- print "boot target: %d source: %d diff: %d" % (
- target_boot.size, source_boot.size, len(d))
- common.ZipWriteStr(output_zip, "patch/boot.img.p", d)
- boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict)
- script.PatchCheck("%s:%s:%d:%s:%d:%s" %
- (boot_type, boot_device,
- source_boot.size, source_boot.sha1,
- target_boot.size, target_boot.sha1))
- so_far += source_boot.size
- script.SetProgress(so_far / total_verify_size)
- if patch_list or updating_recovery or updating_boot:
- script.CacheFreeSpaceCheck(largest_source_size)
- device_specific.IncrementalOTA_VerifyEnd()
- script.Comment("---- start making changes here ----")
- device_specific.IncrementalOTA_InstallBegin()
- if OPTIONS.wipe_user_data:
- script.Print("Erasing user data...")
- script.FormatPartition("/data")
- script.Print("Removing unneeded files...")
- script.DeleteFiles(["/"+i[0] for i in verbatim_targets] +
- ["/"+i for i in sorted(source_data)
- if i not in target_data] +
- ["/system/recovery.img"])
- script.ShowProgress(0.8, 0)
- total_patch_size = float(sum([i[1].size for i in patch_list]) + 1)
- if updating_boot:
- total_patch_size += target_boot.size
- so_far = 0
- script.Print("Patching system files...")
- deferred_patch_list = []
- for item in patch_list:
- fn, tf, sf, size, _ = item
- if tf.name == "system/build.prop":
- deferred_patch_list.append(item)
- continue
- script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1, sf.sha1, "patch/"+fn+".p")
- so_far += tf.size
- script.SetProgress(so_far / total_patch_size)
- if updating_boot:
- # Produce the boot image by applying a patch to the current
- # contents of the boot partition, and write it back to the
- # partition.
- script.Print("Patching boot image...")
- script.ApplyPatch("%s:%s:%d:%s:%d:%s"
- % (boot_type, boot_device,
- source_boot.size, source_boot.sha1,
- target_boot.size, target_boot.sha1),
- "-",
- target_boot.size, target_boot.sha1,
- source_boot.sha1, "patch/boot.img.p")
- so_far += target_boot.size
- script.SetProgress(so_far / total_patch_size)
- print "boot image changed; including."
- else:
- print "boot image unchanged; skipping."
- if updating_recovery:
- # Recovery is generated as a patch using both the boot image
- # (which contains the same linux kernel as recovery) and the file
- # /system/etc/recovery-resource.dat (which contains all the images
- # used in the recovery UI) as sources. This lets us minimize the
- # size of the patch, which must be included in every OTA package.
- #
- # For older builds where recovery-resource.dat is not present, we
- # use only the boot image as the source.
- MakeRecoveryPatch(OPTIONS.target_tmp, output_zip,
- target_recovery, target_boot)
- script.DeleteFiles(["/system/recovery-from-boot.p",
- "/system/etc/install-recovery.sh"])
- print "recovery image changed; including as patch from boot."
- else:
- print "recovery image unchanged; skipping."
- script.ShowProgress(0.1, 10)
- target_symlinks = CopySystemFiles(target_zip, None)
- target_symlinks_d = dict([(i[1], i[0]) for i in target_symlinks])
- temp_script = script.MakeTemporary()
- Item.GetMetadata(target_zip)
- Item.Get("system").SetPermissions(temp_script)
- # Note that this call will mess up the tree of Items, so make sure
- # we're done with it.
- source_symlinks = CopySystemFiles(source_zip, None)
- source_symlinks_d = dict([(i[1], i[0]) for i in source_symlinks])
- # Delete all the symlinks in source that aren't in target. This
- # needs to happen before verbatim files are unpacked, in case a
- # symlink in the source is replaced by a real file in the target.
- to_delete = []
- for dest, link in source_symlinks:
- if link not in target_symlinks_d:
- to_delete.append(link)
- script.DeleteFiles(to_delete)
- if verbatim_targets:
- script.Print("Unpacking new files...")
- script.UnpackPackageDir("system", "/system")
- if updating_recovery:
- script.Print("Unpacking new recovery...")
- script.UnpackPackageDir("recovery", "/system")
- script.Print("Symlinks and permissions...")
- # Create all the symlinks that don't already exist, or point to
- # somewhere different than what we want. Delete each symlink before
- # creating it, since the 'symlink' command won't overwrite.
- to_create = []
- for dest, link in target_symlinks:
- if link in source_symlinks_d:
- if dest != source_symlinks_d[link]:
- to_create.append((dest, link))
- else:
- to_create.append((dest, link))
- script.DeleteFiles([i[1] for i in to_create])
- script.MakeSymlinks(to_create)
- # Now that the symlinks are created, we can set all the
- # permissions.
- script.AppendScript(temp_script)
- # Do device-specific installation (eg, write radio image).
- device_specific.IncrementalOTA_InstallEnd()
- if OPTIONS.extra_script is not None:
- script.AppendExtra(OPTIONS.extra_script)
- # Patch the build.prop file last, so if something fails but the
- # device can still come up, it appears to be the old build and will
- # get set the OTA package again to retry.
- script.Print("Patching remaining system files...")
- for item in deferred_patch_list:
- fn, tf, sf, size, _ = item
- script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1, sf.sha1, "patch/"+fn+".p")
- script.SetPermissions("/system/build.prop", 0, 0, 0644)
- script.AddToZip(target_zip, output_zip)
- WriteMetadata(metadata, output_zip)
差分包把recovery.img完全烧录,而不产生差分,修改地方
- #if updating_boot:
- # total_verify_size += source_boot.size
- # d = common.Difference(target_boot, source_boot)
- # _, _, d = d.ComputePatch()
- # print "boot target: %d source: %d diff: %d" % (
- # target_boot.size, source_boot.size, len(d))
- # common.ZipWriteStr(output_zip, "patch/boot.img.p", d)
- # boot_type, boot_device = common.GetTypeAndDevice("/boot", OPTIONS.info_dict)
- # script.PatchCheck("%s:%s:%d:%s:%d:%s" %
- # (boot_type, boot_device,
- # source_boot.size, source_boot.sha1,
- # target_boot.size, target_boot.sha1))
- # so_far += source_boot.size
- # script.SetProgress(so_far / total_verify_size)
- boot_img = common.GetBootableImage("boot.img", "boot.img",
- OPTIONS.input_tmp, "BOOT")
- common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
- common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
- if updating_recovery:
- recovery_img = common.GetBootableImage("recovery.img", "recovery.img",
- OPTIONS.input_tmp, "RECOVERY")
- common.CheckSize(recovery_img.data, "recovery.img", OPTIONS.info_dict)
- common.ZipWriteStr(output_zip, "recovery.img", recovery_img.data)
同理,如果要把boot.img全部烧录而不产生差分包。修改
- #if updating_boot:
- # total_patch_size += target_boot.size
- #script.ApplyPatch("%s:%s:%d:%s:%d:%s"
- # % (boot_type, boot_device,
- # source_boot.size, source_boot.sha1,
- # target_boot.size, target_boot.sha1),
- # "-",
- # target_boot.size, target_boot.sha1,
- # source_boot.sha1, "patch/boot.img.p")
- #so_far += target_boot.size
- script.WriteRawImage("/boot", "boot.img")
- #script.SetProgress(so_far / total_patch_size)
- # MakeRecoveryPatch(OPTIONS.target_tmp, output_zip,
- # target_recovery, target_boot)
- # script.DeleteFiles(["/system/recovery-from-boot.p",
- # "/system/etc/install-recovery.sh"])
- # print "recovery image changed; including as patch from boot."
- script.Print("Patching recovery image...")
- script.WriteRawImage("/recovery", "recovery.img")
0 0
- android OTA修改
- android OTA修改
- Android OTA功能的实现和修改
- android OTA 的功能实现和修改
- android OTA 的功能实现和修改
- android OTA 的功能实现和修改
- Android OTA 的功能实现和修改
- android ota
- android OTA
- android OTA
- (android之系统)android OTA 的功能实现和修改
- android修改编译生成ota包的名字(MTK)
- android OTA 及CTS
- android OTA升级
- android OTA 简介
- Android OTA 升级
- Android OTA 简介
- android OTA 简介
- 有所突破
- Overlay机制
- 实验:华为MUX VLAN配置与管理
- android OTA
- 老雷
- android OTA修改
- struts常见的常量
- Why 番茄
- 编程算法 - 旋转矩阵 代码(C)
- Java虚拟机4——Java虚拟机垃圾收集器
- ImageView和ToggleButton
- 关于flex调用config.xml基础地图
- 完全平方数问题
- 流域水文模拟