Android ROM 刷机脚本 updater-script 的基(转载)

3个月前 (11-29 20:35)阅读3回复0
wly
wly
  • 管理员
  • 注册排名8
  • 经验值135035
  • 级别管理员
  • 主题27007
  • 回复0
楼主

  本文只要部门内容,请到一牛网阅读全文:

  

  简单说说刷机脚本的相关常识, 以及简单的语句阐明.

  目标不是让你通过本帖学会若何做刷机脚本,那不是一会儿能够做到的工作.

  但是至少能够通过本帖子,让你对刷机脚本有一个初步的领会, 而且能够初步脱手修改相对简单的内容, 例如造造晋级包.

  以下阐明,都以我的Reflex S Data2Ext 2.0.2c 整包ROM为例子阐明, 把update的过程流程化, 愈加有助于理解.

  起首阐明刷机脚本的途径, 其实良多人,包罗部门ROM做者, 都不晓得那个文件的存在.位于刷机包的如下途径:

  1. META-INF\com\google\android\updater-script

  复造代码

  刷机过程其实很简单, 只要你理解了流程, 和相关的语句.

  一般来说, 刷机就是如下的步调:

  1. 起头.

  2. 清理userdata, system, cache, dalvik-cache等 (那是一个可选的步调, 由ROM做者根据ROM的特征往决定能否要摘用)

  3. 挂载userdata, system, sdext (此中sdext为可选挂载, 根据ROM特征决定)

  4. 释放对应的文件/文件夹到对应的区域, 例如刷机包内的目次data对应的释放到手机的userdata区域

  5. Symlink, 那个是必需的动做, 那个有问题, 会招致ROM呈现一些问题, 特殊是错误的链接或者不存在的链接,很随便引提问题.

  6. 设置权限, 那一个步调也很重要, 关系到ROM能否一般利用, Android是base在linux根底上的, 关于文件的权限十分重要, 没有权限, 一个利用法式是无法被施行或者读写的.

  7. 刷进内核引导文件boot.img

  8. 取缔挂载的各个分区, 刷机完毕.

  复造代码

  可能步调就如许, 那个过程十分了然和间接, 下面我详细举例阐明各个步调的做法.

  1. 起头筹办刷机.

  起头最简单, 现实上就是就是检测硬件, 打印相关信息,提醒起头刷机.

  此中可能用到的部门函数做个简单介绍:

  ui_print: 就是在recovery下打印文字给用户阅览.

  getprop: 获取手机对应的属性

  assert: 你能够理解为辅助施行多行脚本号令

  例如如下我的部门起头代码:

  1. ui_print(” “);

  2. assert(getprop(“ro.product.device”) == “bravo” || getprop(“ro.build.product”) == “bravo” || getprop(“ro.product.board”)

  3. == “bravo”);

  4. ui_print(“. Reflex S Data2Ext Installation .”);

  5. ui_print(” “);

  6. ui_print(“Installing Gingerbread 2.3.3 – Sense 2.1…”);

  7. ui_print(” “);

  复造代码

  起首起头容许一行空行,编译和之前的文字区别开来.

  然后用assert完成敌手机的产物设备型号的检测

  最初打印, 起头安拆该ROM.

  2. 清理

  那个过程是可选的,有的rom不需要wipe间接晋级,就无需那个过程,有的ROM必需完全wipe才能够刷机,不然会出问题,那么rom做者为了担忧

  你因为没有wipe而招致出了问题, 就在脚本里面处置了,尽量搀扶帮助你制止产生问题.

  例如我那个data2ext的ROM, 假设不wipe, 会产生一些问题, 例如FC, UID错误等, 就必需wipe, 但是为了不让用户的懒散成为找我问问题的费事,我就主动帮他们”wipe”了所有必需wipe的内容.

  此中可能用到的部门函数做个简单介绍:

  fromat: 格局化相关区域的函数

  delete_recursive: 能够间接删除一个目次.

  如下我的部门代码摘抄如下:

  1. ui_print(” Clean up cache…”);

  2. format(“MTD”, “cache”);

  3. delete_recursive(“/data/dalvik-cache”);

  4. delete_recursive(“/sdext/dalvik-cache”);

  复造代码

  起首打印我要起头清理cache了

  然后格局化cache, 删除userdata下的dalvik-cache, 删除sd卡ext分区的dalvik-cache.

  其实我那里代码仍是有一些问题的,可能sdext都还没有挂载我就筹算删除了.那个就属于脚本的隐患bug了.

  3挂载和4释放文件, 我是根据区域来组合做的, 如下别离是userdata的处置和system的处置.

  此中可能用到的部门函数做个简单介绍:

  umount/mount: 别离是取缔挂载和挂载相关的区域函数.

  package_extract_dir: 你能够理解为复造刷机包内的指定目次到手机的指定区域.

  本文只要部门内容,请到一牛网阅读全文:

  

0
回帖

Android ROM 刷机脚本 updater-script 的基(转载) 期待您的回复!

取消