请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4173|回复: 0

(ROM修改教程)刷机脚本 updater-script详解

[复制链接]

497

主题

30

回帖

7170

积分

管理员

积分
7170
发表于 2019-8-30 11:45:28 | 显示全部楼层 |阅读模式
(ROM修改教程)刷机脚本 updater-script详解
什么是刷机脚本,为什么rom 是一个zip文件,确可以直接刷入? 为什么大家可以轻松做出补丁包,然后也可以刷入?为什么我直接把文件做成一个 zip包,却不行?因为zip包中有刷机脚本,指导着所有文件哪个该往哪儿放,哪个该删除,哪个目录什么权限,都说的明明白白,所以,,
刷机脚本都在哪儿呢?细心的会发现,每一个软件或者刷机包,或者补丁包,都有一个目录,META-INF

如果你动一个软件的刷机脚本,就是动了他的签名文件,必须重新签名(签名和给软件一样,简单的很,自己搜下)。 所以,CERT.RSA CERT.SFMANIFEST.MF 就没用了,先删除,签名之后生成新的。
我们要修改的东西主要是com-google-update-script我先贴出一个平时刷gapps补丁包时候用的最多的一个脚本大家看看,
ui_print("**************************************");
ui_print("          OnePlus 3T A3010 ROM        ");
ui_print("**************************************");
ui_print("                  Android 8.0         ");
ui_print("**************************************");

package_extract_dir("aurora/setup", "/tmp/");
set_perm_recursive(0, 0, 0777, 0777, "/tmp");
set_perm(0, 0, 0777, "/tmp/SetPropSetting.sh");
set_perm(0, 0, 0777, "/tmp/datawipe.sh");   

ui_print("Formatting system...");
mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/system", "/system");
delete_recursive("/system");

set_progress(0.100000);
mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/userdata", "/data");
       忘了说一点,修改这个文件用 notepad++ 这个文本软件,不多说,到处是。看上面第一句,ui_print("OnePlus 3TA3010 ROM ");作用就是在你recovery刷机的时候显示 OnePlus 3T A3010 ROM 引号内的内容可以自己随便修改。比如我自己的包中常用的:
第二句show_progress(0.2, 0);的意思就是 控制刷机时间和进度条,0 是自动,第二个都写0 就是了,前边的0.2是 进度条前进20% 这个无所谓,你都写0.1 也没有问题。甚至不写也行,就是你会看到 刷机的时候 进度条不动,然后嗖的一下 就刷完了。。

第三局:mount("ext4", "EMMC","/dev/block/mmcblk0p12", "/system"); 意思是挂载system分区,也就是12分区,(13分区是data分区14分区是内置存储卡。)因为要往里面写入东西,当然需要先挂载,才能写入,对应的最后有一句是 卸载system分区unmount("/system"); 这是刷完机之后的。

第四句:真正起作用把文件刷入 系统中的是这句package_extract_dir("system","/system"); 意思就是 把手机中的system 插到你手机的system中(额,别想歪了)一个完整的system 包含很多个文件夹,如图。

你的目的如果是为了 把程序 增加到system,app中替换 那么只需要有system app 目录就行了,总之,你需要网手机中写入什么,就新建相对应的 文件夹名字,然后里面放入你要放的东西,如果手机中原来自带同名的,那么就覆盖。 当然不同的目录下需要有不同的权限,像是system-app下的程序需要 rw- r-r 就可以了,而有的不是,比如lib下,权限就要更高,就需要响应的脚本增加权限。后面会讲到。我刚开始举例子用的 补丁包是个gapps的补丁包,所有,目录只有system-app 如图。稍等来个完整的给大家看看。

再以dzo4.0为例 弄个完整的给大家看看, 里面所有的汉字都是我的解释。大家做刷机脚本的时候不需要有,我只是为了更好的给大家讲下,然后在后边列出各种命令的用法和格式,当然有些命令这个脚本中没有,比如删除文件等,灵活运用。
再以dzo4.0为例 弄个完整的给大家看看, 里面所有的汉字都是我的解释。大家做刷机脚本的时候不需要有,我只是为了更好的给大家讲下,然后在后边列出各种命令的用法和格式,当然有些命令这个脚本中没有,比如删除文件等,灵活运用。assert(getprop("ro.product.device") == "OnePlus 3T A3010 " || getprop("ro.build.product") == "OnePlus 3T A3010 " || getprop("ro.product.board") == "OnePlus 3T A3010 ");检查刷机包是不是给OnePlus 3T A3010 用的
  show_progress(0.400000, 0);进度条前进百分之四十
format("ext4", "EMMC", "/dev/block/mmcblk0p12", "0");格式化system分区
mount("ext4", "EMMC", "/dev/block/mmcblk0p12", "/system");挂载system分区
mount("vfat", "EMMC", "/dev/block/mmcblk0p1", "/cust");挂载cust(是为了最后写入boot.img的,因为boot单独在外边,不在system中而且也不是写入12分区的,写入boot.img的语句在倒数第五行)ui_print("Updating SYSTEM...");
show_progress(0.5, 20);
package_extract_dir("system", "/system");把刷机包中所有system下的目录和文件写入到12分区一下symlink的可以理解为创建快捷方式。
symlink("app_process64", "/system/bin/app_process");
symlink("bzip2", "/system/bin/bunzip2");
symlink("bzip2", "/system/bin/bzcat");
symlink("dalvikvm64", "/system/bin/dalvikvm");
symlink("/data/vendor/misc/audio/mbhc.bin", "/system/vendor/etc/firmware/wcd9320/wcd9320_mbhc.bin");
symlink("/data/vendor/misc/audio/wcd9320_anc.bin", "/system/vendor/etc/firmware/wcd9320/wcd9320_anc.bin");
symlink("/data/vendor/misc/audio/wcd9320_mad_audio.bin", "/system/vendor/etc/firmware/wcd9320/wcd9320_mad_audio.bin");
ui_print("Writing static_nvbk image...");
package_extract_file("aurora/firmware/static_nvbk.bin", "/dev/block/bootdevice/by-name/oem_stanvbk");
ui_print("Patching firmware images...");
package_extract_file("aurora/firmware/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("aurora/firmware/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
ui_print("***************************************************");
ui_print("All done!");
ui_print("***************************************************");
symlink("wiperiface_v01.so", "/system/bin/wiperiface");下面的set_perm_recursive 是给文件夹赋予相应的权限。set_perm 是给文件赋予权限。大家自几看下不同文件夹和文件需要的权限,看到下面的数字是不是不懂什么意思?读r=4写w=2执行x=1对应的数相加 就是相应的权限。
语法】set_perm(, , , "");
表示用户名称,表示用户组名称,,表示权限模式, [... ]表示文件路径,可以使多个,用空格隔开
作用】设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一样,只是集中在了一个命令当中
举例】set_perm(0,2000,0550, "system/etc/init.goldfish.sh")(设置手机system中的etc/init.goldfish.sh的用户为root,用户组为shell,所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限)
说明】在此命令中最难明白的是0 2000 0550这几组参数所代表的意思,我查了Linux相关的参数,具体如下:
这里0代表用户为root,2000代表用户组为shell。我们来说明0550这组数据,这组数据的最后三位550,分别代表所有者\组用户\其他用户的权限,也就是我们在RE管理中“用户\群组\其他”三行。 我们以XXX来表示这三组权限,其中:
×=4 读的权限
×=2 写的权限
×=1 执行的权限
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数。
例如,如果想让某个文件的属主有"读/写"二种权限,需要把4(可读)+2(可写)=6(读/写)。若要rwx属性则4+2+1=7;若要rw-属性则4+2=6;若要r-x属性则4+1=5。
常用修改权限的命令:
Set_perm 0 0 0600 ××× (只有所有者有读和写的权限)
Set_perm 0 0 0644 ××× (所有者有读和写的权限,组用户只有读的权限)
Set_perm 0 0 0700 ××× (只有所有者有读和写以及执行的权限)
Set_perm 0 0 0666 ××× (每个人都有读和写的权限)
Set_perm 0 0 0777 ××× (每个人都有读和写以及执行的权限)
范例 :
-rw------- (600) -- 只有用户有读写权限。
-rw-r--r-- (644) -- 只有用户有读写权限;而组用户和其他用户只有读权限。
-rwx------ (700) -- 只有用户有读、写、执行权限。
-rwxr-xr-x (755) -- 用户有读、写、执行权限;而组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 用户有读、写、执行权限;而组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。


set_perm_recursive
语法】set_perm_recursive [... ]
表示用户,表示用户组,表示文件夹的权限,表示文件的权限, [... ]表示文件夹的路径,可以多个,用空格分开
作用】设置文件夹及文件夹中的文件的所有者和用户组
说明】其中 分别代表目录和file的权限,具体参数如上述
举例】set_perm_recursive 0 0 0755 0644 SYSTEM:app(设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作)

命令如下:
set_perm(0,0,0755,"/system/bin/mot_boot_mode.bin");

以后自己做包的时候可以直接参考下面的内容
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 1000, 04750, "/system/bin/diag_mdlog");
set_perm(0, 1000, 04750, "/system/bin/iptables");
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");

ui_print("Updating BOOT Image...");
package_extract_file("boot.img", "/cust/image/boot.img");这一行是写入boot.img
show_progress(0.1, 0);进度条走百分之十
unmount("/system");卸载system分区
unmount("/cust");卸载cust分区
ui_print("Installation complete!");显示安装结束



1、mount unmout 对应上面的就会了,后边无非是跟上地址


2、Format格式化,不解释了,一般只有一句,就是格式化下 system,上面讲了



3、Delete 删除命令,比如我做的本地补丁包,就用到了,这样可以不用格式化system 直接删除system中不用的响应程序比如,

  • delete("system/app/CMFM.apk");
  • delete("system/app/GooglePlayStore.apk");
  • delete("system/app/Email.apk");
  • delete("system/app/es.apk");
  • delete("system/app/Exchange.apk");
  • delete("system/app/GenieWidget.apk");
  • delete("system/app/Gmail.apk");
  • delete("system/app/GoogleBackupTransport.apk");
  • delete("system/app/GoogleCalendarSyncAdapter.apk");
  • delete("system/app/GoogleFeedback.apk");
  • delete("system/app/GoogleLoginService.apk");

复制代码

4、delete_recursive删除文件夹的,用法同上例如:删除文件夹/data/dalvik-cache

5、show_progress 前面注释了很多次了


6、package_extract_dir 最常用的,写入东西的命令。前面 写入system就是用的这句,有印象吧,对应上面看看格式。


7、Symlink语法:symlink(, , ,...);说明:建立指向target符号链接src1,src2,……例如:建立指向toolbox的符号链接/system/bin/ps8、set_perm 给文件赋予权限


8、set_perm(, ,, );说明:设置文件的用户为uid,用户组为gid,权限为mode例如:设置文件/system/etc/dbus.conf的所有者为1002,所属用户组为1002,权限为:所有者有读权限,所属用户组有读权限,其他无任何权限。


9、set_perm_recursive给文件夹富裕权限,前面也说了语法:set_perm_recursive(,,,,);说明:设置文件夹和文件夹内文件的权限例如:设置/data/app的所有者和所属用户组为1000,app文件夹的权限是:所有者和所属组拥有全部权限,其他有执行权限;app文件夹下的文件权限是:所有者有读写权限,所属组有读权限,其他有读权限。


10、ui_print 不解释了吧。


11、run_program 这个是运行脚本的,比如我以前给大家增加的 bootloader,破解粉屏 的补丁,就是 执行了个 这个命令,运行脚本,写入文件的。语法:run_program();说明:运行脚本例如:运行installbusybox.sh脚本文件12、如果要让ROM自带的软件安装到DATA区 就必须挂载DATA区所以在刷机脚本里面要有挂载的命令刷机脚本的位置是\META-INF\com\google\android下的updater-script这个文件!format("ext3", "EMMC", "/dev/block/mmcblk0p13"); 这一行是格式格式化DATA分区的命令!!加入这行的话就不用机油去WIPE了直接刷就了事!!但是不包括CACHE!事实上无关大碍CACHE区基本没什么用!mount("ext3", "EMMC", "/dev/block/mmcblk0p13", "/data"); 挂载DATA区的命令package_extract_dir("data", "/data"); 将包里面的data 文件夹 覆盖DATA下!set_perm_recursive(1000, 1000, 0771, 0644, "/data/app"); 给/DATA/APP这个文件夹权限 !


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|爱淘机论坛 ( 鲁ICP备2022040313号-4 )

GMT+8, 2024-3-29 18:18 , Processed in 0.076824 second(s), 23 queries .

Powered by 爱淘机论坛

© 2001-2023

快速回复 返回顶部 返回列表