文档库 最新最全的文档下载
当前位置:文档库 › 教你如何提取官方OTA制作ROOT包

教你如何提取官方OTA制作ROOT包

教你如何提取官方OTA制作ROOT包
教你如何提取官方OTA制作ROOT包

一、关于OTA包的提取

其实这个问题很好搞定,还是详细给出。。。

首先你需要一个有ROOT权限的文件管理器,R.E.或者ES什么的

然后使用安卓系统的系统更新,下载更新包文件,等下载完成后不要选择更新,选稍后提醒。

用文件管理器打开至根目录,就是下图所示,那个cache文件内就放着下好的zip包,这是官方的OTA升级包。

将它复制出来,先复制到SD卡上,再传输到电脑。

这个弄好了就开始对OTA升级包的ROOT添加操作了。

二、ROOT相关工具添加

这个部分网上也有相关的教程,我也是四处看来的~~~嘿嘿~~~

主要是两个工具的添加:

一个是Superuser.apk和它的su文件,

另一个就是busybox(主要是提供扩展指令作用,部分软件会用到,比如:钛备份)

网上可以搜到,不想自己找的,可以下我打包的附件,里面都有。

安放位置:

将APK文件放入压缩包内的"\SYSTEM\APP"文件夹下,su文件放入"\SYSTEM\BIN" 文件夹下。

(若不安装Busybox,则不需要放入Busybox.apk,并跳过下图,直接进入第三步)

另:这里同样可以对OTA包进行精简操作~~~删除一些不需要的自带软件。当然,完全可以在刷机后,使用金山、360等手机软件管理功能的软件自行卸载处理,有ROOT权限一切都好办~~~

分别在"\SYSTEM\XBIN"放入busybox和zip包根目录下installbusybox文件。

三、对updater-script文件修改(关键部分)

这个是刷机包修改的关键部分,需要十分小心和谨慎,防止出现意外,导致刷机失败。

文件位置:

上图为例:

systemupdate.zip\META-INF\com\google\android目录下

将updater-script文件解压出来,用记事本打开,有如下(以官方4.1.1OTA包为例,其他类似):

assert(getprop("ro.product.device") == "A2109A" ||

getprop("ro.product.board") == "cl2n");

show_progress(1.000000, 180);

set_progress(0.500000);

format("ext4", "EMMC", "/dev/block/platform/sdhci-tegra.3/by-name/APP", "0", "/system"); mount("ext4", "EMMC", "/dev/block/platform/sdhci-tegra.3/by-name/APP", "/system"); package_extract_dir("recovery", "/system");

package_extract_dir("system", "/system");

symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf"); symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");

symlink("mksh", "/system/bin/sh");

symlink("toolbox", "/system/bin/cat", "/system/bin/chmod", "/system/bin/chown", "/system/bin/cmp", "/system/bin/date",

"/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",

"/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd", "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",

"/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",

"/system/bin/kill", "/system/bin/ln", "/system/bin/log",

"/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",

"/system/bin/md5", "/system/bin/mkdir", "/system/bin/mount",

"/system/bin/mv", "/system/bin/nandread", "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",

"/system/bin/ps", "/system/bin/reboot", "/system/bin/renice",

"/system/bin/rm", "/system/bin/rmdir", "/system/bin/rmmod",

"/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent",

"/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",

"/system/bin/smd", "/system/bin/start", "/system/bin/stop",

"/system/bin/sync", "/system/bin/top", "/system/bin/touch",

"/system/bin/umount", "/system/bin/uptime", "/system/bin/vmstat",

"/system/bin/watchprops",

"/system/bin/wipe");

set_progress(0.650000);

set_perm_recursive(0, 0, 0755, 0644, "/system");

set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");

set_perm(0, 3003, 02750, "/system/bin/netcfg");

set_perm(0, 3004, 02755, "/system/bin/ping");

set_perm(0, 2000, 06750, "/system/bin/run-as");

set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth"); set_perm(0, 0, 0755, "/system/etc/bluetooth");

set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");

set_perm(0, 0, 0644, "/system/etc/bluetooth/bdaddr");

set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf"); set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");

set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks"); set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");

set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");

set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");

set_perm(0, 2000, 0755, "/system/vendor");

set_perm(0, 2000, 0755, "/system/vendor/firmware");

set_perm(0, 2000, 0755, "/system/vendor/firmware/bcm4330");

set_perm(0, 2000, 0755, "/system/vendor/lib");

set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor/lib/drm"); set_perm(0, 0, 0644, "/system/vendor/lib/drm/libdrmwvmplugin.so"); set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");

set_progress(0.800000);

package_extract_file("boot.img",

"/dev/block/platform/sdhci-tegra.3/by-name/LNX");

set_progress(0.980000);

nv_copy_blob_file("blob", "/staging");

unmount("/system");

set_progress(1.000000);

——————————————————————————————

我先对几个指令做下基本介绍,帮助理解,其实也就刚开始看着头疼assert(getprop("ro.product.device") == "A2109A" ||

getprop("ro.product.board") == "cl2n");

这是一个判断,它验证刷机包要求符合的机型A2109A 以及cl2n 的board ,这两个条件必须符合,才能刷这个包。

这是为了安全考虑,防止混刷。但官方包的这个验证会影响我们的刷机,用CWM的Recovery必然会出现条件2的验证无法通过,我直接删除了。

show_progress和set_progress是用来显示和控制刷机进度条的。多几个少几个没什么影响~~~

format、mount用来格式化和挂载分区,无需关注,了解即可。package_extract_dir设定解压目录、symlink(target,link) 对于已有的target 建立一个名为link 的符号连接。

以下是关键部分

et_perm

【语法】set_perm(,,,"");

表示用户名称,表示用户组名称,,表示权限模式, [... ]表示文件路径,可以使多个,用空格隔开

【作用】设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一样,只是集中在了一个命令当中

set_perm_recursive

【语法】set_perm_recursive [... ]

表示用户,表示用户组,表示文件夹的权限,表示文件的权限, [... ]表示文件夹的路径,可以多个,用空格分开

【作用】设置文件夹及文件夹中的文件的所有者和用户组

【说明】其中 分别代表目录和file的权限,具体参数如上述

这个2个指令是我们需要用到的,在放入Superuser后,对文件权限的设定就靠它们了。

例如:set_perm_recursive(0, 0, 0755, 0644, "/system");

第一个0,是 用户名称;第二个0是 用户组名称;0755表示文件夹的权限;0644表示文件夹内文件的权限;

用户&用户组中,0代表root,2000代表shell。

权限数据中,以0755为例,这组数据的最后三位755,分别代表所有者\组用户\其他用户的权限,也就是我们在RE管理中“用户\群组\其他”三行。事实上,我们ROOT只需要这后三位就可以了,其它不需要关注。

以XXX来表示这三组权限,其中:×=4 读的权限×=2 写的权限×=1 执行的权限×=0 没有权限

复合权限就是这些数字相加,所以数字权限的格式应为3个从0到7的八进制数。

例如,"读/写"二种权限,把4(可读)+2(可写)=6(读/写)即rw-。要读、写、执行权限,即rwx属性,则4+2+1=7;其它类似。

故,我在updater-script文件中添加上了如下内容:

set_perm(0, 0, 06755, "/system/bin/su");

symlink("/system/bin/su", "/system/xbin/su");

以下部分是添加busybox 的,不安装的可以不添加。

set_perm(0, 1000, 0755, "/system/xbin/busybox");

symlink("/system/xbin/busybox", "/system/bin/busybox");

package_extract_file("installbusybox", "/tmp/installbusybox");

set_perm(0, 0, 0777, "/tmp/installbusybox");

run_program("/tmp/installbusybox");

set_progress(0.750000);/*设定进度条至75%

等等~~~还有什么?对,添加位置!!!

这个也很关键!

为了防止命令被覆盖,或者与其他命令冲突,你需要选择一个较为稳妥的位置。

注意到:

set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");

对于文件夹属性更改了,故我在该指令之前加入ROOT相关的刷机指令就可以了。

得到了修改后的:

show_progress(1.000000, 180);

。。。(中间略)

set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");

set_perm(0, 0, 06755, "/system/bin/su");

symlink("/system/bin/su", "/system/xbin/su");

set_perm(0, 1000, 0755, "/system/xbin/busybox");

symlink("/system/xbin/busybox", "/system/bin/busybox");

package_extract_file("installbusybox", "/tmp/installbusybox");

set_perm(0, 0, 0777, "/tmp/installbusybox");

run_program("/tmp/installbusybox");set_progress(0.750000);

set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");

set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");

相关文档