綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] ROM定制之Edify語法簡介(Updater-Script) _詳細說明

[複製連結] 查看: 6421|回覆: 5|好評: 2
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2012-3-4 14:32

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
這是Android系統來執行updater-scripts的Edify語言的基本介紹。
大部分的Edify命名都是函數,當調用這些函數結束的時候,會返回數據給腳本。當然,你也可以使用這些函數的返回值來確認成功與否,例如:
ifelse(mount("yaffs2", "MTD", "system", "/system") == "system", ui_print("Successfully Mounted!"), ui_print("Mount Failed!");

這個命令會嘗試去掛載命名為「system」的「MTD」分區到「/system」。如果掛載成功,腳本會顯示「Successfully Mounted!」,否則會顯示「Mount Failed!」。

現面是用在Edify的Updater-script中的函數例子:

函數名稱: mount
函數語法: mount(fs_type, partition_type, location, mount_point)
參數詳解: fs_type-----------------"yaffs2" 或 "ext4"
partition_type----------"MTD" 或 "EMMC"
location-----------------分區(partition) 或 驅動器(device)
mount_poin------------掛載文件系統的目標文件夾(target folder to mount FS)
作用解釋: 掛載一個文件系統到指定的掛載點
返回值: 掛載成功則返回掛載點,失敗返回null
函數示例: mount("MTD", "system", "/system");掛載system分區,設定返回指針"/system」
mount("vfat", "/dev/block/mmcblk1p2", "/system"); 掛載/dev/block/mmcblk1p2,返回指針"/system」

函數名稱: is_mounted
函數語法: is_mounted(mount_point)
參數詳解: mount_point-----------字符串,檢查是否已經掛載的掛載點
作用解釋: 檢查文件系統是否掛載
返回值: 掛載成功則返回掛載點,失敗返回null
函數示例:

函數名稱: unmount
函數語法: unmount(mount_point)
參數詳解: mount_point-----------字符串,要解除掛載的掛載點
作用解釋: 解除文件系統掛載
返回值: 解除掛載成功則返回掛載點,失敗返回null
函數示例: unmount("/system"); 卸載/system分區

函數名稱: format
函數語法: format(fs_type, partition_type, location)
參數詳解: fs_type-----------------字符串,數據為"yaffs2" 或 "ext4"
partition_type----------字符串, "MTD" 或 "EMMC"
location-----------------字符串, 分區(partition) 或 驅動器(device)
作用解釋: 格式化為指定的文件系統
函數示例: format("MTD", "system");格式化system分區

函數名稱: delete
函數語法: delete(file1, file2, ..., fileN)
參數詳解: 字符串,要刪除的文件
作用解釋: 刪除一個文件。最少指定一個文件;多個文件可以做為多個參數指定
函數示例: delete("/data/zipalign.log");刪除文件/data/zipalign.log

函數名稱: delete_recursive
函數語法: delete_recursive(dir1, dir2,...,dirN)
參數詳解: 字符串,要遞歸刪除的目錄
作用解釋: 刪除文件夾及其包含的所有內容。最少指定1個目錄;多個目錄可以做為多個參數指定
函數示例: delete_recursive("/data/dalvik-cache");刪除文件夾/data/dalvik-cache

函數名稱: show_progress
函數語法: show_progress(frac, sec)
參數詳解: frac----------------------進度完成數值
Sec----------------------總秒數
作用解釋: 顯示在Recovery系統中進度
函數示例: show_progress(0.1, 10);show_progress下面的操作可能進行10s,完成後進度條前進0.1(也就是10%)

函數名稱: set_progress
函數語法: set_prograss(frac)
參數詳解: frac---------------------進度數值
函數示例:

函數名稱: package_extract_dir
函數語法: package_extract_dir(package_path, destination_path)
參數詳解: package_path----------字符串,升級包內要提取的目錄
destination_path--------字符串,提取文件的目標目錄
作用解釋: 提取升級包內目錄中的所有文件到指定的目標目錄
函數示例: package_extract_dir("system", "/system");釋放ROM包裡system文件夾下所有文件和子文件夾至/system

函數名稱: package_extract_file
函數語法: package_extract_file(package_path) 或 package_extract_file(package_path, destination_path)
參數詳解: package_path----------字符串,升級包內要提取的文件
destination_path-------字符串,提取文件的目標目錄
作用解釋: 提取升級包內的單個文件到指定的目標目錄
函數示例: package_extract_file("my.zip", "/system");解壓ROM包裡的my.zip文件至/system

函數名稱: file_getprop
函數語法: file_getprop(file, key)
參數詳解: file----------------------字符串,要檢查的文件名
Key----------------------字符串,返回數據中的文件的鍵名字
作用解釋: 在格式"key"="value"的文件中取得文件屬性值
函數示例:

函數名稱: symlink
函數語法: symlink(target, src1, src2, ..., srcN)
參數詳解: target-------------------字符串,符號鏈接的目標
srcX       ---------------------字符串,要創建的符號鏈接的目標點
作用解釋: 在創建新的符號鏈接之前,要斷開已經存在的符號鏈接
函數示例: symlink("toolbox", "/system/bin/ps");建立指向toolbox的符號鏈接/system/bin/ps

函數名稱: set_perm
函數語法: set_perm(uid, gid, mode, file1, file2, ..., fileN)
參數詳解: uid----------------------用戶ID(user id)
Gid----------------------用戶組ID(group id)
Mode--------------------權限模式(permission mode)
fileX---------------------要設定許可的文件(file to set permission on)
作用解釋: 設定單個文件或一系列文件的權限,最少指定1個文件,前4個參數是必須的
函數示例: set_perm(0,2000,0550, "system/etc/init.goldfish.sh");設定手機system中的etc/init.goldfish.sh的用戶為root,用戶組為shell,所有者以及所屬用戶組成員可以進行讀取和執行操作,其他用戶無操作權限)
這裡0代表用戶為root
2000代表用戶組為shell
我們來說明0550這組數據,這組數據的最後三位550,分別代表「所有者\組用戶\其他用戶」的權限,也就是我們在RE管理中「用戶\群組\其他」三行。 我們以XXX來表示這三組權限,其中:
×=4 讀的權限
×=2 寫的權限
×=1 執行的權限
我們必須首先瞭解用數字表示的屬性的含義:0表示沒有權限,1表示可執行權限,2表示可寫權限,4表示可讀權限,然後將其相加。所以數字屬性的格式應為3個從0到7的八進制數。
例如,如果想讓某個文件的屬主有"讀/寫"二種權限,需要把4(可讀)+2(可寫)=6(讀/寫)。若要rwx屬性則4+2+1=7;若要rw-屬性則4+2=6;若要r-x屬性則4+1=5。
常用修改權限的命令:
Set_perm 0 0 0600 ××× (只有所有者有讀和寫的權限)
Set_perm 0 0 0644 ××× (所有者有讀和寫的權限,組用戶只有讀的權限)
Set_perm 0 0 0700 ××× (只有所有者有讀和寫以及執行的權限)
Set_perm 0 0 0666 ××× (每個人都有讀和寫的權限)
Set_perm 0 0 0777 ××× (每個人都有讀和寫以及執行的權限)

函數名稱: set_perm_recursive
函數語法: set_perm_recursive(uid, gid, dirmode, filemode, dir1, dir2, ...dirN)
參數詳解: uid----------------------用戶ID(user id)
Gid----------------------用戶組ID(group id)
Dirmode----------------指定目錄內的目錄的權限
Filemode---------------指定目錄內的文件的權限
dirX---------------------要設定權限的目標
作用解釋: 設定單個目錄或一系列目錄的裡面的所有文件的權限,最少指定1個目錄,5個參數都是必須的
函數示例: set_perm_recursive 0 0 0755 0644 SYSTEM:app;設定手機system/app文件夾及其中文件的用戶為root,用戶組為root,app文件夾權限為所有者可以進行讀、寫、執行操作,其他用戶可以進行讀取和執行操作,其中的文件的權限為所有者可以進行讀寫操作,其他用戶可以進行讀取操作

函數名稱: getprop
函數語法: getprop(key)
參數詳解: key---------------------字符串,想要系統返回的屬性
作用解釋: 這個函數是用來返指定的屬性的值。它是用來從build.props文件中查詢手機的訊息的。
函數示例:

函數名稱: write_raw_image
函數語法: write_raw_image(file, partition)
參數詳解: file----------------------字符串,要讀取的Img源文件
Partition-----------------字符串,要寫入Img文件的目標分區
作用解釋: 這個函數是用來寫Img文件到分區
函數示例: write_raw_image("/tmp/boot.img", "boot")將yaffs2格式的boot包直接寫入boot分區

函數名稱: apply_patch
函數語法: apply_patch(srcfile, tgtfile, tgtsha1, tgtsize, sha1_1, patch_1, ..., sha1_x, patch1_x)
參數詳解: srcfile-------------------字符串,要打補丁的源文件(要讀入的文件)
Tgtfile-------------------字符串,補丁文件要寫入的目標文件
tgtsha1-----------------字符串,寫入補丁文件的目標文件的sha1哈希值
sha1_x------------------字符串,要寫入目標文件的補丁數據的sha1哈希值
patch1_x----------------字符串,實際上應用到目標文件的補丁
作用解釋: 這個函數是用來打補丁到文件。
函數示例:

函數名稱: apply_patch_check
函數語法: apply_patch_check(file, sha1_1, ..., sha1_x)
參數詳解: file----------------------字符串,要檢查的文件
sha1_x------------------要檢查的哈希值
作用解釋: 檢查文件是否已經被打補丁,或者能不能被打補丁。需要檢查「applypatch_check 」函數調用的源代碼。
函數示例:

函數名稱: apply_patch_space
函數語法: apply_patch_space(bytes)
參數詳解: bytes-------------------檢查的字節的數字
作用解釋: 檢查緩存來確定是否有足夠的空間來寫入補丁文件並返回一些數據。
函數示例:

函數名稱: read_file
函數語法: read_file(filename)
參數詳解: filename----------------字符串,要讀取內容的文件名
作用解釋: 這個函數返回文件的內容
函數示例:

函數名稱: sha1_check
函數語法: sha1_check(data) 或 sha1_check(data, sha1_hex, ..., sha1_hexN)
參數詳解: data---------------------要計算sha1哈希值的文件的內容-必須是只讀文件格式
sha1_hexN--------------文件數據要匹配的特定的十六進制sha1_hex哈希值字符串
作用解釋: 如果只指定data參數,這個函數返回data參數的十六進制sha1_hex哈希值字符串。其他參數用來確認你檢查的文件是不是列表中的哈希值的一個。 它返回匹配的哈希值,或者在沒有匹配任何哈希值時返回空。
函數示例:

函數名稱: ui_print
函數語法: ui_print(msg1, ..., msgN)
參數詳解: msg----------------------字符串,要處理過程中輸出給用戶的訊息
作用解釋: 在腳本執行的時候,在控制台顯示的訊息。最少要指定1個參數,你可以指定額外的msg參數,並且它們會連接起來輸了
函數示例: ui_print("It's ready!");螢幕打印It's ready!

函數名稱: run_program
函數語法: run_program(prog, arg1, .., argN)
參數詳解: prog--------------------字符串,要執行的程式
argN--------------------字符串,要執行的程式的執行參數
作用解釋: 以指定的參執行程式
函數示例: run_program("/system/xbin/installbusybox.sh");執行installbusybox.sh腳本文件

函數名稱: ifelse
函數語法: ifelse(condition, truecondition, falsecondition)
參數詳解: condition----------------要運算的表達式
Truecondition-----------當值為True時執行的 Edify腳本塊
Falsecodnition-----------當值為False時執行的 Edify腳本塊
作用解釋: 這是If-then結構的 Edify腳本語言。在真條件或非條件下語句可以是單條Edify命令或者腳本塊。腳本塊可以用圓括號來界定,用分號來隔開。
函數示例:

函數名稱: abort
函數語法: abort()
參數詳解: 沒有參數
作用解釋: 中止腳本執行
函數示例:

函數名稱: assert
函數語法: assert(condition)
參數詳解: condition---------------boolean
作用解釋: 如果condition參數的計算結果為False,則停止腳本執行,否則繼續執行腳本
函數示例: assert(package_extract_file("boot.img","/tmp/boot.img"),write_raw_image("/tmp/boot.img","boot"),delete("/tmp/boot.img"))
執行package_extract_file,如果不返回錯誤則執行write_raw_image,如果write_raw_image不出錯則執行delete
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 6碎鑽 +2 幫助 +6 收起 理由
apkcat + 1 + 1 很給力!
yamz71622 + 1 + 1 讚一個!
faba + 1
hwc1029 + 1 偶像,看完你的內容,讓我找到了活著的意義.
wshmllii + 1 偶像,看完你的內容,讓我找到了活著的意義.
pilgrim851 + 1

查看全部評分

收藏收藏15 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
pilgrim851 | 收聽TA | 只看該作者
發表於 2012-4-2 04:55
想要做卡刷更新包一定要學的...讚一個
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
wshmllii | 收聽TA | 只看該作者
發表於 2012-4-19 12:11
用心分類~細心編文
感謝樓主無私的奉獻與分享~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
chuiwenchiu | 收聽TA | 只看該作者
發表於 2012-5-3 00:04

用心分類~細心編文
感謝樓主無私的奉獻與分享~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
ngcfung | 收聽TA | 只看該作者
發表於 2012-6-10 18:30
感謝大大的分享
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
copymantw | 收聽TA | 只看該作者
發表於 2013-1-26 07:33
已經到了程式這關了,這一趟學習之旅,快要功德圓滿。謝謝分享!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則