首页 > 其他分享 >ota升级包中update-script脚本的生成

ota升级包中update-script脚本的生成

时间:2023-09-06 11:34:03浏览次数:42  
标签:zip script ota py update build date ro


控制升级流程的主要逻辑,实际控制着升级过程中大部分重要操作的实施细节,而处于升级包中同目录下的update-bianry负责真正执行update-script记录的操作。

 

在负责生成升级包的脚本ota_from_target_files.py中,不论我们调用这个脚本来产生全量包,增量包,或者是安卓新加入的block方式的增量包,在这个脚本中分别主要由 WriteFullOTAPackage(input_zip, output_zip) 、WriteIncrementalOTAPackage(target_zip, source_zip, output_zip)、WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip) 这三个函数负责完成它们的创建,在这些函数的刚开始,都有类似的这样一句,这里以生成全量包为例:


script            =            edify_generator.EdifyGenerator(           3           , OPTIONS.info_dict)


这里就是调用 /build/tools/releasetools下的edify_generator.py,创建一个edify格式的脚本,创件的这个script脚本就是最终升级包中的update-script

 

在之后的操作中,对script的各种操作,都是直接调用edify_generator.py中定义的方法,然后再这些方法中,对script传来的参数做各种处理,最终通过self.script.append向update-script中写入了各种命令,

比如说在WriteFullOTAPackage(input_zip, output_zip)中会有:


if            not            OPTIONS.omit_prereq:          


                      ts            =            GetBuildProp(           "ro.build.date.utc"           , OPTIONS.info_dict)          


                      ts_text            =            GetBuildProp(           "ro.build.date"           , OPTIONS.info_dict)          


                      script.AssertOlderBuild(ts, ts_text)


如果我们在调用ota_from_target_files.py时没有添加-n参数,表示我们不忽略时间戳检查,根据ota_from_target_files.py的main中:


elif            o            in            (           "-n"           ,            "--no_prereq"           ):          


           OPTIONS.omit_prereq            =            True


然后根据另一篇分析ota升级过程的blog, GetBuildProp会读取target files中的misc_info.txt以及build.prop,分别读取到ro.build.date,ro.build.date.utc

ro.build.date=Wed Apr 13 03:29:53 CST 2016
ro.build.date.utc=1460489393

最后在edify_generator.py中,根据AssertOlderBuild的定义:


def            AssertOlderBuild(           self           , timestamp, timestamp_text):          


                      """Assert that the build on the device is older (or the same as)          


                      the given timestamp."""          


                      self           .script.append(          


                      (           '(!less_than_int(%s, getprop("ro.build.date.utc"))) || '          


                      'abort("Can\'t install this package (%s) over newer '          


                      'build (" + getprop("ro.build.date") + ").");'           )            %            (timestamp,          


                      timestamp_text))


最终会向update-script输出下面这句话:

(!less_than_int(1460489393, getprop("ro.build.date.utc"))) || abort("Can't install this package (Wed Apr 13 03:29:53 CST 2016) over newer build (getprop("ro.build.date")))

标签:zip,script,ota,py,update,build,date,ro
From: https://blog.51cto.com/u_16248677/7384776

相关文章

  • [Javascript] Write Observable
    functionObservable(forEach){this._forEach=forEach;}Observable.prototype={forEach:function(onNext,onError,onCompleted){if(typeofonNext==="function"){returnthis._forEach({onNext,onError:onEr......
  • 无涯教程-JavaScript - DAYS360函数
    描述DAYS360函数返回基于360天的年份(十二个月为30天)的两个日期之间的天数,该天数用于会计计算。语法DAYS360(start_date,end_date,[method])争论Argument描述Required/OptionalStart_dateThetwodatesbetweenwhichyouwanttoknowthenumberofdays.Requir......
  • 无涯教程-JavaScript - DAY函数
    描述DAY函数返回日期的日期,由序列号表示。日期以1到31之间的整数形式给出。语法DAY(serialnumber)争论Argument描述Required/Optionalserialnumber您要查找的日期。应该使用DATE函数或其他公式或函数的输出输入日期。如,在2008年5月的第23天使用DATE(2008,5,23......
  • JavaScript之同站多域名共享Token实现方案
    背景由于公司业务涉及到多个国家,每个国家站的访问的域名不同(指向同一个Web服务)在站内能够切换不同的国家,服务端一个token支持所有国家鉴权此时需要前端将Token等相关信息共享到即将跳转到的新站点,因为不同域,浏览器不会共享Cookie方案将Token相关信息通过URLQuery......
  • JavaScript判断数组是否包含某个值的6种方法
    循环functioncontains(arr,val){for(vari=0;i<arr.length;i++){if(arr[i]===val){returntrue;}}returnfalse;}contains([1,2,3],3);//true使用whilefunctioncontains(arr,val){vari=arr.length;......
  • 原生javascript实现拖拽
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • 无涯教程-JavaScript - DATE函数
    描述DATE函数返回特定日期的序列号。语法DATE(year,month,day)争论Argument描述Required/Optionalyearyear参数的值可以包含1-4位数字。Excel会根据计算机使用的日期系统解释年份参数。默认情况下,MicrosoftExcelforWindows使用1900日期系统。请参阅下面的......
  • 无涯教程-JavaScript - DVARP函数
    描述DVARP函数通过使用列表或数据库中符合您指定条件的记录的字段(列)中的数字,基于整个总体计算总体的方差。语法DVARP(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息......
  • 无涯教程-JavaScript - DVAR函数
    描述DVAR函数使用与指定条件相匹配的列表或数据库的列中的数字,根据样本估算总体的方差。语法DVAR(database,field,criteria)争论Argument描述Required/Optionaldatabase组成列表或数据库的单元格范围。数据库是相关数据的列表,其中相关信息的行是记录,数据的列......
  • 软件测试|快速、可靠的JavaScript依赖管理工具——yarn
    简介Yarn是一个由Facebook于2016年推出的JavaScript软件包管理器。它的目标是解决npm(Node.js的默认软件包管理器)在性能和可靠性方面的一些问题。Yarn旨在提供更快、更安全、更稳定的依赖项安装过程,使JavaScript开发人员能够更轻松地管理和构建项目。本文将详细介绍Yarn的特点、优势......