OTA刷机包制作

整个项目编译完成后再执行make otapackage 
 生成的完整升级包会存放在out\debug\target\product[project name]\  下 
具体名字根据make otapackage的install来确定 
生成的过程文件包在out/target/product/ardbeg/obj/PACKAGING/target_files_intermediates/目录下,该文件可用于创建差分升级包

OTA包解压后META-INF\com\google\android目录下有两个文件 
update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script中描述的操作。该文件在Android源码编译后out/target/product/streambox/system bin/updater生成,可将updater重命名为update-binary得到。 
该文件在具体的更新包中的名字由源码中bootable/recovery/install.c中的宏ASSUMED_UPDATE_BINARY_NAME的值而定。 
updater-script:此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。该文件的命名由源码中bootable/recovery/updater/updater.c文件中的宏SCRIPT_NAME的值而定。 
升级时的进度条,升级哪些文件都是这个脚本里指定的。updater-script是由alps/build/tools/releasetools/edify_generator.py生成的,后续会介绍如何生成updater-script脚本 
updater-script中使用的命令都需要在alps/bootable/recovery/updater/install.c中注册,如下所示:

void RegisterInstallFunctions() {
    RegisterFunction("mount", MountFn);
    RegisterFunction("is_mounted", IsMountedFn);
    RegisterFunction("unmount", UnmountFn);
    RegisterFunction("format", FormatFn);
    RegisterFunction("show_progress", ShowProgressFn);
    RegisterFunction("set_progress", SetProgressFn);
    RegisterFunction("delete", DeleteFn);
    RegisterFunction("delete_recursive", DeleteFn);
    RegisterFunction("package_extract_dir", PackageExtractDirFn);
    RegisterFunction("package_extract_file", PackageExtractFileFn);
    RegisterFunction("symlink", SymlinkFn);

// Maybe, at some future point, we can delete these functions? They have been
    // replaced by perm_set and perm_set_recursive.
    RegisterFunction("set_perm", SetPermFn);
    RegisterFunction("set_perm_recursive", SetPermFn);

// Usage:
    //   set_metadata("filename", "key1", "value1", "key2", "value2", ...)
    // Example:
    //   set_metadata("/system/bin/netcfg", "uid", 0, "gid", 3003, "mode", 02750, "selabel", "u:object_r:system_file:s0", "capabilities", 0x0);
    RegisterFunction("set_metadata", SetMetadataFn);

// Usage:
    //   set_metadata_recursive("dirname", "key1", "value1", "key2", "value2", ...)
    // Example:
    //   set_metadata_recursive("/system", "uid", 0, "gid", 0, "fmode", 0644, "dmode", 0755, "selabel", "u:object_r:system_file:s0", "capabilities", 0x0);
    RegisterFunction("set_metadata_recursive", SetMetadataFn);

RegisterFunction("getprop", GetPropFn);
    RegisterFunction("file_getprop", FileGetPropFn);
    RegisterFunction("write_raw_image", WriteRawImageFn);

RegisterFunction("apply_patch", ApplyPatchFn);
    RegisterFunction("apply_patch_check", ApplyPatchCheckFn);
    RegisterFunction("apply_patch_space", ApplyPatchSpaceFn);

RegisterFunction("read_file", ReadFileFn);
    RegisterFunction("sha1_check", Sha1CheckFn);
    RegisterFunction("rename", RenameFn);

RegisterFunction("wipe_cache", WipeCacheFn);

#if 1 //wschen 2012-07-25
    RegisterFunction("special_factory_reset", SpecialFactoryResetFn);
#endif

RegisterFunction("ui_print", UIPrintFn);

RegisterFunction("run_program", RunProgramFn);

#ifdef MTK_SYS_FW_UPGRADE
    RegisterFunction("retouch_binaries_ext", RetouchBinariesFnExt);
    RegisterFunction("undo_retouch_binaries_ext", UndoRetouchBinariesFnExt);
    RegisterFunction("apply_data_app", ApplyDataAppsFn);
#endif
}

注册后的命令才能在升级脚本中直接使用。

差分升级包制作

针对MTK平台,其他平台也应该类似 
对于采用差分包进行升级,步骤如下:  
 -  ./mk [project] new— 工程的版本是 V2  
 - ./mk [project] otapackage  — 工程的版本是 V2  
 - 将v2版本download到对应的手机上  
 - 拷贝out/target/product/{project}/obj/packaging/ckt75_cu_gb2- 
target_files-eng.ckt.zip到根目录下,  
   并改名为 v2_org  —–工程的版本是 V2 
 -  ./mk [project] new — 工程的版本是 V3  
 - ./mk [project] otapackage  — 工程的版本是 V3  
 - 拷贝out/target/product/{project}/obj/packaging/ckt75_cu_gb2- 
target_files-eng.ckt.zip到根目录下,  
   并改名为 v3_org  —–工程的版本是 V3  
 - ./build/tools/releasetools/ota_from_target_files  -i v2_org.zip 
v3_org.zip v2_3.zip—在alps 目录下执行此命令 
 - copy 差分包v2_3.zip到SDcard,手动开机到recovery mode,进行升级。  
 差分包升级时签章问题 
download版本的key与制作差分包时使用的key不一致的话,会导致在recovery mode升级时验证 
通不过。 
解决:先确定在ProjectConfig.mk文件中的宏:MTK_SIGNATURE_CUSTOMIZATION设置, 
如果设置为yes, 客户需要自己去gen releasekey,生成key的文档参考DMS如下路径的资料: 
/Product Line/WCX/3G Phone Data/Smart Phone/Software_Customer/Standard Package/MT6575 
SW Doc Package/Build/V2.3 /Application Signing Process Enhancement.ppt , 
产生releasekey之后(releasekey在:alps/build/target/product/security/project下), 
Build第一个版本,build A new, build A otapackage, 将A版download到手机上,再build第二版 
,build B new, build Botapackage。最后用命令 
./build/tools/releasetools/ota_from_target_files –k 
alps/build/target/product/security/project/release –n –i oldotapackage.zip 
newotapackage.zip update.zip. 
如果宏MTK_SIGNATURE_CUSTOMIZATION设置为no,则不需要产生key,使用默认的 
alps/build/target/product/security下的testkey。这时在build 完A、B两个版本后直接用命令: 
./build/tools/releasetools/ota_from_target_files –n –i oldotapackage.zip 
newotapackage.zip update.zip.来制作差分包

安卓OTA升级文件的制作相关推荐

  1. CSR8670 /CSR8675 升级文件DFU制作

    本文主要讲解在ADK_CSR867x.WIN4.4.0.17下, 验证CSR8670 sink程序的HID DFU功能, 用的工具为ADK_CSR867x.WIN.4.4.0.17\tools\bin ...

  2. 安卓OTA升级系统解析上

    在MTK安卓环境中只需要在alps 目录执行./mk otapackage即可打包ota升级包,下面我们来分析下这个过程中.  alps/mk代码片段 sub chkDep {   my $modul ...

  3. Android-AB系统OTA升级介绍

    什么是OTA升级? OTA是Over-the-Air的简称,OTA升级可以理解为用户正常使用过程中进行升级,OTA 升级旨在升级基础操作系统.系统分区上安装的只读应用和/或时区规则. 什么是Andro ...

  4. CSR8670学习笔记:OTA升级固件

    为了方便大家学习,现与我爱蓝牙网联合推出[QCC300x/CSR867x/QCC30xx/QCC51xx开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单 ...

  5. EFR32MG21 zigbee 3.0 OTA 升级实验

    EFR32MG21 zigbee 3.0 OTA 升级实验 参考文档:AN728 https://www.sekorm.com/doc/1607600.html 芯片:EFR32MG21A010F76 ...

  6. linux差分包升级流程,OTA 差分升级包的制作

    OTA 升级是 Android 系统提供的标准软件升级方式. 它功能强大,提供了完全升级.增量升级模式,可以通过 SD卡升级,也可以通过网络升级. 那如何生成差分升级包呢? Android源码的根目录 ...

  7. AT32F437制作Bootloader然后实现Http OTA升级

    首先创建一个AT32F437的工程,然后发现调试工程配置这里的型号和创建工程选的型号不一致,手动更改一下,使用PW Link下载程序的话还要配置一下pyocd.exe的路径. 打开drv_clk.c文 ...

  8. 小米4刷android wear,小米手表第四次OTA升级:最强安卓手表迎来全新功能+百款表盘...

    [dogkeji-科技犬] 作为小米首款智能手表产品--小米手表自去年双十一发布即成为史上最畅销的Wear OS手表,仅去年双十一单日销售额破亿,有业内人士表示小米手表一天的销量是过去所有安卓手表一年 ...

  9. Android 7.0 OTA升级(高通)

    文章目录 1. Full OTA 方式升级介绍 1.1 Full OTA 制作第一步:生成 msm89xx-target_files-eng.XXX.zip 1.2 Full OTA 制作第二步:Mo ...

最新文章

  1. 使用DocFX生成文档
  2. C++匿名管道详解及简单案例(基于VS2013)
  3. mysql 数据库的维护,优化
  4. find border vertex
  5. Giter8 -- 把项目布局模板放到 GitHub 上
  6. egg(18)--Mongodb4.x介绍以及Mongodb账户权限配置
  7. Windows客户端开发--URLDownloadToFile下载文件进度条
  8. Ajax:拥抱JSON,让XML走开
  9. 论CTOR添加到11月BCH协议升级
  10. 私房小菜菜谱和煲汤大全汇总
  11. Linux应急响应之挖矿篇
  12. 【STM32】SPI协议通信详解
  13. 小程序实现扫码识别二维码内容
  14. nacos server 安装报错 macOS 10.12.6
  15. serverStatus详解
  16. 记录一次 用服务器下载文件,并上传到百度网盘的实践
  17. 3-感知机的局限性与多层感知机
  18. 暑假小学期安卓开发笔记1——设计思路
  19. Machine Learning for Malware Detection
  20. 【题解】简单的数学题-题解

热门文章

  1. [BJDCTF 2nd]fake google -wp
  2. 《蹭课神器》Beta版使用说明
  3. Lucene根据字段进行自定义搜索扩展
  4. 微信公众号最佳实践 ( 3.2) 被动回复用户消息
  5. vue指令-v-for
  6. Game boy模拟器(5):集成
  7. 深入分析JavaWeb 44 -- Struts2开发核心之动作类Action
  8. 随机森林预测财务报表是否舞弊
  9. php file取不到手机相册,php file_get_contents 读取不了图片
  10. idea里注释日期怎么_IntelliJ IDEA自动注释作者信息和日期时间