- NotePad++(網路自行搜索)
- Winrar(網路自行搜索)
- Recovery(CWM)
- 會 updater-script 刷機指令
- 除錯時要很有耐心
- 教學包Aroma Guide.zip (3.07 MB, 下載次數: 149)
2013-10-26 14:05 上傳點擊文件名下載附件
閱讀權限: 10
二、Aroma架構
架構.png (29.81 KB, 下載次數: 3)
2013-10-20 20:59 上傳
三、Aroma如何運作
運作.png (43.9 KB, 下載次數: 4)
2013-10-25 19:25 上傳
四、開始製作Aroma腳本(aroma-config)
1.環境配置(已完成,不需修改)
theme("i1");
ini_set("force_colorspace","rgba");
loadlang("langs/tw.lang");
fontresload( "0", "ttf/DroidSansFallback.ttf;ttf/Roboto-Regular.ttf", "12" );
fontresload( "1", "ttf/DroidSansFallback.ttf;ttf/Roboto-Regular.ttf", "18" );
2.設定螢幕解析度
# ini_set("dp","1"); #-- LDPI ( 240x320 / QVGA )
# ini_set("dp","2"); #-- MDPI ( 340x480 / HVGA )
# ini_set("dp","3"); #-- HDPI ( 480x800 / WVGA )
# ini_set("dp","4"); #-- XHDPI ( 1280x720 / WVGA )
# ini_set("dp","5"); #-- XXHDPI ( 1920x1080 / WVGA )
如果解析度是 1280x720 就刪掉那向前面的"#",變成...
# ini_set("dp","1"); #-- LDPI ( 240x320 / QVGA )
# ini_set("dp","2"); #-- MDPI ( 340x480 / HVGA )
# ini_set("dp","3"); #-- HDPI ( 480x800 / WVGA )
ini_set("dp","4"); #-- XHDPI ( 1280x720 / WVGA )
# ini_set("dp","5"); #-- XXHDPI ( 1920x1080 / WVGA )
其他解析度以此類推
3.輸入ROM相關訊息
請自行修改中文字的部分(注意別刪到符號)
ini_set("rom_name", "ROM名稱 ");
ini_set("rom_version", "ROM版本");
ini_set("rom_author", "作者");
ini_set("rom_device", "機型");
ini_set("rom_date", "日期");
4.起始圖片
圖片檔案在資源目錄中的"SPLASH.png",可自行替換圖片
腳本中的5000代表5秒,以此類推
splash(5000,"SPLASH");
5.條約許可
中文部分可依圖修改,不修改也可,檔案在資源目錄中的"license.txt",請自行編輯
"@license"是圖標指令
agreebox(
"免責聲明", "請詳細閱讀以下聲明",
"@license", resread("license.txt"),
"我接受風險", "你必須接受才能安裝" );
1-1.png (149.28 KB, 下載次數: 5)
2013-10-20 21:20 上傳
1-2.png (220.07 KB, 下載次數: 4)
2013-10-20 21:20 上傳
6-1.主目錄
注意紅色部分的逗號,因為"@install"為選項中最後的字串,所以不需要加逗號,
逗號的部分容易犯錯且最常遇到,需多加注意
綠色部分的字請照1,2,3......不可跳號(幫助理解用)
PS."@xxxx"是圖標指令
一般來說,這邊指令已經完成,只要依圖改中文字就好,不需要再做其他修改
menubox(
"主目錄標題", "主目錄標題說明", "@apps", "menu.prop",
##目錄選項如下##
"安裝ROM", "安裝ROM描述", "@install", #-- selected = 1
"更新日誌", "顯示此版更新內容", "@agreement", #-- selected = 2
"結束安裝", "離開安裝程式", "@install" #-- selected = 3
);
3-1.png (71.58 KB, 下載次數: 3)
2013-10-20 21:20 上傳
6-2.更新日誌
這邊不須修改,檔案在資源目錄中的"changelog.txt",請自行編輯
if prop("menu.prop","selected")=="2" then
textdialog( "ROM更新日誌", resread("changelog.txt"), "Close" );
back("1");
endif;
3-2.png (159.63 KB, 下載次數: 3)
2013-10-20 21:20 上傳
6-3.離開安裝
這邊不須修改
if prop("menu.prop","selected")=="3" then
if
confirm( "離開安裝程式", "您確定要離開?", "@alert" )=="yes"
then
exit("");
endif;
endif;
3-3.png (137.94 KB, 下載次數: 2)
2013-10-20 21:20 上傳
7-1.開始客製化界面
如果選擇主目錄中的第一項,則開始自訂義刷機(不了解也沒關係,複製上去就好不用修改)
if prop("menu.prop","selected")=="1" then
7-2.圈選項目表
圈選項目是用來"只能擇一項"時使用,ex.型號.....(不能同時選兩種)
從這邊開始會比較複雜,請保持耐心
"window1.prop"是暫存檔(文章一開始提到的運作方式)
紅色部分的
0代表預設不選,1代表預設選擇,2代表一個群組
還是不了解? 搭配圖來看應該就能理解了吧
然後又遇到紅色部分的逗號問題,因為這裡全部的最後一項是"2-3",所以0後面不加逗號
再來是綠色的部分,請依照腳本中的規律添加或刪減選項(幫助理解用)
selectbox(
"圈選項目標題", "圈選項目說明",
"@default", "window1.prop",
##圈選選項如下##
"群組1", "", 2, #-- group.1
"選項1-1", "選項1-1描述", 0, #-- selected.1 = 1
"選項1-2", "選項1-2描述", 1, #-- selected.1 = 2
"選項1-3", "選項1-3描述", 0, #-- selected.1 = 3
"群組2", "", 2, #-- group.2
"選項2-1", "選項2-1描述", 1, #-- selected.2 = 1
"選項2-2", "選項2-2描述", 0, #-- selected.2 = 2
"選項2-3", "選項2-3描述", 0 #-- selected.2 = 3
);
可以只保留一個群組,但是要注意逗號的問題
如果想要兩頁圈選項目,直接複製全部並把window1.prop改成window2.prop
(建議先把基礎學完再添加)
4.png (92.02 KB, 下載次數: 4)
1
2013-10-20 21:20 上傳
7-3.勾選項目表
勾選項目是用來選擇"是否"安裝
至於腳本的指令及注意事項就跟7-2的圈選項目幾乎一樣,就不多做說明
checkbox(
"勾選項目標題", "勾選項目說明",
"@update", "checkbox1.prop",
##圈選選項如下##
"群組1", "", 2, #-- group.1
"勾選1-1", "勾選1-1描述", 0, #-- item.1.1
"勾選1-2", "勾選1-2描述", 1, #-- item.1.2
"勾選1-3", "勾選1-3描述", 0, #-- item.1.3
"勾選1-4", "勾選1-4描述", 0, #-- item.1.4
"群組2", "", 2, #-- group.2
"勾選2-1", "勾選2-1描述", 0, #-- item.2.1
"勾選2-2", "勾選2-2描述", 1, #-- item.2.2
"勾選2-3", "勾選3-3描述", 0 #-- item.2.3
);
5.png (95.17 KB, 下載次數: 4)
2
2013-10-20 21:20 上傳
8.確認安裝介面
這邊已經完成,不需要修改
ini_set("text_next", "安裝");
ini_set("icon_next", "@installbutton");
viewbox(
"確認安裝",
"已經準備好安裝ROM"+
"開始請按 <b>安裝</b>"+
"若要修改請按 <b>返回</b>."+
"", "@install"
);
6.png (72.08 KB, 下載次數: 2)
2013-10-20 21:20 上傳
9.安裝程序介面
這邊已經完成,不需要修改
if prop("menu.prop","selected")== "1" then
ini_set("text_next", "下一步");
ini_set("icon_next", "@next");
install(
"安裝程序",
getvar("rom_name") + "
" +
"安裝中請等待" +
"",
"icons/install"
);
7.png (79.6 KB, 下載次數: 3)
2013-10-20 21:20 上傳
10.安裝結束介面
這邊已經完成,不需要修改
紅色的1代表預設勾選,也可以把它改成0(預設不選)
ini_set("text_next", "安裝完成!");
ini_set("icon_next", "@finish");
checkviewbox(
"安裝完成!",
"<#selectbg_g><b>恭喜你</b></#>
"+
"<b>"+ini_get("rom_name")+"</b>已經成功安裝
",
"@welcome", "重新啟動手機",
"1", "reboot_it"
);
endif;
8.png (70.41 KB, 下載次數: 4)
2013-10-20 21:20 上傳
11.重新啟動
此處完全不需修改!
if
getvar("reboot_it")=="1"
then
reboot("onfinish");
endif;
endif; #這個"endif"是對應到7-1開頭的"if",別漏掉他喔
aroma-config 到這邊大致上已完成,接下來是讓 updater-script 讀取 Aroma 產生出來的暫存檔
五、製作CWM腳本(updater-script)
CWM腳本的部分其實不難,只要理解並掌握訣竅,就能輕鬆學會。
以7-2的圈選項目表為例,先看看已完成的Aroma腳本的"綠色部分"
selectbox(
"圈選項目標題", "圈選項目說明",
"@default", "window1.prop",
"群組1", "", 2, #-- group.1
"選項1-1", "選項1-1描述", 0, #-- selected.1 = 1
"選項1-2", "選項1-2描述", 1, #-- selected.1 = 2
"選項1-3", "選項1-3描述", 0, #-- selected.1 = 3
"群組2", "", 2, #-- group.2
"選項2-1", "選項2-1描述", 1, #-- selected.2 = 1
"選項2-2", "選項2-2描述", 0, #-- selected.2 = 2
"選項2-3", "選項2-3描述", 0 #-- selected.2 = 3
);
4.png (92.02 KB, 下載次數: 3)
2
2013-10-22 20:58 上傳
然後圖中我選擇了"群組一的選項1-2"、"群組2的選項2-1"
則Aroma所產生出來的暫存檔案為"window1.prop",內容如下
selected.1=2
selected.2=1
看到這裡就能發現,我如果選擇某一項,後面綠色部分的selected.?=?就會存到暫存檔中
再舉例,如果我選擇了"群組一的選項1-3"、"群組2的選項2-2"
則暫存檔案"window1.prop",內容如下
selected.1=3
selected.2=2
成功產生暫存檔之後,接下來就要利用"if"的指令讓CWM的"updater-script"辨識
若暫存檔案"window1.prop"內容為
selected.1=2
selected.2=1
則利用以下腳本去讀取window1.prop中selected.1的值、辨識並決定是否要解壓縮(依文字顏色對應步驟)
ui_print("@--群組1");
if
file_getprop("/tmp/aroma/window1.prop","selected.1")== "1"
then
ui_print(" Option 1-1");
package_extract_dir("AROMA/option1-1", "/");
endif;
if
file_getprop("/tmp/aroma/window1.prop","selected.1") == "2"
then
ui_print(" Option 1-2");
package_extract_dir("AROMA/option1-2", "/");
endif;
if
file_getprop("/tmp/aroma/window1.prop","selected.1") == "3"
then
ui_print(" Option 1-3");
package_extract_dir("AROMA/option1-3", "/");
endif;
再來是selected.2
ui_print("@--群組2");
if
file_getprop("/tmp/aroma/window1.prop","selected.2") == "1"
then
ui_print(" Option 2-1");
package_extract_dir("AROMA/option2-1", "/");
endif;
if
file_getprop("/tmp/aroma/window1.prop","selected.2") == "2"
then
ui_print(" Option 2-2");
package_extract_dir("AROMA/option2-2", "/");
endif;
if
file_getprop("/tmp/aroma/window1.prop","selected.2") == "3"
then
ui_print(" Option 2-3");
package_extract_dir("AROMA/option2-3", "/");
endif;
接下來以7-3的勾選項目表為例,Aroma腳本為
checkbox(
"勾選項目標題", "勾選項目說明",
"@update", "checkbox1.prop",
"群組1", "", 2,
"勾選1-1", "勾選1-1描述", 0, #-- item.1.1
"勾選1-2", "勾選1-2描述", 1, #-- item.1.2
"勾選1-3", "勾選1-3描述", 0, #-- item.1.3
"勾選1-4", "勾選1-4描述", 0, #-- item.1.4
"群組2", "", 2,
"勾選2-1", "勾選2-1描述", 0, #-- item.2.1
"勾選2-2", "勾選2-2描述", 1, #-- item.2.2
"勾選2-3", "勾選3-3描述", 0 #-- item.2.3
);
5.png (95.17 KB, 下載次數: 3)
2
2013-10-22 20:58 上傳
圖中勾選了1-2和2-2,則暫存檔"checkbox1.prop"的內容為
item.1.2=1
item.2.2=1
也是利用以下腳本去讀取checkbox1.prop中item?.?的值、辨識並決定是否要解壓縮(依文字顏色對應步驟)
ui_print("@勾選項目");
ui_print(" ");
ui_print("@--群組一");
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.1") == "1"
then
ui_print(" Check 1-1");
package_extract_dir("AROMA/check1-1", "/");
endif;
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.2") == "1"
then
ui_print(" Check 1-2");
package_extract_dir("AROMA/check1-2", "/");
endif;
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.3") == "1"
then
ui_print(" Check 1-3");
package_extract_dir("AROMA/check1-3", "/");
endif;
if
file_getprop("/tmp/aroma/checkbox1.prop","item.1.4") == "1"
then
ui_print(" Check 1-4");
package_extract_dir("AROMA/check1-4", "/");
endif;
ui_print("@--群組二");
if
file_getprop("/tmp/aroma/checkbox1.prop","item.2.1") == "1"
then
ui_print(" Check 2-1");
package_extract_dir("AROMA/check1-1", "/");
endif;
if
file_getprop("/tmp/aroma/checkbox1.prop","item.2.2") == "1"
then
ui_print(" Check 2-2");
package_extract_dir("AROMA/check1-2", "/");
endif;
if
file_getprop("/tmp/aroma/checkbox1.prop","item.2.3") == "1"
then
ui_print(" Check 2-3");
package_extract_dir("AROMA/check1-3", "/");
endif;
CWM腳本(updater-script)的創建也已完成,接下來就製作成刷包,享受成就感吧~
六、如何除錯
剛開始製作腳本難免會有一些小錯誤,如果刷入AROMA失敗,
會顯示一些除錯的訊息(line ??? col ???)←第幾行第幾個字"附近",也有可能是在上一行
這時便開啟NotePad++,依照訊息去修正錯誤,這邊提醒一下常見的錯誤有
1.逗號問題","(最常遇到)
2.少了分號";"
3.忘了加"endif"
4.無法顯示中文(請儲存為UTF-8)
5.(想到再新增)
七、總結
看著這文章那麼長感覺AROMA很難吧,其實筆者已經做好大部分的腳本,需要修改的部分只有
Aroma(aroma-config)
2.設定螢幕解析度
3.輸入ROM相關訊息
7-2.圈選項目
7-3.勾選項目
外加 changelog.txt 和 license.txt
CWM(updater-script)
其實只要掌握 if 和 file_getprop 的用法就可以囉!
如果你覺得這篇教學文有幫助到你,請在下面幫我評分喔,也可以提出疑問,筆者會盡量解答
作者: andy881005 時間: 2013-10-25 21:10
終於出來了啊~
排版很好看唷~很舒服~
來幫你找錯誤(喂!
真想加到我的rom內
之前有研究過
但是只成功過一次QQ
作者: frank850219 時間: 2013-10-25 21:20
整個就很讚喔~~
想當初自己一個一個摸索還是有些地方不知道怎麼改
看完就整個明白了~~
作者: kk69873 時間: 2013-10-27 20:12
本帖最後由 kk69873 於 2013-10-27 20:23 編輯
aroma腳本
中文utf-8編碼,要用什麼字體檔?
已解決~ 要使用Droid Sans Fallback
作者: 軟糖寶寶 時間: 2013-11-2 07:04
本帖最後由 軟糖寶寶 於 2013-11-2 07:05 編輯
請問一下我是下載你分享的服務包在SD卡
然後用手機使用RE管理器從SD卡移動到手機裡面
我是只移動圖片上那四個檔案再用讀三寫一
接著手機就死了就是開機的時候停在開機畫面
請問一下我該怎麼辦呢?
作者: Said 時間: 2013-12-29 15:26
這篇教學專業的,排版工整!
另外請教z大知道原先Edify語法裡
assert(getprop("ro.product.device") == "xxx")
這樣的語法要如何改寫到AROMA裡,除了用file_getprop()抓之外,有更好的寫法嗎
作者: yicha999 時間: 2014-7-31 01:38
排版很好看唷~很舒服~
作者: 泪隔 時間: 2014-8-9 04:49
不錯哦,學習了
作者: langlang99 時間: 2015-2-20 09:50
这个教程很好,值得学习。
作者: langlang99 時間: 2015-2-20 09:50
貌似不太懂得
作者: guoqudeni 時間: 2016-2-29 16:00
感谢分享
歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1