Android ROM 刷机脚本 updater-script 的基(转载)
本文只要部门内容,请到一牛网阅读全文:
简单说说刷机脚本的相关常识, 以及简单的语句阐明.
目标不是让你通过本帖学会若何做刷机脚本,那不是一会儿能够做到的工作.
但是至少能够通过本帖子,让你对刷机脚本有一个初步的领会, 而且能够初步脱手修改相对简单的内容, 例如造造晋级包.
以下阐明,都以我的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: 你能够理解为复造刷机包内的指定目次到手机的指定区域.
本文只要部门内容,请到一牛网阅读全文: