




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android ROM 刷机脚本 updater-script 的基本流程和初级语句说明(转)简单说说刷机脚本的相关知识, 以及简单的语句说明.目的不是让你通过本帖学会如何做刷机脚本,那不是一下子可以做到的事情.但是至少可以通过本帖子,让你对刷机脚本有一个初步的了解, 并且可以初步动手修改相对简单的内容, 例如制作升级包.以下说明,都以我的Reflex S Data2Ext 2.0.2c 整包ROM为例子说明, 把update的过程流程化, 更加有助于理解.首先说明刷机脚本的路径, 其实很多人,包括部分ROM作者, 都不知道这个文件的存在.位于刷机包的如下路径:1. META-INFcomgoogleandroidupdater-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.img8. 取消挂载的各个分区, 刷机结束.复制代码大概步骤就这样, 这个过程非常明了和直接, 下面我具体举例说明各个步骤的做法.1. 开始准备刷机.开始最简单, 实际上就是就是检测硬件, 打印相关信息,提示开始刷机.其中可能用到的部分函数做个简单介绍:ui_print: 就是在recovery下打印文字给用户阅览.getprop: 获取手机对应的属性assert: 你可以理解为辅助执行多行脚本命令例如如下我的部分开始代码:1. ui_print(” “);2. assert(getprop(“duct.device”) = “bravo” | getprop(“duct”) = “bravo” | getprop(“duct.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: 你可以理解为复制刷机包内的指定目录到手机的指定区域.1. ui_print(” Unpacking DATA files”);2. unmount(“/data”);3. format(“MTD”, “userdata”);4. mount(“MTD”, “userdata”, “/data”);5. package_extract_dir(“data”, “/data”);6. ui_print(” Unpacking SYSTEM files”);7. unmount(“/system”);8. format(“MTD”, “system”);9. mount(“MTD”, “system”, “/system”);10. package_extract_dir(“system”, “/system”);复制代码为了避免出问题,首先取消挂载, 然后格式化该区域, 然后再挂载,确保挂载没有问题.然后复制需要的文件.5和6相比前面的一些内容,属于比较难懂一点的,需要有linux相关的知识, 不再更多阐述, 贴些代码,简单说下.其中可能用上的部分函数介绍:symlink: 所谓的符号链接, 当然, windows的用户不怎么容易了解, 建议多熟悉下Linux相关内容.set_perm_recursive: 你可以理解为设置目录权限如下代码, 连接./xbin/su到/system/bin/su这个程序.1. ui_print(” Symlinking now”);2. symlink(“./xbin/su”, “/system/bin/su”);复制代码如下代码,设置相关的权限.1. ui_print(” Setup permissions now”);2. set_perm_recursive(0, 0, 0755, 0644, “/system”);3. set_perm_recursive(0, 2000, 0755, 0755, “/system/bin”);4. set_perm_recursive(0, 2000, 0755, 0755, “/system/app”);复制代码至于刷入内核引导文件boot.img,如下, 用assert函数实现了, 解压内核到临时区域, 写入内核文件, 删除临时文件的过程.1. ui_print(” Writing Boot.img”);2. assert(package_extract_file(“boot.img”, “/tmp/boot.img”), write_raw_image(“/tmp/boot.img”, “boot”), delete(“/tmp/boot.img”);复制代码最后,结束, 取消挂载所有区域, 提示结束.如下代码:1. ui_print(” “);2. ui_print(” Flash finishedEnjoy it!”);3. unmount(“/system”);4. unmount(“/data”);复制代码可能大家看了还是模模糊糊的, 没关系, 没有相关的知识, 确实不容易一下子看明白, 但是饭一口口吃, 知识也是一点点懂的, 抛砖引玉,希望给与大家一点点帮助1. META-INFcomgoogleandroidupdater-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.img8. 取消挂载的各个分区, 刷机结束.复制代码大概步骤就这样, 这个过程非常明了和直接, 下面我具体举例说明各个步骤的做法.1. 开始准备刷机.开始最简单, 实际上就是就是检测硬件, 打印相关信息,提示开始刷机.其中可能用到的部分函数做个简单介绍:ui_print: 就是在recovery下打印文字给用户阅览.getprop: 获取手机对应的属性assert: 你可以理解为辅助执行多行脚本命令例如如下我的部分开始代码:1. ui_print(” “);2. assert(getprop(“duct.device”) = “bravo” | getprop(“duct”) = “bravo” | getprop(“duct.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: 你可以理解为复制刷机包内的指定目录到手机的指定区域.1. ui_print(” Unpacking DATA files”);2. unmount(“/data”);3. format(“MTD”, “userdata”);4. mount(“MTD”, “userdata”, “/data”);5. package_extract_dir(“data”, “/data”);6. ui_print(” Unpacking SYSTEM files”);7. unmount(“/system”);8. format(“MTD”, “system”);9. mount(“MTD”, “system”, “/system”);10. package_extract_dir(“system”, “/system”);复制代码为了避免出问题,首先取消挂载, 然后格式化该区域, 然后再挂载,确保挂载没有问题.然后复制需要的文件.5和6相比前面的一些内容,属于比较难懂一点的,需要有linux相关的知识, 不再更多阐述, 贴些代码,简单说下.其中可能用上的部分函数介绍:symlink: 所谓的符号链接, 当然, windows的用户不怎么容易了解, 建议多熟悉下Linux相关内容.set_perm_recursive: 你可以理解为设置目录权限如下代码, 连接./xbin/su到/system/bin/su这个程序.1. ui_print(” Symlinking now”);2. symlink(“./xbin/su”, “/system/bin/su”);复制代码如下代码,设置相关的权限.1. u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辞职申请书范文集及写作模板指导
- 医院栏目的患者满意度调查与改进方案
- 杭州师范大学《软件实践》2024-2025学年第一学期期末试卷
- 湖南信息学院《区间信号及列车运行控制技术》2024-2025学年第一学期期末试卷
- 西南大学《肉制品工艺学》2024-2025学年第一学期期末试卷
- 南开大学《快速构思强化设计》2024-2025学年第一学期期末试卷
- 大庆师范学院《节事活动策划与管理》2024-2025学年第一学期期末试卷
- 太原科技大学《信息安全与技术》2024-2025学年第一学期期末试卷
- CMA内部控制制度制定与执行指导
- 图形变换原理课件
- 2025年医疗器械生产企业员工培训试题(附答案)
- 2025年中药调剂师试卷及答案
- 破局向新 持续向上-2025年人力资源发展趋势报告-智联招聘北大国发院
- 2025年公平竞争审查知识竞赛考试练习题库(正式版)含答案
- 自适应加密动态调整-洞察及研究
- 2025年北京市房屋租赁合同范本(个人版)
- 手术室护理个案分析
- DB4451T 4-2023 潮州工夫茶艺技术规程
- 运管助理面试题及答案
- 2025至2030年中国手机电池块市场分析及竞争策略研究报告
- KYT考试题及答案
评论
0/150
提交评论