首页 > 其他分享 >Android OTA升级之升级包生成脚本ota_from_target_files

Android OTA升级之升级包生成脚本ota_from_target_files

时间:2023-09-06 14:03:07浏览次数:34  
标签:info target zip script OTA 升级包 dict device OPTIONS


我们在这里主要分析OTA 升级过程中对ota_from_target_files.py脚本的调用,这个脚本主的作用是生成各种OTA完整包和增量包。

 

以生成完整OTA包为例,假设我们的命令为:./build/tools/releasetools/ota_from_target_files -n  input_file_dir/target_file.zip  output_file_dir/output.zip 

从main函数开始,

将用户设定的option选项存入OPTIONS变量中,然后再判断有没有额外的脚本,如果有就读入到OPTIONS变量中。

2 解压缩输入的zip包,即/target_files.zip ,然后判断OPTIONS变量中的device_specific是否为空,如果为空就从解压的META/releasetools.py读入到device_specific中。

3 判断是否签名,然后判断是否有新内容的增量源,有的话就解压该增量源包放入一个临时变量source_zip。

4 调用WriteFullOTAPackage函数,获得metadata元数据,读取解压的临时文件中的几个重要的配置文件,如META/misc_info.txt,SYSTEM/build.prop等。

生成升级用的脚本文件updater-script,将上一步获得的metadata元数据写入到输出包output.zip


WriteFullOTAPackage函数的具体分析: 


1 首先,我们获得脚本生成器,


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


2  获得一些环境变量


metadata            =            {          


                      "post-build"           : CalculateFingerprint(oem_props, oem_dict,            


                      OPTIONS.info_dict),          


                      "pre-device"           : GetOemProperty(           "ro.product.device"           , oem_props, oem_dict,          


                      OPTIONS.info_dict),          


                      "post-timestamp"           : GetBuildProp(           "ro.build.date.utc"           , OPTIONS.info_dict),          


           }


Assert语句,检测目标设备的 ro.product.device 是否跟update.zip中的相同


AppendAssertions(script, input_zip)


4 这是一个comm.py中定义的回调函数,用于调用设备相关代码


device_specific.FullOTA_Assertions()

5 在升级脚本中加入显示进度的语句


script.ShowProgress(           0.5           ,            0           ) 


因为在edify_gnerator.py中有


def            ShowProgress(           self           , frac, dur):          


                      """Update the progress bar, advancing it over 'frac' over the next          


                      'dur' seconds. 'dur' may be zero to advance it via SetProgress          


                      commands instead of by time."""          


                      self           .script.append(           "show_progress(%f, %d);"            %            (frac,            int           (dur)))


 如果需要,在脚本中增加语句,擦除 userdata 分区等。


if            OPTIONS.wipe_user_data:          


                      script.FormatPartition(           "userdata"           )


 

标签:info,target,zip,script,OTA,升级包,dict,device,OPTIONS
From: https://blog.51cto.com/u_16248677/7386467

相关文章

  • Android官方资料--OTA Package Tools
    OTAPackageToolsINTHISDOCUMENTFullupdatesIncrementalupdatesUpdatepackagesThe ota_from_target_files toolprovidedinbuild/tools/releasetools canbuildtwotypesofpackage: full andincremental.Thetooltakesthe target-files .zipfileproduc......
  • ota升级包编译过程中firmware如何添加进来
    整个分析过程中,机型名以xxxx为例主要可分为一firmware如何添加进target-files.zip二编译ota升级包时如何从target-files.zip取出firmware并添加到ota升级包三如何向升级脚本updater-script中加入控制firmware升级的语句四增量升级包相比全量包不同的步骤五结论及修复方......
  • TARGET_DEVICE_DIR取值过程分析
    xxx(机型名)为例在build/core/main.mk中,会包含build/core/config.mk,在config.mk中,会包含build/core/envsetup.mk,在envsetup.mk中有:#ReadtheproductspecssowecangetTARGET_DEVICEandother#variablesthatweneedinordertolocatetheoutp......
  • Android官方资料--Reducing OTA Size
    ReducingOTASizeINTHISDOCUMENTThebuilddifftoolChangestoreduceOTAsizeFileOrderBuildDirectoryTimestampsVersionStringsConsistentbuildtoolsAcommonproblemwithAndroidover-the-airupdates(OTAs)isthattheycontainchangedfilesthatdo......
  • Android官方资料--Block-Based OTAs
    Block-BasedOTAsINTHISDOCUMENTRecommendationsFilevs.BlockOTAsUpdatingunmodifiedsystemsUpdatingmodifiedsystemsYoucanenableblock-basedover-the-air(OTA)updatesfornewdevicesrunningAndroid5.0.OTAisthemechanismbywhichOEMsremote......
  • 输出编译ota升级包时的打包参数
    build / tools/releasetools/common.pydefParseOptions(argv,docstring,extra_opts="",extra_long_opts=(),extra_option_handler=None):"""Parsetheoptionsinargvandreturn......
  • ota升级包中update-script脚本的生成
    控制升级流程的主要逻辑,实际控制着升级过程中大部分重要操作的实施细节,而处于升级包中同目录下的update-bianry负责真正执行update-script记录的操作。 在负责生成升级包的脚本ota_from_target_files.py中,不论我们调用这个脚本来产生全量包,增量包,或者是安卓新加入的block方式的......
  • 20230529 java.lang.reflect.AnnotatedElement
    介绍java.lang.reflect.AnnotatedElementpublicinterfaceAnnotatedElementAPIisAnnotationPresentgetAnnotationgetAnnotationsgetAnnotationsByTypegetDeclaredAnnotationgetDeclaredAnnotationsByTypegetDeclaredAnnotations......
  • Linux日志管理经验总结(crontab+logrotate)
    Linux系统-部署-运维系列导航 日志管理目标日志的管理,一般包括两大部分日志内容,合理的日志内容(日志锚点,内容格式,等)可以为应用服务的执行记录、问题排查提供最有力的帮助日志存档规则,包括日志分割方式(按日期、按文件大小,等),日志存档数量,如只保存最近一个月,等对于自行开发的......
  • idea启动项目报错Error:(5, 52) java: 程序包org.springframework.beans.factory.anno
    idea启动项目报错Error:(5,52)java:程序包org.springframework.beans.factory.annotation不存在IDEA启动项目报错ERROR:(5,52)JAVA:程序包ORG.SPRINGFRAMEWORK.BEANS.FACTORY.ANNOTATION不存在去IDEA下查找maven选项:如果还不行,则继续选择下面的runner,勾选deleteIDEbuild......