上一篇文章《【手册】如何编译/修改三星手机Rom(三)》介绍如何在三星Rom上做一些基本的修改,这篇文章接上一篇文章,介绍如何更新脚本语法和将外部功能添加到ROM。
本节是制作ROMS 最有趣的部分(反正我是这么觉得),这节的重点是updater-script。接上文,我们进入到“工作/ META-INF / COM /Google/ Android”的目录,在那里你会看到两个文件,即,“更新脚本”和“更新二进制”。接下来,我将首先向您介绍什么是更新程序脚本,其本质是什么,以及为何它在ROM 开发中如此有益和有趣。
因此,首先,这个updater-script有什么用。它基本上是file ,它指示TWRP(或任何其他恢复)如何处理zip(您的ROM 或任何其他可刷新的zip )。没有此功能,您将无法刷新设备上的任何内容(嗯,这是个谎言)。但是,在刷新ROM中,这非常重要。因此,现在让我们了解一下updater-script语法 。在此之前,我需要告诉您一些事情,即恢复实际上是如何刷新zip 文件的(这就是我的假设)。所以基本上,当我们闪一个文件,恢复验看更新二进制文件内“META-INF / COM /谷歌/机器人”中的zip 文件。然后,此更新二进制文件将告诉恢复;
zip 必须与STANDALONE INSTALLER或AROMA INSTALLER一起安装。如果恢复开创出了拉链必须由一个独立的安装安装程序,它就会进入到更新脚本,其中HAS是在同一个目录中更新二进制和说,嘿,哥们,你能告诉我,是什么我和这个压缩 文件有关。
因此,updater-script基本上指示恢复如何处理zip 。因此,在了解了updater-script及其本质之后,现在让我们讨论一下可以编写updater-script的语法或语言。
注意:-这不是更新程序指南,因此,我仅会让您知道与ROM开发有关的重要关键字或其他此类内容。但是,这是我所学到的,而且还远远不够,这远远不够。此外,您必须充分注意即将出现的部分,这是必不可少的。最后,如果您有一些编程背景, 那么它会很好,但是如果您没有,那么我将尽可能简单,直接地;
因此,为此,请首先使用Notepad ++打开updater-script ,您会惊讶地看到大量的线条。您会想,这到底是什么意思。我要在这里向您解释大部分(如果不是全部)的内容。
1. ui_print(“”);
因此,我们首先从ui_print开始。因此,这就是将您放在双引号(“”)中的任何内容都将直接打印到安装程序 屏幕中。(对于我的编程专家来说,如果您了解C或C ++,就像cout <<“”)。
现在,让我用一个示例更好地说明这一点,这里是一段代码及其输出;
ui_print(“你好,我正在学习ROM 构建/修改”);
及其在recovery的输出:
您好,我正在学习ROM的构建/修改
学到了吗?现在让我们进入下一个。
2. run_program(“ / sbin / busybox”,“ mount ”,“ / system”);
这基本上是修改后的命令。原始命令(run_program())用于运行Recovery中可用的许多内置程序。在进行ROM 开发时,将探索该命令的许多版本。现在,这个特定的命令做的是,它安装了“ 系统”的分区设备。
现在,你们中的一些人可能会问,为什么我们需要安装。基本上,如果不挂载特定分区,我们将无法修改(添加文件或将其删除)。因此,我希望您现在明白为什么安装如此重要。
在ROM 构建中,我们通常需要挂载系统,数据,缓存和dalvik。因此,您将始终在ROM 的任何updater-script开头看到以下代码集。
run_program("/sbin/busybox","mount","/system");
run_program("/sbin/busybox","mount","/data");
run_program("/sbin/busybox","mount","/cache");
run_program("/sbin/busybox","mount","/preload");
3. delete(“ / file_path”);
顾名思义,它会删除设备上的文件。您需要在括号内用双引号指定确切的文件目录。 例如:
delete("/system/priv-app/SystemUI/SystemUI.apk");
// 上面的行(在recovery运行时)将删除SystemUI.apk
4. delete_recursive(“ / directory);
顾名思义,该命令删除目录甚至格式化分区。它与 delete();命令的工作方式不同。delete_recursive()删除目录,而 delete()命令删除一个文件(一行中的删除太多)
,例如:
// 请注意,在以上命令中,recovery将删除SystemUI文件夹及其内容。
delete_recursive("/system/priv-app/SystemUI");
此命令的另一个用途是格式化分区。如你所知,闪烁的一个ROM 基本上意味着,我们需要提取的内容系统中的文件夹中的zip 文件到系统分区您的设备。所以,每当我们闪现一个新的 ROM ,它始终是建议擦拭缓存,Dalvik的和系统。
// 下面的代码将固定必要的分区
delete_recursive("/system");
delete_recursive("/cache");
delete_recursive("/data/dalvik-cache");
5. package_extract_dir(“ zip_directory”,“ / directory_on_phone”);
这是一个非常简单且重要的命令。实际上,它所做的就是将zip 文件中的文件夹提取到设备上的另一个文件夹。让我用一个例子来解释你:
// 下面的命令本质上是做的是,它提取的系统文件夹中的ROM 压缩到系统的目录设备。
package_extract_dir("system","/system");
{Notice in the / sign in the second parameter, and this is absent in the first parameter}
让我们通过更多示例来了解这一点:
package_extract_dir("MODS/SystemUI","/system/app/SystemUI");
package_extract_dir("MODS/SecSettings2","/system/priv-app/SecSettings2");
6. symlink(“file_name1”, “file_name2”);
这是一段代码,您将永远不需要!但是我在这里解释这个是因为有大量的更新脚本。因此,我们不会在此命令的更多细节上进行概述。现在,此命令基本上在两个文件之间创建了符号链接。符号链接是文件具有一个主要名称的位置,但是文件名表中还有一个额外的条目,用于将所有访问都引用回该主要名称。
以下命令在“ /system/lib/libQjpeg.so”和“ /system/priv-app/SelectiveFocusViewer/lib/arm/libQjpeg.so”之间创建了符号链接。
symlink("/system/lib/libQjpeg.so", "/system/priv-app/SelectiveFocusViewer/lib/arm/libQjpeg.so");
7 .set_perm(uid,gid,Permissions,“ file_name_with_adress”);
这是一个非常有用的命令,因为它有助于给予各种必要的权限文件中的Android。现在,基本上,特定文件需要权限,该文件可能需要一些特殊特权才能完成操作。例如,Android不允许系统上的任何文件格式化设备,仅当文件具有Android本身的必要权限时,才可以进行格式化。所以,我希望您明白了为什么权限在Android中如此重要。
现在,让我们了解上述命令的语法,这将有助于赋予各种Android 文件权限 ;
set_perm(uid, gid, permissions, "file_name_with_adress");
现在,该语句本身具有许多参数,如您所见。现在,我将限制自己仅向您解释ROM 开发所需的内容。现在,“ UID”和“ GID”分别是UserID和GroupID。(它们很难解释,超出了本指南的范围,因此,我仅作简要说明)。它们本质上是Android 权限的重要组成部分,通常是整数。不用担心,我们将在下面的示例中了解其工作原理。
其次,权限类似于rw-rr或rwx-rw-rw。现在,如果您一直在使用Linux有一阵子,你知道这些意味着什么。让我们以rwx-rw-rw为例来理解这一点:-
现在第一部分,即“ rwx”是赋予文件“所有者”的权限集,第二部分,即“ rw”是授予“组”的权限集,第三部分“ rw”是授予“全局”的权限。它们似乎有点不堪重负,但请耐心等待,就ROM 开发而言,它们几乎没有作用。
现在回到命令,权限,以整数形式使用。现在,我在这里发布了一个链接,如果您想知道这些权限如何转换为整数…(https:)。
本质上,您只需要两个权限0644和0755。在这些权限中,总是将apk授予0644,而将始终给文件夹0755。(0644-> rw-rr和0755-> rwx-rx-rx)
// 以下命令实质上将许可权“ rwx-rwx-rwx”赋予文件“ /tmp/wipe.sh”。
set_perm(0, 0, 0777, "/tmp/wipe.sh");
8.set_perm_recursive(UID, GID, perm_directory, perm_files, “directory_name”);
现在,这与set_perm()非常相似,但是唯一的区别在于,它授予整个目录及其内容的权限。让我们看一个例子。
//以下命令为“ / system / framework”目录提供0775权限及其所有内容0644权限。(0775-> rwx-rwx-rx)。
set_perm_recursive(1000, 1000, 0775, 0644, "/system/framework");
小伙伴们,在本文中,我试图介绍大多数基本的Edify Scripting命令,这是您在ROM 开发过程中永远需要的。在下一篇文章中讨论aroma-config之后,我将再讨论一些命令。我发布了一个链接,它将帮助您找到更多此类命令:-https : //forum.xda-developers.com/wik…cript_language。
现在,我们完成了Updater Script命令(第1部分)。在接下来的文章中,我们将讨论Aroma-Config,然后,我们将介绍Updater Script Commands(第2部分)。因此,请继续关注,在下一篇文章中见。