一.Aroma Install 启动启动原理
Aroma和一般刷机包的区别就在于多出了
aroma-config update-binary-installer以及一个 Aroma 的一个资源目录
Aroma的启动过如下:
首先Recover会先从ZIP固件包中提取 Update-binary 并运行,这一步普通的固件包也是这样的,接下来普通固件包会直接运行 Update-script 也就是我们经常说的刷机脚本,与之不同的是Aroma的刷机包接着会解析 Aroma-config(Aroma-config这是一个UI配置文件)并加载UI以及各种命令,随后主导权交由用户,在完成一系列的选择后Aroma会运行 update-binary-installer紧接着解析并运行 Update-script 里面的命令然后整个刷机过程就结束了。
大概就是这么个情况。
Aroma Install 语法及命令(1/2)
·aroma-config和updater-script之间的链接是通过临时文件。
·prop文件是以 = 作为键和值之间分隔符的简单纯文本格式,以新行作为一个键值与另一个键值之间的分隔符。
例如:
key1=value1
key2=value2
key_3=value3
last.name=amarullz
这样我们就可以轻松的以file_getprop在updater-script中访问
例如:
·file_getprop("example.prop","key1");
用这样一条简单的命令,file_getprop就会返回“key1”的值也就是“value1”这样我就可以将它用在 IF/IF else 的表述中我们所需要的地方。prop文件中并不限制键值名,换句话说就是可以使用比如 . 与 下划线 但必须要注意的
就是键值中绝不可以加入引号。在ARoma中prop文件属于临时文件 而沟通aroma-config和updater-script正是prop文件 所以我们必须知道prop文件的默认保存目录,即/tmp/aroma-data/
所以我们像这样使用prop文件
writetmpfile(“test.prop”,”key1=ok”);
test.prop 文件会被定位在 /tmp/aroma-data/test.prop
比如说像这样的示例:
Aroma-config代码
writetmpfile(
"kernel.prop",
"snq =yes\n"+
"call.2way=no\n"
);
updater-script代码
if
file_getprop("/tmp/aroma-data/kernel.prop","snq") == "yes"
then
# Install Kernel
write_raw_image("/tmp/boot.img", "boot");
endif;
if
file_getprop("/tmp/aroma-data/kernel.prop","call.2way") == "yes"
then
# Do Something here
else
# Do Something here
endif;
因为这样的一个特殊性使得Aroma得到了定制安装这样一个功能
·if 和 if else
Edify只支持有限的控制结构,只支持if和if else。但是只拥有这个结构就已经足以创建一个交互的安装器
If结构的基本语法是:
if
"comparison"=="comparison"
then
.. commands ..
endif;
if else的结构是:
if
"comparison"=="comparison"
then
.. true commands ..
else
.. false commands ..
endif;
Aroma中没有任何迭代/循环控制结构,界面中的Next和Back由程序自动操控。
·比较和逻辑运算
Edify script不支持算术运算符,但它支持简单比较和逻辑运算符,就像其它基于C语言的程序设计语言(java,php,javascript)一样,它使用简单运算符语法。
例如:
# Equal
val1 == val2
# Not Equal
val1 != val2
# Or
val1 || val2
# And
val1 && val2
# Not
!val1
# Logical & Comparison
(val1 == val2)||(val3 != val4)
(val1 == val2)&&(val3 != val4)
!((val1 == val2)&&(val3 != val4))
是的,它不支持小于和大于比较,因为它只支持字符串和布尔字符串。整数比较用cmp函数,但它只在aroma-config脚本中支持。