edify是用来解析.zip文件,从而进一步安装Android系统的脚本语言。edify脚本并不一定是用于更新固件,它还可以用来替换、增加、删除特定的文件,甚至是格式化分区。通常情况下,edify脚本在recovery模式下flash zip包的时候运行。
edify有两个重要的文件,这两个文件可以在.zip文件中的META-INF/com/google/android文件夹中找到。它们分别是:
接下来,介绍一下edify语言常用的函数。
语法
mount(fs_type, partition_type, location, mount_point);
作用
挂载一个文件系统到指定的挂载点。
返回值
说明
示例
mount("ext4", "EMMC", "/dev/block/mmcblk0p8", "/system");
语法
format(fs_type, partition_type, location);
作用
格式化指定的文件系统。
说明
示例
format("ext4", "EMMC", "/cache");
语法
delete(file1, file2, ..., fileN);
作用
删除文件。变长参数,支持删除多个文件。
示例
delete("/tmp/boot.img");
语法
delete_recursive(<path>);
作用
递归删除目录。
示例
delete_recursive("/data/media/AppStoreWidget");
语法
show_progress(fraction, duration);
作用
在recovery中为下面的程序操作显示进度条。进度条会根据duration前进fraction。
说明
示例
show_progress(0.950000, 50); (ps:show_progress后面的操作可能耗时50s,完成后进度条前进95%)
语法
package_extract_dir(package_path, destination_path);
作用
释放卡刷包中package_path的内容到destination_path。
示例
package_extract_dir("system", "/system"); (ps:释放rom包中system文件夹下所有文件和子文件夹至/system)
语法
package_extract_file(file_path, destination_path);
作用
提取Rom包中的单个文件到指定目标目录。
示例
package_extract_file("boot.img", "/tmp/boot.img");
语法
symlink(target, src1, src2, ...);
作用
建立指向target的符号链接src1、src2…
说明:
示例
symlink("toolbox", "/system/bin/cat");
语法
set_perm(uid, gid, mode, file1, file2, ..., fileN);
作用
设置单个文件或者多个文件的权限。
说明
示例
set_perm(0, 3004, 02755, "/system/bin/ping");
语法
ui_print("str");
作用
recovery中打印出str字符串内容,类似于Java中的System.out.println();
示例
ui_print("+++++++++++++++++++++++++++++++++++++++++++++");
语法
run_program(path, arg1, ..., argN);
作用
以指定的参数执行程序。
说明:
示例
run_program("/sbin/busybox", "mount", "/system");
语法
write_raw_image(file_path, partition);
说明
示例
write_raw_image("/tmp/boot.img", "bootimg");
语法
assert(condition1, ..., conditionN);
作用
如果condition的计算结果为false,则终止脚本的运行。
示例
assert(package_extract_file("boot.img","/tmp/boot.img"),
write_raw_image("/tmp/boot.img","bootimg"),
delete("/tmp/boot.img")
);
语法
file_getprop(path, key);
作用
查看指定的path文件中是否包含key=value的字符串,如果包含,则返回value。
示例
file_getprop("/tmp/bob.txt", "cool") == "yes"