【android系统】android系统升级流程分析(三)---updater-script语法详解(文尾含实例分析)

在第一篇文章中我们提到了updater-script,此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。今天我就来具体分析下这个脚本的脚本语言。

基础语法

1、mount

语法:

mount(type, location, mount_point);

说明:

type="MTD"   location="" 挂载yaffs2文件系统分区;

type="vfat"  location="/dev/block/"  挂载设备。

例如:

 

mount("MTD", "system", "/system");

挂载system分区,设置返回指针"/system”

mount("vfat", "/dev/block/mmcblk1p2", "/system");

挂载/dev/block/mmcblk1p2,返回指针"/system”

2、Unmount

语法:

unmount(mount_point);

说明:

mount_point是mount所设置产生的指针。其作用与挂载相对应,卸载分区或设备。此函数与mount配套使用。

例如:

unmount("/system");

卸载/system分区

3、Format

语法:

format(type, location);

说明:

type="MTD"  location=partition(分区),格式化location参数所代表的分区。

例如:

format("MTD", "system");

格式化system分区

4、Delete

语法:

delete();

说明:

删除文件

例如:

delete("/data/zipalign.log");

删除文件/data/zipalign.log

5、delete_recursive

语法:

delete_recursive();

说明:

删除文件夹

例如:

delete_recursive("/data/dalvik-cache");

删除文件夹/data/dalvik-cache

6、show_progress

语法:

show_progress(,);

说明:

为下面进行的程序操作显示进度条,进度条会根据进行前进

例如:

show_progress(0.1, 10);

show_progress下面的操作可能进行10s,完成后进度条前进0.1(也就是10%)

7、package_extract_dir

语法:

package_extract_dir(package_path, destination_path);

说明:

释放文件夹package_path至destination_path

例如:

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

释放ROM包里system文件夹下所有文件和子文件夹至/system

8、package_extract_file

语法:

package_extract_file(package_path, destination_path);

说明:

解压package_path文件至destination_path

例如:

package_extract_dir("my.zip", "/system");

解压ROM包里的my.zip文件至/system

9、Symlink

语法:

symlink(, , ,...);

说明:

建立指向target符号链接src1,src2,……

例如:

symlink("toolbox", "/system/bin/ps");

建立指向toolbox的符号链接/system/bin/ps

10、set_perm

语法:

set_perm(, ,, );

说明:

设置文件的用户为uid,用户组为gid,权限为mode

例如:

set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");

设置文件/system/etc/dbus.conf的所有者为1002,所属用户组为1002,权限为:所有者有读权限,所属用户组有读权限,其他无任何权限。

11、set_perm_recursive

语法:

set_perm_recursive(,,,,);

说明:

设置文件夹和文件夹内文件的权限

例如:

set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");

设置/data/app的所有者和所属用户组为1000,app文件夹的权限是:所有者和所属组拥有全部权限,其他有执行权限;app文件夹下的文件权限是:所有者有读写权限,所属组有读权限,其他有读权限。

12、ui_print

语法:

ui_print("str");

说明:

屏幕打印输出"str"

例如:

ui_print("It's ready!");

屏幕打印It’s ready!

13、run_program

语法:

run_program();

说明:

运行脚本

例如:

run_program("/system/xbin/installbusybox.sh");

运行installbusybox.sh脚本文件

14、write_raw_image

语法:

write_raw_image(, partition);

说明:

写入至partition分区

例如:

write_raw_image("/tmp/boot.img", "boot")

将yaffs2格式的boot包直接写入boot分区

15、assert

语法:

assert(,,);

说明:

如果执行sub1不返回错误则执行sub2,如果sub2不返回错误则执行sub3一次类推。

例如:

assert(package_extract_file("boot.img", "/tmp/boot.img"), 
write_raw_image("/tmp/boot.img", "boot"), 
delete("/tmp/boot.img"));

执行package_extract_file,如果不返回错误则执行write_raw_image,如果write_raw_image不出错则执行delete

16、getprop

语法:

getprop("key")

说明:

通过指定key的值来获取对应的属性信息。

例如:

getprop(“ro.product.device”)

获取ro.product.device的属性值。

17、ifelse

语法:

ifelse(condition, truecondition, falsecondition)

说明:

condition----------------要运算的表达式

Truecondition-----------当值为True时执行的 Edify脚本块

Falsecodnition-----------当值为False时执行的 Edify脚本块

列如:

ifelse(isuserversion(),
    ui_print(" ----user version----- "),
    ui_print(" --------- ");
    set_perm(0, 2000, 04750, "/system/xbin/su");
);

根据isuserversion()返回值判断,如果true,打印" ----user version----- ";如果false,打印" --------- ",并获取su权限。

注意:值得注意的是false分支,执行了两个语句,只需通过‘;’来分割开就可以了。

18、其他

向上一个例子中isuserversion()不是常见的函数,这个是什么呢,怎么识别,这就需要特有的update-binary。

update-binary相当于一个脚本解释器,能够识别updater-script中描述的操作。

实例

Android刷机脚本updater-script实例讲解,在这里引用的是c8812的深度os刷机脚本,请移步:

【文件】updater-script实例讲解

结束语

以上就是对updater-script脚本语言的分析,希望对大家有所帮助。感兴趣的同学可以关注我们的微信公众号。

å¨è¿éæå¥å¾çæè¿°

上一篇:【android系统】android系统升级流程分析(二)---update包分析

下一篇:【android系统】android系统升级流程分析(四)---升级过程中log调试方法

参考:

https://www.cnblogs.com/DoNetCShap/archive/2011/12/30/2307120.html

你可能感兴趣的:(android系统,update包系统升级,updater-script,系统升级,updata.zip)