一、linux環境解包打包
環境要求:Ubuntu
此處以system.img和userdata.img打包為例,基於谷歌源碼編譯的工具使用方法和命令。
1.轉換格式
在解包過程中,system或者userdata鏡像文件經常以兩種格式出現:raw和sparse。
一種是raw ext4 image,即經常說的raw image,使用file觀察它:
其特點是完整的ext4分區鏡像(包含很多全零的無效填充區),可以直接使用mount進行掛載,因此比較大。
$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
信息非常明確了。
另一種是sparse ext4 image,即經常說的simg,使用file觀察它:
$ file system.img
system.img: data
如果格式為data,需要從data格式轉成ext4格式,也就是raw格式,如下
> simg2img system.img system.img.ext4 //轉換格式
> mkdir tmp //新建臨時文件夾
> sudo mount -o loop system.img.ext4 tmp 將ext4文件掛載到tmp目錄
2.常規打包:
先ls -l system.img.ext4看大小,假設是1073741824,這個參數后邊用到。(此處l是英文字母L)
> ./make_ext4fs -s -l 2684354560 -a system new_system.img ./tmp
3.安卓5.0以及5.0以上版本打包,需注意:
命令如下:
$ ./make_ext4fs -s -T 1421464178 -S file_contexts -l 1073741824 -a system new_system.img system/
或者:
./make_ext4fs -s -S file_contexts -l 2048M -a system new_system.img system/
命令參數說明:
// -s 表示安靜處理,不輸出動作,可以不帶該參數
// -T 表示Unix時間戳,對system.img中的文件設置修改時間,執行“
date +%s”獲取某個時間點的時間戳,也可以直接不用-T 1421464178 ;
// -S 表示sepolicy 的file_contexts,把該文件放到此目錄下,文件取自官方system/root路徑和卡刷包自帶(或解壓內核,在內核里面)
// -l 表示最大的文件大小(受限於分區大小);可以ls -l 當前轉格式出來的system大小、單位也可以為MB
// -a 表示Android的mount點,比如system、userdata、recovery;
// oksystem.img 表示輸出文件名;
// system/ 表示輸入目錄,該目錄下有framework、app、bin等目錄;
上述的simg2img和make_ext4fs是android自帶的工具,如果有android源碼而且編譯通過的話, 這些工具可以在/out/host/linux-x86/bin中找到。
Linux工具下載:
https://github.com/Loren-Yi/make_ext4fs
二、windows下解包打包
僅列出如下,不一一說明用法,如下:
1.第三方PC客戶端工具
2.第三方批處理腳本工具
3.主流客戶端工具:ROM定制大師,ROM制作工具和蘑菇助手