[GUIDE|汉化]AROMA刷机脚本全面教程

附件: 点击下载

前言

原帖地址:http://forum.xda-developers.com/showthread.php?t=2422457
原帖名称:[TUTORIAL] Comprehensive Guide for AROMA Installer For Beginners!! | 27/08/13
原作者:Ayush Singh
搬运汉化:zhaozihanzzh
特别感谢:有道网页翻译
–ME出征 寸草不生 Android小楼阁 年度汉化Beta1 如果汉化不当 请向我反馈–
来自网络的前言:“AROMA”来源于印度尼西亚语,意为“香味”,但它同时也是“AMARULLZ ANDROID ROM MANIFESTATION”的缩写。它是安卓的一种升级版的update-binary,包括很多特色,像向导安装、触摸用户界面(AROMA UI)、定制软件包、系 统检测、可定置主题(themeable)及用户交互。所有发布的版本均以“花卉”命名,例如,第一版名为“Anggrek”,意为“兰花”。
你好朋友,我们都知道最强大的基于Android Recovery的安装程序. .
Aroma安装程序简化了我们的rom,让它们高度可定制和交互
本指南将帮助您学会创造漂亮,互动和可定制的aroma ROM和MOD安装包

必备条件

  • 用于制作脚本的电脑
    ROM/MOD你想让aroma安装程序
    Notepad++编辑软件安装程序文件
    设备与CWM / TWRP Recovery测试你的aroma安装程序压缩
    7z或WinRAR或任何其他使zip压缩工具
    创造性思维和使用计算机的一些基本知识

我们现在就开始你的旅程!

设置

下载这个zip并在文件夹提取你的ROM或MOD

所以它是这样的[无图]

基本编辑

现在让我们开始,到这个目录-meta- inf\com\google\android\

我们感兴趣的是编辑”aroma-config“和”updater-script”

首先用notepad++打开aroma-config

你将能够看到这样的一个窗口[无图]

设置屏幕分辨率

现在我们要做的第一件事是在aroma安装程序中声明我们的屏幕分辨率

根据您的屏幕分辨率,删除“#”前面的
例如我的设备是320x480,这是对我来说—:

1
2
3
4
5
# ini_set("dp","1"); #-- LDPI ( 240x320 / QVGA )
ini_set("dp","2"); #-- MDPI ( 320x480 / HVGA )
# ini_set("dp","3"); #-- HDPI ( 480x800 / WVGA )
# ini_set("dp","4"); #-- XHDPI ( 1280x720 / WVGA )
# ini_set("dp","5"); #-- XXHDPI ( 1920x1080 / WVGA )

可选的——你可能会从上面的代码删除其他未使用的字符串

现在您已经为安装程序成功地声明你的屏幕分辨率!

建立基本的细节

接下来我们要声明的是我们的ROM/MOD名称、日期、设备名称和版本

在aroma-config内你将能够找到这段代码:

1
2
3
4
5
ini_set("rom_name",             "YOUR ROM NAME HERE™ ");
ini_set("rom_version", "YOUR VERSION");
ini_set("rom_author", "YOUR NAME");
ini_set("rom_device", "YOUR DEVICE NAME");
ini_set("rom_date", "25/8/2013 - DATE OF YOUR MOD");

根据你的ROM/MOD细节编辑它,填补相应的内部细节上面的””);

现在您已经成功地声明你的ROM/MOD名和其他有关细节

展示一张图像

现在让我们的安装程序美丽。我们将在当用户开始安装程序时,添加一个png图像显示。

你将能够在aroma-config内找到这段代码:

1
2
3
4
5
6
7
8
9
10
# Show Simple Splash
#

splash(
#-- Duration 5000ms / 5 seconds
5000,

#-- <AROMA Resource Dir>/SPLASH.png
"SPLASH"
);

这将显示SPLASH.png 5秒,you can edit the no of seconds the image should be displayed
Edit 5000 to the no the seconds you want(这两句翻译不出来,自己领悟)
图像显示位于文件夹- META-INF\com\google\android\aroma
在这里你可以找到SPLASH.png,换成你的,记住应该使用相同于你的设备的分辨率
也是必须只能用.png格式

现在你已经成功添加了一个显示图象的aroma安装程序MOD

显示动画后,显示图象(可选)

您还可以添加一个动画aroma安装程序包

你将会在aroma-config内找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
##
# Show Animated Splash
#
anisplash(
# #-- Number of Loop
4,

#-- Frame [ Image, duration in millisecond ]
"anim/a1", 30,
"anim/a2", 30,
"anim/a3", 30,
"anim/a4", 30,
"anim/a5", 30,
"anim/a6", 30
);

这里从a1到a6的png将显示为4次30毫秒(循环数4)

你也可以编辑循环的次数到任何所需的次数
这里是4,按你的意愿编辑

将会被显示的图像在META-INF\com\google\android \aroma\anim文件夹
用你的png替换

注意:如果您不想要飞溅动画,从您的aroma-config里删除上面的代码。

现在您已经在安装程序开始前成功创建了动画显示

字体选择代码(不需要编辑)

这段代码是选择安装程序对话语言:

1
2
3
4
5
##
# Font Selection
#

endif;

这将看起来像下面的aroma安装程序
[无图片]

窗口选择安装程序的主题

现在我们将创建一个窗口选择主题来安装使用ROM/MOD

滚动并在aroma-config找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
##
# SELECT THEME
#

selectbox(
#-- Title
"<~themes.title>",

#-- Sub Title
"<~themes.desc>",

#-- Icon:
"@personalize",

#-- Will be saved in /tmp/aroma/theme.prop
"theme.prop",

"Generic", "Unthemed AROMA Installer", 0, #-- selected.0 = 1
"MIUI Theme", "MIUI Theme by mickey-r & amarullz", 0, #-- selected.0 = 2
"NXT Theme", "NXT Theme by Pranav Pandey", 0, #-- selected.0 = 3
"NextGen Theme", "NextGen Theme by amarullz edit by Ayush", 0, #-- selected.0 = 4
"Sense Theme", "HTC Sense Theme by amarullz", 0, #-- selected.0 = 5
"Honami Theme", "Xperia i1 Theme by Ayush", 1 #-- selected.0 = 6

);

使用的窗口类型的属性是单选框,这意味着以上的主题只能单选

这里的theme.prop是临时文件,存储用户的选择

这里Honami主题选择初始值1这意味着它是默认的,
(1代表选择,0代表没有选择)

注意:最后一个字符串的初始值[译者注:数字1]后没有逗号”,“,它不是一个错误

上面的主题已经包含在zip中,您可以找到存储主题目录-META-INF\com\google\android\aroma\themes
并按照你的意愿编辑它们,仅当你有关于png和.9.png知识时才能编辑它们.
根据原作者,zip中包括的主题是完美的。

现在滚动并在aroma-config找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
##
# SET THEME
#

if prop("theme.prop","selected.0")=="2" then
theme("miui");
endif;

if prop("theme.prop","selected.0")=="3" then
theme("xNXT");
endif;

if prop("theme.prop","selected.0")=="4" then
theme("NextGen");
endif;

if prop("theme.prop","selected.0")=="5" then
theme("sense");
endif;

if prop("theme.prop","selected.0")=="6" then
theme("i1");
endif;

不需要编辑,它已经完美,它声明主题的选择。

[无图]

现在您已经成功地创建了一个窗口来显示可用的主题选择

显示基本信息

现在我们将创建一个窗口显示安装前的ROM/MOD信息

向下滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
##
# SHOW ROM/Mod INFORMATION
#

viewbox(
#-- Title
"<~welcome.title>",

#-- Text
"<~welcome.text1> <b>"+
#-- Get Config Value
ini_get("rom_name")+
"</b> <~common.for> <b>"+ini_get("rom_device")+"</b>.\n\n"+

"<~welcome.text2>\n\n"+

" <~welcome.version>\t: <b><#selectbg_g>"+ini_get("rom_version")+"</#></b>\n"+
" <~welcome.codename>\t\t: <b><#selectbg_g> </#></b>\n"+
" <~welcome.updated>\t: <b><#selectbg_g>"+ini_get("rom_date")+"</#></b>\n\n\n"+

"<~welcome.next>",

#-- Icon
"@welcome"
);

不需要编辑这个代码,它已经完美

Here the window is of viewbox attribute, we have just the back and next button in the window这里viewbox属性的窗口,我们刚刚和next按钮的窗口
这是如何在安装程序[暂无图片]

现在您已经成功地创建了一个窗口来显示ROM/MOD信息的安装程序

许可窗口(可选)

现在我们将创建一个窗口显示许可/ 和条件下使用ROM/MOD

滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
##
# LICENSE
#

agreebox(
#-- Title
"YOUR ROM/Mod NAME™ T&C",

#-- Subtitle / Description
"Read Carefully",

#-- Icon:
"@license",

#-- Text Content
resread("license.txt"),

#-- Checkbox Text
"Do you agree??",

#-- Unchecked Alert Message
"You've to agree!!"
);

根据你的ROM/MOD名称编辑标题”YOUR ROM/Mod NAME™ T&C”。

显示存储在目录的许可——META-INF\com\google\android\aroma
您可以按你的ROM/MOD的需要编辑license.txt

如果你不需要许可窗口,删除上面的代码。

这是安装程序[无图]

现在您已经成功地创建了一个将显示许可的窗口

创建主菜单.

现在我们将创建一个窗口菜单选项的ROM/MOD

滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
##
# MAIN MENU- INSTALLER n MISC
#
menubox(
#-- Title
"ROM/MOD NAME™ Menu",

#-- Sub Title
"Please select from the Menu Below to Modify the required features",

#-- Icon
"@apps",

#-- Will be saved in /tmp/aroma/menu.prop
"menu.prop",

#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#

"Custom Installation", "ROM Installation with Various Features", "@install", #-- selected = 1
"System Info", "Get and show device/partition informations", "@info", #-- selected = 2
"ChangeLog", "ROM/Mod ChangeLog", "@agreement", #-- selected = 3
"Quit Install", "Leave Setup :(", "@install" #-- selected = 4

);

按你的ROM/MOD的名字编辑上面的标题。
选择由用户在上面的窗口——menu.prop将存储在一个临时文件
我在菜单中只增加了4选项,我建议只有你有适当的知识,才可以删除任何上面的字符串

这是在安装程序中[图片]

现在您已经成功地创建了你的安装程序主菜单

  • I.1 - >第一个选项是安装程序子(分支)窗口中,我们将创建它

  • I.2 - >第二个选项是显示系统信息。

  • I.3 - >第三个选项是显示Mod/ROM的更新日志。

  • I.4 - >第四个选项是退出安装程序

I.2 -系统信息

现在可以创建子窗口显示系统信息

向下滚动并在aroma-config里找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
##
# System Info
#

if prop("menu.prop","selected")=="2" then

#-- Show Please Wait
pleasewait("Getting System Information...");

#-- Fetch System Information
setvar(
#-- Variable Name
"sysinfo",

#-- Variable Value
"<@center><b>Your Device System Information</b></@>\n\n"+

"Device Name\t\t: <#469>YOUR DEVICE NAME</#>\n"+
"Board Name\t\t: <#469>YOUR MODEL NAME</#>\n"+
"Manufacturer\t\t: <#469>YOUR MANUFACTURER</#>\n"+

"\n"+

"System Size\t\t: <b><#selectbg_g>"+getdisksize("/system","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/system","m")+" MB</#></b>\n\n"+
"Data Size\t\t: <b><#selectbg_g>"+getdisksize("/data","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/data","m")+" MB</#></b>\n\n"+
"SDCard Size\t\t: <b><#selectbg_g>"+getdisksize("/sdcard","m")+" MB</#></b>\n"+
"\tFree\t\t: <b><#selectbg_g>"+getdiskfree("/sdcard","m")+" MB</#></b>\n\n"+

""
);

#-- Show Textbox
textbox(
#-- Title
"System Information",

#-- Subtitle
"Current system Information on your Xperia MDPI",

#-- Icon
"@info",

#-- Text
getvar("sysinfo")
);

#-- Show Alert
alert(
#-- Alert Title
"Finished",

#-- Alert Text
"You will be back to Menu",

#-- Alert Icon
"@alert"
);

#-- Back to Menu ( 2 Wizard UI to Back )
back("2");

endif;

下面的命令以此参数显示系统信息

1
2
3
4
if prop("menu.prop","selected")=="2" then
..
..
endif;

因为这是在菜单窗口中的第二个选项,所以我们在这里==“2”

按您的要求编辑这些字符串:

1
2
3
"Device Name\t\t: <#469>YOUR DEVICE NAME</#>\n"+
"Board Name\t\t: <#469>YOUR MODEL NAME</#>\n"+
"Manufacturer\t\t: <#469>YOUR MANUFACTURER</#>\n"+

剩下的代码是好的,不需要其他的编辑

这是在安装程序中[图片]

现在你已经成功添加一个窗口显示系统信息

I.3 -显示更新日志

现在我们将创建一个弹出显示ROM/MOD的更新日志

滚动并在aroma-config找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
##
# CHANGELOG DISPLAY
#

if prop("menu.prop","selected")=="3" then

#-- TextDialog
textdialog(
#-- Title
"YOUR ROM NAME Changelog",
#-- Text
resread("changelog.txt"),
#-- Custom OK Button Text (Optional)
"Close"
);

#-- Back to Menu ( 2 Wizard UI to Back )
back("1");

endif;

下面的命令以此参数显示系统信息

1
2
3
4
if prop("menu.prop","selected")=="3" then
..
..
endif;

因为这是菜单窗口中的第三个选项,所以我们在这里==“3”

按你的ROM/MOD名称编辑标题。

更新日志文件存储在目录-META-INF\com\google\android\aroma
按你的ROM/MOD的更新日志编辑changelog.txt

这是在安装程序中[图片]

现在您已经成功地创建了一个弹出显示更新日志(窗口)

I.4 -退出弹出

现在我们将创建一个对话退出安装程序

滚动并在aroma-config找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
##
# QUIT INSTALLER
#

if prop("menu.prop","selected")=="4" then

#-- Exit
if
confirm(
#-- Title
"Exit",
#-- Text
"Are you sure want to exit the Installer?",
#-- Icon (Optional)
"@alert"
)=="yes"
then
#-- Exit
exit("");
endif;

endif;

下面的命令以此参数显示系统信息

1
2
3
4
if prop("menu.prop","selected")=="4" then
. .
. .
endif;

因为这是菜单窗口中的第四选项,所以我们在这里==“4”

这是在安装程序中[图片]

现在您已经成功地创建了一个对话框退出安装程序

恭喜你! 您已经创建了安装过程中的所有的基本窗口!
现在我将教你创建先进的安装接头 窗口 在下一篇文章(I.1)

-创建不同类型的子窗口

现在可以创建一个第一个选项菜单选择的显示子窗口安装程序

滚动并找到这些代码:

1
2
3
4
5
##
# Select Type of Install
#

if prop("menu.prop","selected")=="1" then

因为这是第一个选项在菜单窗口中,所以我们在这里==“1”

选择框的子窗口

向下滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
##
# Sub Window 1
#

selectbox(
#-- Title
"TITLE 1",

#-- Sub Title
"SUB TITLE 1",

#-- Icon:
"icons/install",

#-- Will be saved in /tmp/aroma/window1.prop
"window1.prop",

#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#

"Select One", "", 2, #-- Group 1. key = "selected.1"
"OPTION 1", "OPTION 1 DESCRIPTION", 0, #-- selected.1 = 1
"OPTION 2", "OPTION 2 DESCRIPTION", 1 #-- selected.1 = 2

#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#

);

使用的窗口类型选择框的属性,这意味着上述选项中只有一个可以选择

按您的需求以及它们的描述编辑标题,副标题,选项1,选项2

选项2有初始值1这意味着它是默认选中,
(1代表选择,0代表没有选择)

注意:最后一个字符串初始值后没有逗号”,“,它不是一个错误

方法——添加新选项
添加这个——代码:

1
"OPTION 3",         "OPTION 3 DESCRIPTION",                                       0       #-- selected.1 = 3

注意:如果这是你的第三选项,那么在第二选项的初始值后添加”,“

所以在添加新文本编辑器选项就是这个样子

这是在安装程序中[图片]

子窗口1已经成功创建了

现在可以创建子窗口2

向下滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
##
# Sub Window 2
#

selectbox(
#-- Title
"TITLE 2",

#-- Sub Title
"SUB TITLE 2",

#-- Icon:
"@default",

#-- Will be saved in /tmp/aroma/window2.prop
"window2.prop",


#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#


"Select One", "", 2, #-- Group 1. key = "selected.1"
"OPTION 1", "OPTION 1 SUBTITLE", 1, #-- selected.1 = 1
"OPTION 2", "OPTION 2 SUBTITLE", 0, #-- selected.1 = 2
"OPTION 3", "OPTION 3 SUBTITLE", 0, #-- selected.1 = 3
"OPTION 4", "OPTION 4 SUBTITLE", 0 #-- selected.1 = 4

#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#

);

使用的窗口类型选择框的属性,这意味着上述选项中只有一个可以选择

编辑标题、副标题、选择以及它们描述按您的需求

选项1有初始值1这意味着它是默认选中,
(1代表选择,0代表没有选择)

注意:最后一个字符串的初始值后没有逗号”,“,这不是错误

注意:使用相同的方法如上所述创建更多的选择

这是在安装程序中[图片]

  • 注意:如果你想得到一个单独的子窗口,删除整个子窗口2的代码
    注意:如果您想添加一个新的子窗口,再加上面的代码下面列出的,但编辑一些值
    标题、副标题,选项以及它们的描述要按您的需求
    也把”window2.prop”编辑成”window3.prop”
    注意:使用如上所述相同的方法创建更多的选择

子窗口2已经成功创建了

现在我假设您已经成功地学会创建子窗口选择框的属性,再次重新阅读代码,开发出更多的理解。
如果这是你的第一次,它可能需要一些时间来找出事情(理解),但它从不太会难。

——创建复选框的子窗口

现在我们应当学会创建一个基于复选框的子窗口,我们可以选择多个选项

滚动,在aroma-config——找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
##
# Sub Window with CheckBoxes
#

checkbox(
# Title
"TITLE OF CHECKBOX",

# Sub Title
"SUB TITLE OF CHECKBOX HERE",

# Icon
"@update",

# Will be saved in /tmp/aroma/checkbox1.prop
"checkbox1.prop",

#----------------------------------[ Selectbox With Groups ]-----------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-----------------------------------------------------------+---------------#

"AVAILABLE OPTIONS", "", 2, #-- group 1
"I AM A REAL DEV", "IF YOU ARE THE REAL DEVELOPER", 1, #-- item.1.1
"I AM A NOOBS", "IF YOU ARE THE REAL NOOBS", 0, #-- item.1.2
"I AM XDA-DEVELOPERS","IF YOU HAVE AN ACCOUNT IN XDA-DEVELOPERS.COM", 0, #-- item.1.3

"YOUR PROJECTS", "", 2, #-- Group 2
"CUSTOM ROM", "IF YOU MADE A CUSTOM ROM", 1, #-- item.2.1
"CUSTOM TROLL", "IF YOU POST MANY TROLLS IN FORUM", 0 #-- item.2.2

#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);

窗口使用复选框属性的类型,这意味着上述选项中只有一个可以选择

按您的需求和选项的描述编辑标题,副标题,选项值

这里item.1.1 item.2.1有初始值1,这意味着默认选中,
(1代表选择,0代表没有选择)

注意:最后一个字符串的初始值后没有逗号”,“,这不是错误

注意:如果您想创建一个新项,那么添加这个字符串:

1
"CUSTOM TROLL 2",       "IF YOU BLAH BLAH",                                          0       #-- item.2.3

注意,如果这是你在第二组的第三项,那么在item.2.2的初始值之后添加”,“

所以在添加新文本编辑器选项就是这个样子

这是在安装程序中[图片]

注意:如果您不想要子窗口与复选框,删除上面的代码

注意:如果您想要添加一个新的子窗口复选框,再加上面的代码下面列出的,但编辑一些值

标题、副标题,期权以及它们描述按您的需求
也把”checkbox1.prop”编辑成”checkbox2.prop”

注意:使用如上所述相同的方法创建更多的选择

子窗口与复选框已成功创建

现在我假设您已经成功地学会创建子窗口复选框的属性,再次重新阅读代码,开发更多的理解,
如果这是你第一次它可能需要一些时间来找出事情,但它从不会太难。

现在我要教你一些额外的可选的命令

1 -警告框
滚动并找到这段代码:

1
2
3
4
5
##
# Alert Window
#

alert( "Attention", "PLACE YOUR TEXT HERE");

这段代码用于创建额外的弹出警告
按你的愿望编辑文本显示

如果你不想要弹出警告,删除上面的代码

这是在安装程序中[图片]

现在您已经成功地创建了一个弹出警告框

  1. 前安装界面

现在滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Installation UI

ini_set("text_next", "Install Now");
ini_set("icon_next", "@installbutton");

viewbox(
#-- Title
"Ready to Install",

#-- Text
"ROM is ready to be installed.\n\n"+
"Press <b>Install</b> to begin the installation.\n\n"+
"To review or change any of your installation settings, press <b>Back</b>.\n\n"+
"Press Menu -> Quit Installation to quit.",

#-- Icon
"@install"
);

这是创建一个窗口前安装过程开始

如果你不想要前安装窗口,简单地删除上面的代码

这是在安装程序中[图片]

现在您已经成功地学会创建上面的可选的窗口和弹出窗口
这是两个可选的 窗口 经常使用的安装程序,使之更互动

现在滚动并找到下面这段安装界面窗口代码:

1
endif;

记住不要删除”endif;”,这是上面的代码”if prop(“menu.prop”,”selected”)==”1” then”的继续部分。

现在是最后一个,安装程序的重要窗口

滚动,在aroma-config里找到这些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
##
# INSTALLATION PROCESS
#

if prop("menu.prop","selected")== "1"
then

ini_set("text_next", "Next");
ini_set("icon_next", "@next");

install(
"YOUR ROM/Mod NAME™ Installation",
getvar("rom_name") + "\n" +
"Please wait while this ROM blows up your device :P" +
"",
"icons/install"
);

ini_set("text_next", "Finish");
ini_set("icon_next", "@finish");

checkviewbox(
#-- Title
"Installation Completed",

#-- Text
"<#selectbg_g><b>Congrats...</b></#>\n\n"+
"<b>"+ini_get("rom_name")+"</b> has been installed into your device.\n\n",

#-- Icon
"@welcome",

#-- Checkbox Text
"Reboot your device now.",

#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",

#-- Save checked value in variable "reboot_it" (Optional)
"reboot_it"
);
endif;

###
# Check if reboot checkbox was checked

if
getvar("reboot_it")=="1"
then
#
# reboot("onfinish"); - Reboot if anything finished
# reboot("now"); - Reboot Directly
# reboot("disable"); - If you set reboot("onfinish") before, use this command to revert it.
#
reboot("onfinish");
endif;

这是创建一个安装进度和日志的代码的用户界面和现在的启动选项

在上面的代码中编辑”YOUR ROM/Mod NAME™ Installation”这个字符串成你的ROM/MOD的名字。

其他的所有代码很好

这就是安装程序看起来[无图]

现在与Ctrl+S保存文件aroma-config或save按钮

尾声

现在您已经成功地创建了AROMA-CONFIG申请安装程序
这都是关于创建aroma安装程序用户界面……
我已经覆盖了所有的常用命令教程
感谢@amarullz 为美好的aroma安装程序
如果任何疑问/错误张贴在这里
教程为updater-script aroma-config对应
在本教程中我们将学习创建对应aroma配置的更新脚本
如果你读过我所有的aroma-config指南,那么这部分确实很简单。

手动,所以你要做的第一件事就是准备从你的设备论坛的任何第三方ROM/MOD的update-binary

你可以在这个目录找到update-binary -META-INF\com\google\android\
换成定制update-binary,这样你的安装程序不会在安装MOD/rom时报错

1)理解基础知识
现在让我们开始,用notepad++打开位于目录-META-INF\com\google\android\的updater-script文件

滚动并找到这段代码:

1
2
3
if
file_getprop("/tmp/aroma-data/menu.prop","selected") == "1"
then

所以现在你知道为什么”menu.prop”被宣布在aroma-config
== “1”表示我们现在要在menu.prop第一个选项定义子窗口

现在按照mod/rom的名字编辑这个代码:

1
ui_print("-> installing rom/mod name");

滚动并找到这段代码:

1
2
	ui_print("-> mounting system...");
run_program("/sbin/busybox", "mount", "/system");

这是挂载系统的分区,这样您就可以从系统分区添加/删除文件

2). 定义子窗口

现在我们将定义编码aroma-config工作我们创建的子菜单

2.1). 子窗口1

滚动并找到这段代码:

1
2
3
4
5
6
if
file_getprop("/tmp/aroma/window1.prop","selected.1") == "1"
then
ui_print("-> installing option 1...");
package_extract_dir("aroma/window1/option1", "/system");
endif;

按你aroma-config中定义的你ROM/MOD选项字符串编辑ui_print(“-> installing option 1…”);

现在把你的选项1定制应用程序的文件夹添加到aroma\window1\option1\app
如果它是一个框架文件夹,把它添加到aroma\window1\option1\framework目录

现在你(use)已经成功地定义option1窗口1

重复相同的选项2,和3、4 …. 如果您已经创建了它们

现在你可能已经学会了如何为你在aroma-config中创建的子窗口1定义相应的MOD/ROM选项

2.2).对于子窗口2
现在滚动并找到这段代码:

1
2
3
4
5
6
if
file_getprop("/tmp/aroma/window2.prop","selected.1") == "1"
then
ui_print("-> installing option 1...");
package_extract_dir("aroma/window2/option1", "/system");
endif;

在字符串aroma-config中定义并按你们的ROM/MOD选项编辑ui_print(“-> installing option 1…”);

现在把你的选项1定制应用程序的文件夹aroma\window1\option2\app
如果它是一个框架文件夹文件,把它放到aroma\window1\option2\framework文件夹

现在使用option1窗口2定义成功

重复相同的选项2,和3、4 …. 如果您已经创建了它们

现在你可能已经学会了如何为你在aroma-config中创建的MODS/ROM子窗口2定义相应的选项

2.3)复选框的子窗口

滚动并找到这段代码:

1
2
3
4
5
6
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.1") == "1"
then
ui_print("-> installing item 1.1 ");
package_extract_dir("aroma/checkbox1/item-1.1", "/system");
endif;

按你aroma-config中定义的ROM/MOD选项字符串编辑ui_print(“-> installing item 1.1 “);

现在把你的选项item1.1定制应用程序放到aroma\checkbox1\item-1.1\app文件夹
如果它是一个框架文件夹里的文件,把它放到aroma\checkbox1\item-1.1\framework文件夹

现在使用已经成功地定义option1复选框的窗口

为item1.2,1.3,2.1,2.2(和额外的项目,如果您已经创建了)也重复相同的(步骤)
现在你可能已经学会了如何定义相应的项目的插件/ rom aroma-config中创建复选框窗口

3).对ROM开发者来说很重要!
现在如果你已在为一个ROM制作Aroma安装程序,你必须为你的ROM脚本制作符号链接(译者注:原作者写的是”aymlinks”,应该是”symlinks”)和修改权限。
为了这个,打开来自你机型论坛的任何ROM的updater-script并找到单词”symlink”,然后复制关于symlink的所有行到你的updater-script
如果你不能够找到代码,尝试添加这些代码到你的刷机脚本-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
ui_print("-> making symlinks...");
symlink("toolbox", "/system/bin/start");
symlink("toolbox", "/system/bin/lsmod");
symlink("toolbox", "/system/bin/r");
symlink("toolbox", "/system/bin/vmstat");
symlink("toolbox", "/system/bin/ifconfig");
symlink("toolbox", "/system/bin/ionice");
symlink("toolbox", "/system/bin/schedtop");
symlink("toolbox", "/system/bin/wipe");
symlink("toolbox", "/system/bin/reboot1");
symlink("toolbox", "/system/bin/rmdir");
symlink("toolbox", "/system/bin/route");
symlink("toolbox", "/system/bin/chown");
symlink("toolbox", "/system/bin/lsof");
symlink("toolbox", "/system/bin/getevent");
symlink("toolbox", "/system/bin/mkdir");
symlink("toolbox", "/system/bin/netstat");
symlink("toolbox", "/system/bin/renice");
symlink("toolbox", "/system/bin/uptime");
symlink("mksh", "/system/bin/sh");
symlink("toolbox", "/system/bin/smd");
symlink("toolbox", "/system/bin/sync");
symlink("toolbox", "/system/bin/mount");
symlink("toolbox", "/system/bin/printenv");
symlink("toolbox", "/system/bin/top");
symlink("toolbox", "/system/bin/log");
symlink("toolbox", "/system/bin/sendevent");
symlink("toolbox", "/system/bin/ps");
symlink("toolbox", "/system/bin/dmesg");
symlink("toolbox", "/system/bin/umount");
symlink("toolbox", "/system/bin/kill");
symlink("toolbox", "/system/bin/stop");
symlink("toolbox", "/system/bin/newfs_msdos");
symlink("toolbox", "/system/bin/iftop");
symlink("toolbox", "/system/bin/chmod");
symlink("toolbox", "/system/bin/rmmod");
symlink("toolbox", "/system/bin/setconsole");
symlink("toolbox", "/system/bin/mv");
symlink("toolbox", "/system/bin/rm");
symlink("toolbox", "/system/bin/id");
symlink("toolbox", "/system/bin/watchprops");
symlink("toolbox", "/system/bin/hd");
symlink("toolbox", "/system/bin/ctrlaltdel");
symlink("toolbox", "/system/bin/sleep");
symlink("toolbox", "/system/bin/ls");
symlink("toolbox", "/system/bin/cmp");
symlink("toolbox", "/system/bin/insmod");
symlink("toolbox", "/system/bin/nandread");
symlink("toolbox", "/system/bin/date");
symlink("toolbox", "/system/bin/dd");
symlink("toolbox", "/system/bin/getprop");
symlink("toolbox", "/system/bin/cat");
symlink("toolbox", "/system/bin/df");
symlink("toolbox", "/system/bin/touch");
symlink("toolbox", "/system/bin/ioctl");
symlink("toolbox", "/system/bin/setprop");
symlink("toolbox", "/system/bin/notify");
symlink("toolbox", "/system/bin/ln");

ui_print("-> fixing permissions...");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm(0, 3003, 02750, "/system/bin/netcfg");
set_perm(0, 3004, 02755, "/system/bin/ping");
set_perm(0, 2000, 06750, "/system/bin/run-as");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm_recursive(1000, 1000, 0771, 0644, "/data/app");
set_perm_recursive(0 ,0 , 0755, 0755, "/system/etc/init.d");
set_perm(0, 0, 0755, "/system/etc/be_movie");
set_perm(0, 0, 0755, "/system/etc/be_photo");
set_perm(0, 0, 0755, "/system/etc/be_album");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 2000, 0755, "/system/bin/sysinit");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm(0, 0, 04755, "/system/xbin/busybox");
set_perm(0, 0, 06755, "/system/xbin/su");

3). 为rom和MOD用户修复权限

现在滚动并找到这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ui_print("-> fixing permits :p");
package_extract_file("fix_permissions", "/tmp/fix_permissions");
set_perm(0, 0, 0777, "/tmp/fix_permissions");
run_program("/tmp/fix_permissions");
ui_print("-> finished installation...!");
ui_print("-> enjoy...");
ui_print("-> ...");
ui_print("-> done....");

endif;

run_program("/sbin/busybox", "umount", "/system");

show_progress(1, 0);

run_program(“/ tmp /fix_permissions”);用于修复权限

endif;现在这是延续从file_getprop("/tmp/aroma-data/menu.prop","selected") == "1"

命令run_program("/sbin/busybox", "umount", "/system");,是为卸载系统分区安装完成

现在用ctrl+s保存文件更新脚本或保存按钮

现在您已经为安装程序成功地创建了UPDATER-SCRIPT
这是关于创建相应的aroma UPDATER-SCRIPT的全部……
我已经覆盖了所有的常用命令教程
如果任何疑问/错误张贴在这里

附件: 点击下载

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器