OTA更新包內部

2021-09-20 00:03:29 字數 4453 閱讀 3160

系統從bootable/recovery/updater中構建updater二進位制程式,並且在ota更新包裡面使用他.

更新包本身是乙個.zip壓縮包檔案(ota_update.zip,incremental_ota_update.zip),壓縮包內包含可執行二進位制程式 meta-inf/com.google/android/update-binary .

updater包含幾個內建函式和用於可擴充套件指令碼語言(edify)的直譯器,可擴充套件指令碼語言支援與更新任務相關的命令.updater從.zip中的 meta-inf/com/google/android/updater-script查詢指令碼.

注意:使用edify指令碼和內建的函式不是命令,但是如果你需要除錯這個更新檔案的話是非常有用的

edify語法

乙個edify指令碼是乙個單一的語句,在指令碼中,所有的值都是字串.空字串在乙個boolean上下文中是false,其他所有的字串都是true.edify支援下面的操作(都是通常的含義)

(expr )

expr + expr # string concatenation, not integer addition

expr == expr

expr != expr

expr && expr

expr || expr

! expr

if expr then expr endif

if expr then expr else expr endif

function_name(expr, expr,...)

expr; expr

任何由a-z,a-z,0-9,_,:,/,.這些字元組成的,凡不是保留字的,都看作是字串.(保留字是if else then endif).字串使用雙引號因起來,下面是如何建立空格和其他不在上面集合中的自負值.\n,\t,\」,和\為轉義字元.

&&和||操作符是和我們平時程式設計的時候一樣的,下面兩個是等價的:

e1 && e2

if e1 then e2 endif

;操作符號是乙個序列點;他的意思是,首先分析左邊的表示式,然後分析右邊的表示式.他的值是右邊表示式的值.分號也用於乙個表示式的後面,像是c語言風格的模擬.

prepare();

do_other_thing("argument");

finish_up();

內建函式

大多數更新功能都被包含在可用的函式中被指令碼執行.(在lisp意義上,嚴格的說這些是巨集而不是函式,他們需要分析所有的引數).除非另有說明,函式返回true表示執行成功,返回false表示執行出錯.如果你想在出錯的時候停止指令碼的執行,使用abort()或者是asset()函式.在updater中可用的函式集合也可以被擴充套件提供裝置特定功能(後面會講到).

getprop(key)

返回系統屬性key的值(如果沒有定義,返回空字串).被recovery分割槽定義的系統屬性值不必和主系統定義的一樣.這個函式在recovery模式中返回值.

greater_than_int(a, b)

如果a比b大的話,返回true

ifelse(cond, e1[, e2])

分析條件,如果條件為真,返回e1的值,如果條件為假,返回e2的值(如果存在的話).」if…else..then..endif」是該函式的乙個語法糖.

is_mounted(mount_point)

如果檔案系統在掛載點被掛載了返回true

is_substring(needle, haystack)

如果needle是haystack的子串的話返回true

less_than_int(a, b)

如果a小於b的話返回true

mount(fs_type, partition_type, name, mount_point)

掛載fs_type在mount_point的檔案系統.partition_type一定是下面的乙個:

package_extract_dir(package_dir, dest_dir)

從package_dir下提取所有的檔案,並且將他們寫到相應的dest_dir下面.任何存在的檔案都要被重寫.

package_extract_file(package_file[, dest_file])

從更新包中提取乙個單一的package_file,並且將他們寫入到dest_file中,如果必要的話,重寫存在的檔案.如果沒有dest_dir引數的話,將包檔案的內容作為二進位制塊返回.

read_file(filename)

讀取檔案並且返回他的內容作為乙個二進位制塊.

rename(src_filename, tgt_filename)

run_program(path[, arg, ...])

在path中,通過傳遞args執行二進位制程式.返回程式的退出狀態.

set_metadata(filename, key1, value1[, key2 , value2, ...])

給給定的檔名稱的鍵賦值.舉個例子:

set_metadata("/system/bin/netcfg", "uid", 0, "gid", 3003, "mode", 02750, "selabel", "u:object_r:system_file:s0", "capabilities", 0x0).

set_metadata_recursive(dirname, key1, value1[, key2, value2, ...])

遞迴設定給定目錄和他的子檔案的鍵和值.舉個例子:

set_metadata_recursive("/system", "uid", 0, "gid", 0, "fmode", 0644, "dmode", 0755, "selabel", "u:object_r:system_file:s0", "capabilities", 0x0)

set_progress(frac)

在由show_progress()呼叫建立的塊中設定進度條的位置.frac必須在[0.0,1.0]區間內.進度條不會後退.嘗試這樣的做法被忽略了.

sha1_check(blob[, sha1])

blob引數是有read_file()返回的型別的塊或者是package_extract_file()的乙個引數形式.如果沒有sha1引數,該函式返回塊的sha1雜湊.如果存在乙個或多個sha1引數,如果sha1和乙個引數相等的話,返回sha1雜湊,如果沒有相等的,則返回空字串.

show_progress(frac, secs)

推進進度條在sec秒中到達frac長度.secs可能為0,在這種情況下,進度條不會被自動推進.

sleep(secs)

睡眠secs秒(必須是整數)

stdout(expr[, expr, ...])

分析每乙個表示式並且將他的值轉儲到stdout.在除錯的時候有用.

symlink(target[, source, ...])

建立所有原始碼為鏈結到目標中.

tune2fs(device[, arg, …])

在裝置上調整可調引數args

ui_print([text, ...])

連線所有的文字引數並且將結果列印到ui中(如果使用者轉換到文字顯示的話結果就是可視的)

unmount(mount_point)

解除安裝在掛載點掛載的檔案系統

wipe_block_device(block_dev, len)

清楚給定塊裝置block_dev的len位的資料.

wipe_cache()

在成功安裝之後,清空cache分割槽

write_raw_image(filename_or_blob, partition)

在filename_or_blob中把映象寫入到mtd分割槽中. filename_or_blob可以是乙個字串名稱是本地檔案或者是乙個包含資料的塊值引數.為了能夠從ota包中複製乙個檔案到分割槽中,使用:

write_raw_image(package_extract_file("zip_filename"), "partition_name")

注意:之前android 4.1,僅僅接收檔名稱,所以,為了能夠完成這個工作,資料需要首先去解壓縮到乙個臨時本地檔案中.

OTA更新包內部

系統從bootable recovery updater中構建updater二進位制程式,並且在ota更新包裡面使用他 更新包本身是乙個.zip壓縮包檔案 ota update.zip,incremental ota update.zip 壓縮包內包含可執行二進位制程式 meta inf com.g...

npm 發布 更新包

更新版本號 包的版本號可表示為x.y.z,分別對應 major minor 和 patch。所以,更新版本號可使用 npm version major npm version minor npm version patch發布 npm publish註冊或者登入 npm 賬號 可在npm官網註冊,或...

python如何更新包

python如何更新包 python安裝新包,pip是很好用的安裝工具。pip list 可以查詢所有已安裝的包和版本。怎麼知道本地安裝包的版本是否有可以更新的新版本呢?通過pip list函式可以實現。具體實現方式如下 pip list outdated format legacy pip lis...