標籤:命令列 樣本 nap signed ice roi x509 介紹 gre
本文轉載自:http://zwkufo.blog.163.com/blog/static/2588251201382293049118/
很多時候廠商或者三方提供的ROM並不能滿足需求,比如系統內建軟體陳舊、缺少GMS軟體包(Google Mobile Service,包含了Gmail、GooglePlay等Google自家的常用軟體,很多使用者習慣用Gmail、用ContactsSync,所以通常會對這個服務包有比較強烈的需求),等等。
在這種情況下,一種方法是使用者可以通過破解裝置、加Root許可權的方式去安裝/替換ROM中已有的應用;而另一種方法則是製作一個升級包(Update.zip),在Recovery模式下刷機升級——這種方式被Sony等很多廠商採用,因為它可以在不破解裝置或者加Root許可權的情況下順利升級系統內軟體或者其它資料。當然,這種方式要求用和被升級ROM一致的簽名檔案(Key)給升級包做簽名。 下面以製作GMS升級包為例(我想很多人的目的就是這個吧),介紹製作一個簡單Update.zip的過程:
1)建立一個目錄(例如,名為“update”的檔案夾)裡麵包含需要打包到Update.zip用來升級或者替換原有ROM的內容:
update/ update/system update/system/app update/system/app/xxxx.apk update/META-INF update/META-INF/com update/META-INF/com/google update/META-INF/com/google/android update/META-INF/com/google/android/update-binary update/META-INF/com/google/android/updater-script在GMS包中,我包含了源碼Google提供的很多apk及Maps相關libs: 其中,updater-script是update.zip在釋放安裝時所需要的指令檔;updatebinary是指令檔所需要調用的函數庫,這個檔案可以從ROM中提取,或者從 >>>> 這裡 <<<< 下載使用。
2)編寫updater-script目前廣泛使用的是Edify指令碼(updater-script和update-binary);很久以前還有Amend指令碼(update-script),現在已經不再支援:所以如果有看到名為update-script的指令碼樣本,一般已經沒有用了可以無視。仍然以GMS為例,遞迴地Copy升級包中的檔案到裝置相應的目錄中:
ui_print("***********************************************");ui_print(" GMS for Beta User ");ui_print("***********************************************"); show_progress(1, 3); mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");package_extract_dir("system", "/system");set_perm_recursive(0, 0, 0755, 0644, "/system/app");set_perm_recursive(0, 0, 0755, 0644, "/system/etc/permissions");set_perm_recursive(0, 0, 0755, 0644, "/system/framework");set_perm_recursive(0, 0, 0755, 0644, "/system/lib");set_perm_recursive(0, 0, 0755, 0644, "/system/media");set_perm_recursive(0, 0, 0755, 0644, "/system/usr");unmount("/system"); ui_print("GMS update complated.");上面“/system”的掛載點因裝置而異。關於Edify指令碼文法和函數的介紹,網上有很多資料,有興趣可以再搜尋看看是否能符合你客制化的需求。
3)打壓縮包壓縮包可以用壓縮公用程式,也可以用下面的命令列來做。但是要保證壓縮包內的根目錄下就有META-INF: 如果是Ubuntu一類的Linux環境下用“zip”命令做壓縮包,則需要在步驟(1)的根目錄中使用命令:
$ zip -qry ../update_unsigned.zip ./
4)給壓縮包簽名使用下面的命令為上一步驟中產生的update_unsigned.zip做簽名:
$ java -Xmx512m -jar signapk.jar -w releasekey.x509.pem releasekey.pk8 update.unsigned.zip update.zip
其中:-Xmx512m:指定了java最大記憶體堆棧,我的包比較大512不夠用,設定成4096就成功;signapk.jar:簽名工具,在源碼中可以找到(/prebuilts/sdk/tools/lib/signapk.jar),或者從 >>>> 這裡 <<<< 下載。下載連結中的檔案基於Android4.3提取,不一定是通用的。releasekey.x509.pem releasekey.pk8:這兩個就是現有ROM發布時對應的簽名Key,因裝置/ROM而異。
5)應用update.zip升級包至此,升級包已經製作完畢。將簽過名的update.zip包放入SD卡或者其它能被訪問到的目錄(有些裝置可能要求SD卡根目錄),重啟裝置並進入Recovery模式,找到update.zip並升級(有些裝置可能直接有“apply update.zip”的選項),成功後重啟手機。
Android:製作Update.zip升級包 【轉】