c8812刷机(c语言实例讲解:show_progress)

在第一篇文章中我们提到了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(file);

说明:

删除文件

例如:

delete("/data/zipalign.log");删除文件/data/zipalign.log

5、delete_recursive

语法:

delete_recursive(file);

说明:

删除文件夹

例如:

delete_recursive("/data/dalvik-cache");删除文件夹/data/dalvik-cache

6、show_progress

语法:

show_progress(frac,sec);

说明:

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

例如:

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, ……);

说明:

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

例如:

symlink("toolbox", "/system/bin/ps");建立指向toolbox的符号链接/system/bin/ps

10、set_perm

语法:

set_perm(uid,gid,mode,path);

说明:

设置文件的用户为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(uid, gid, dir-mode, file-mode, path);

说明:

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

例如:

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(path);

说明:

运行脚本

例如:

run_program("/system/xbin/installbusybox.sh");运行installbusybox.sh脚本文件

14、write_raw_image

语法:

write_raw_image(src, partition);

说明:

写入至partition分区

例如:

write_raw_image("/tmp/boot.img", "boot")将yaffs2格式的boot包直接写入boot分区

15、assert

语法:

assert(sub1,sub2,sub3);

说明:

如果执行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刷机脚本

结束语

本文经用户投稿或网站收集转载,如有侵权请联系本站。

网站信息

admin
文章 1502篇
相关阅读
聚合阅读