简单介绍刷机脚本

  • 格式:doc
  • 大小:630.00 KB
  • 文档页数:9

本楼为大家简单介绍一下刷机脚本的语法以及语句作用大家想要实例的话可以到我这个帖子里面下载并打开里面的刷机脚本来看一下/thread-3587271-1-1.html先来说说刷机脚本所在路径,这个大家应该都知道的了:1META-INF\com\google\android\updater-script复制代码然后我们再了解一下刷机流程:2开始.3清理userdata, system, cache, dalvik-cache等(这是一个可选的步骤, 由ROM作者依据ROM 的特性去决定是否要采用,例如MiniCM7就是会自动清除的)4挂载userdata, system, sdext (其中sdext为可选挂载, 依据ROM特性决定)5释放对应的文件/文件夹到对应的区域, 例如刷机包内的目录data对应的释放到手机的userdata 区域6Symlink, 这个是必须的动作, 这个有问题, 会导致ROM出现一些问题, 特别是错误的链接或者不存在的链接,很容易引发问题.7设置权限, 这一个步骤也很重要, 关系到ROM能否正常使用, Android是基于在linux基础上的, 对于文件的权限非常重要, 没有权限, 一个应用程序是无法被执行或者读写的复制代码下面用MiniCM7的刷机脚本举例解说一下这些步骤:8ui_print("-> Wiping /system");9format("yaffs2", "MTD", "system");10mount("yaffs2", "MTD", "system", "/system");复制代码1.ui_print: 就是在recovery下打印文字给用户阅览.ui_print("-> Wiping /system");就是在屏幕上打印一句-> Wiping /system2.format语法:format <root><root>表示要格式化的分区作用:格式化一个分区例如format("yaffs2", "MTD", "system");3.mount:挂载相关的区域我们可以看到上面的语句是先格式化system这个区域再挂载system,这样可以避免出现意外问题。

11ui_print("-> Wiping /sd-ext/dalvik-cache");12run_program("/sbin/busybox", "mount", "-t", "auto", "/dev/block/mmcblk0p2", "/sd-ext");13delete_recursive("/sd-ext/dalvik-cache");14ui_print("-> Copying /system");15package_extract_dir("system", "/system");复制代码4.run_program语法:run_program <program-file> [<args> ...]<program-file>表示要运行的程序,[<args> ...]表示运行程序所加的参数作用:运行终端程序run_program("/sbin/busybox", "mount", "-t", "auto","/dev/block/mmcblk0p2", "/sd-ext");就是在终端程序中执行挂载"/dev/block/mmcblk0p2"这个分区5.delete_recursive语法:delete_recursive <file-or-dir1> [... <file-or-dirN>]<file-or-dir1> [... <file-or-dirN>]表示要删除的文件或文件夹,可以使多个,中间用空格隔开作用:删除文件或者目录,删除目录时会将目录中的所有内容全部删除挂在这个分区后我们就可以操作这个分区了,delete_recursive("/sd-ext/dalvik-cache");删除“/sd-ext/dalvik-cache”这个文件夹delete语法:delete <file1> [... <fileN>]<file1> [... <fileN>]表示要格式化的文件,可以是多个文件用空格隔开作用:删除文件1,2到n6.package_extract_dir语法:package_extract_dir(file/dir,file/dir)作用:提取包中文件/路径package_extract_dir("system", "/system");就是把升级包中的“system”提取到手机的“system”目录16symlink("busybox", "/system/xbin/cp");17set_perm_recursive(0, 0, 0755, 0644, "/system");18set_perm(0, 0, 0755, "/system/etc/init.d");19unmount("/data");20unmount("/system");复制代码7.symlink语法:symlink <link-target> <link-path><link-target>表示链接到的目标,<link-path>表示快捷方式的路径作用:相当于linux中的ln命令,将<link-target>在<link-path>处创建一个软链接,<link-target>的格式应为绝对路径(或许相对路径也可以),<link-path>为“根目录:路径”的形式symlink("busybox", "/system/xbin/cp");就是表示在"/system/xbin/cp"这里创建一个快捷方式链接到"busybox"8.set_perm_recursive语法:set_perm_recursive <uid> <gid> <dir-mode><file-mode> <path> [... <pathN>]<uid>表示用户,<gid>表示用户组,<dir-mode>表示文件夹的权限,<file-mode>表示文件的权限,<path> [... <pathN>]表示文件夹的路径,可以多个,用空格分开作用:设置文件夹及文件夹中的文件的所有者和用户组set_perm_recursive(0, 0, 0755, 0644, "/system");这里表示<uid>&<gid>这两个权限没有设置,而“system”这整个文件夹的权限为“755”,而system里面的文件权限为“644”这里我为大家解释一下这些数字的意思:r--w--x 分别对应4--2--1 R读权限--w写权限--x执行权限5=4+1,也就是代表R+X,6=4+2代表R+W,7=4+2+1代表R+W+X。

所以一般系统文件常见的权限是644。

为了帮助大家理解我现在贴上几张图来举例:644权限:也就是rw-r-r(可读+可写--可读--可读)755权限:也就是rwx-rx-rx(可读+可写+可执行--可读+可执行--可读+可执行)777权限,就是全打勾的状态:9.set_perm语法:set_perm <uid> <gid> <mode> <path> [...<pathN>]<uid>表示用户名称,<gid>表示用户组名称,<mode>,表示权限模式,<path> [... <pathN>]表示文件路径,可以使多个,用空格隔开作用:设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一样,只是集中在了一个命令当中set_perm(0, 0, 0755, "/system/etc/init.d");就表示把/system/etc/下的init.d这个文件的权限设置为“755”10.unmount:取消挂载相关的区域,就是和mount相反的unmount("/system");取消挂在系统理论知识说到这里,现在拿我之前写的脚本来给大家分析一下,具体见此帖:(/thread-3587271-1-1.html)就拿3D加速补丁这个补丁里面的脚本来分析先来看这个补丁有什么东西:大家可以看到这个补丁中有META-INF system 还有一个名为edit_build.sh的脚本,这个shell脚本的作用是在build.prop中加入指定代码看到刷机脚本的内容:先把主要实现代码贴上:21ui_print("Mounting system partition");22run_program("/sbin/busybox", "mount", "/system");23delete(system/lib/egl/libGLES_android.so);24package_extract_dir("system", "/system");25ui_print("Modifying build.prop tweaks...");26package_extract_file("edit_build.sh", "/tmp/edit_build.sh");27set_perm(0, 0, 0777, "/tmp/edit_build.sh");ui_print("");28run_program("/tmp/edit_build.sh");29ui_print("Done, unmounting system partition");30run_program("/sbin/busybox", "umount", "/system");复制代码1.run_program("/sbin/busybox", "mount", "/system");挂载"system"这个分区2.delete(system/lib/egl/libGLES_android.so);删除system/lib/egl/libGLES_android.so这个文件3.package_extract_file("edit_build.sh", "/tmp/edit_build.sh");把edit_build.sh提取到临时文件夹/tmp下4.set_perm(0, 0, 0777, "/tmp/edit_build.sh");把edit_build.sh的权限设置为“777”5.run_program("/tmp/edit_build.sh");等效于在终端下执行edit_build.sh这个shell脚本文件,所以这样就能把脚本中写到的内容加入build.prop6.run_program("/sbin/busybox", "umount", "/system");取消挂在系统分区shell脚本的编写我就不说了,这是linux里面的知识,有兴趣的可以自学linux这是我在linux-ubuntu下打开shell脚本的效果:。