Android系統(tǒng)system.img解包和重新打包
01 前言
最近需要對(duì)客戶提供的安卓系統(tǒng)進(jìn)行定制化開(kāi)發(fā),需要對(duì)system.img進(jìn)行解包,修改系統(tǒng)屬性和添加自己的APK,再打包燒錄,整理倆個(gè)方法分享記錄下。
02 方法一
1、把system.img轉(zhuǎn)換成ext4格式
./simg2img system.img system_ext4.img
2、掛載ext4到systemMount目錄進(jìn)行修改
sudo mount system_ext4.img systemMount/ -o loop
3、修改完成后 unmount 退出掛載使用如下命令
./img2simg system_ext4.img system_out.img
此方法生成的system_out.img 可以通過(guò)fastboot燒錄并正常使用。但是使用廠家提供的工具無(wú)法正常燒錄(原因不詳)于是又找到了第二種方法。
03 方法二
前倆步相同
1、把system.img轉(zhuǎn)換成ext4格式
./simg2img system.img system_ext4.img
2、掛載ext4到systemMount目錄進(jìn)行修改
sudo mount system_ext4.img systemMount/ -o loop
3、修改完成后執(zhí)行
./make_ext4fs -s -T -1 -S file_contexts -l 2952790016 -a system system_e2.img systemMount
-
2952790016代表你要打包的system.img大小,這個(gè)值可以參考掛載前system.img的大小。
-
"-a system",是指這個(gè)img用于android系統(tǒng),掛載點(diǎn)是/systemMount。
-
system_e2.img是生成的文件名。
-
-s 就是生成ext4的S模式制作。
root@ubuntu:/home/ubuntu64/***/systemImg# ./make_ext4fs Expected filename after optionsmake_ext4fs [ -l <len> ] [ -j <journal size> ] [ -b <block_size> ] [ -g <blocks per group> ] [ -i <inodes> ] [ -I <inode size> ] [ -L <label> ] [ -f ] [ -a <android mountpoint> ] [ -u ] [ -S file_contexts ] [ -C fs_config ] [ -T timestamp ] [ -z | -s ] [ -w ] [ -c ] [ -J ] [ -v ] [ -B <block_list_file> ] [ -d <base_alloc_file_in> ] [ -D <base_alloc_file_out> ] <filename> [[<directory>] <target_out_directory>]
注意事項(xiàng)
file_contexts 文件7.0的系統(tǒng)里沒(méi)有,是file_contexts.bin文件需要轉(zhuǎn)換
文件路徑:out/target/product/***/root/file_contexts.bin
file_contexts.bin 轉(zhuǎn)換成 file_contexts
./sefcontext -o file_contexts file_contexts.bin
file_contexts 轉(zhuǎn)換成 file_contexts.bin
./sefcontext_compile -o file_contexts.bin file_contexts
此方法生成的system.img可完全正常使用。
需要simg2img、img2simg、make_ext4fs、
sefcontext 、sefcontext_compile文章中的工具包可關(guān)注公眾號(hào)獲取。