Android ROM包定制(解包,增刪模塊型雳,打包)

以前剛用手機(jī)的時(shí)候当凡,經(jīng)成胶Γ可以在玩機(jī)論壇上看到很多發(fā)ROM包的帖子,譬如什么大深度定制ROM沿量,什么大深度深度精簡(jiǎn)純凈版ROM...相信很多喜歡搞機(jī)的都有見過這類帖子浪慌。后來自己不滿每次刷機(jī)后都要手動(dòng)設(shè)置一大堆東西,遂按照論壇上的教程改了Defy+的cm11的ROM朴则,集成了綠色守護(hù)权纤,默認(rèn)允許安裝未知來源的應(yīng)用,默認(rèn)電池百分號(hào)顯示等等乌妒。時(shí)隔4年汹想,又玩起了ROM包定制,感慨頗多

1. 解包

假設(shè)有一個(gè)名為update.zip的ROM包撤蚊,我們要在Ubuntu下對(duì)它進(jìn)行定制欧宜。首先把system.transfer.listsystem.new.dat.br(有些舊版的系統(tǒng)的鏡像可能是system.new.dat)從update.zip解壓出來,轉(zhuǎn)成system.img(原始鏡像格式)拴魄,修改完后又按步驟打包回原來的格式冗茸。本文只寫了system分區(qū)的定制方法,但是對(duì)于其他分區(qū)也是類似的匹中,都要轉(zhuǎn)成原始鏡像格式后才能對(duì)它修改夏漱。如果使用file system.img命令來查看system.img文件信息,會(huì)得到類似下面的信息:

system.img: Linux rev 1.0 ext4 filesystem data, UUID=da594c53-9beb-f85c-85c5-cedf76546f7a, volume name "system" (extents) (large files)

1.1 system.new.dat.br轉(zhuǎn)換為system.new.dat

brotli -d system.new.dat.br

注:如果鏡像就是system.new.dat格式顶捷,就跳過這步

1.2 system.new.dat轉(zhuǎn)成system.img

git clone https://github.com/xpirt/sdat2img
cd sdat2img
python sdat2img.py system.transfer.list system.new.dat system.img

1.3 掛載system.img

sudo mkdir -p /mnt/system
sudo mount -o loop system.img /mnt/system

1.4 擴(kuò)容(可選)

掛載后可以通過df -h來查看掛載點(diǎn)/mnt/system剩余空間有多少挂绰,如果沒有剩余,就要對(duì)它進(jìn)行擴(kuò)容,下面的例子是給它增加128M的空間,擴(kuò)容之前要先取消掛載

dd if=/dev/zero bs=1M count=128 >> system.img
e2fsck -f system.img
resize2fs system.img

2. 修改

現(xiàn)在郭宝,可以在/mnt/system目錄下根據(jù)自己的需求增刪文件了

system_files

增刪文件需要注意:

  1. 對(duì)/mnt/system進(jìn)行寫操作需要root權(quán)限
  2. 如果需要往/system/app目錄或者/system/priv-app目錄下加入自己的apk,需要注意除了把a(bǔ)pk復(fù)制進(jìn)去外,還要把a(bǔ)pk里面的so文件復(fù)制進(jìn)去(如果有的話)践付,復(fù)制進(jìn)去時(shí)注意apk和so文件的路徑,可以參考其他系統(tǒng)App是怎么存放的
  3. 對(duì)于非Apk文件缺厉,復(fù)制進(jìn)去后永高,還要使用chmod,chown等命令給它們合理的權(quán)限才能生效

3. 打包

打包其實(shí)就是解包的逆過程

3.1 生成system.img

sudo make_ext4fs -T 0 -S file_contexts -l 1024M -a system system_new.img /mnt/system
  • -T 代表對(duì)鏡像中的unix文件時(shí)間戳進(jìn)行設(shè)置,這里設(shè)置為0提针,表示1970-1-1
  • -S 指定file_contexts
  • -l 表示目標(biāo)鏡像的大小命爬。如果不懂得寫多少可以使用df -h命令查看掛載點(diǎn)/mnt/system的總大小,然后取整數(shù)(512M,1024M,2048M...)辐脖,比如查得掛載點(diǎn)空間大小是992M,你就得寫1024M
  • -a 指定目標(biāo)img文件在Android中的掛載點(diǎn)
  • system_new.img 表示生成的鏡像
  • /mnt/system/ 表示源目錄

注: file_contexts可以去這里獲取饲宛,根據(jù)系統(tǒng)版本選擇分支(Android7.0對(duì)應(yīng)的是cm14.0分支,Android7.1對(duì)應(yīng)的是cm14.1分支嗜价,Android8.0對(duì)應(yīng)lineage-15.0分支,以此類推)艇抠,下載后也可以根據(jù)自己的需求定制file_contexts

成功后會(huì)在當(dāng)前目錄下生成system_new.img幕庐。如果發(fā)生錯(cuò)誤,根據(jù)錯(cuò)誤進(jìn)行調(diào)整參數(shù)练链,直到?jīng)]有錯(cuò)誤提示為止翔脱。

3.2 卸載system

sudo umount /mnt/system

3.3 把system.img轉(zhuǎn)成system.new.dat

轉(zhuǎn)換之前可以對(duì)之前解壓出來的文件進(jìn)行備份:

mv system.transfer.list system.transfer.list.bak
mv system.new.dat system.new.dat.bak

開始轉(zhuǎn)換

git clone https://github.com/jazchen/rimg2sdat
cd rimg2sdat
python rimg2sdat.py system_new.img

成功后會(huì)在當(dāng)前目錄下生成system.transfer.list和system.new.dat

3.4 system.new.dat轉(zhuǎn)成system.new.dat.br

brotli -0 system.new.dat

注:如果開始解壓出來的鏡像就是system.new.dat格式奴拦,就跳過這步

3.5 更新文件到刷機(jī)包

zip update.zip <system.new.dat.br或者system.new.dat> system.transfer.list

4. 擴(kuò)展知識(shí)

在有些刷機(jī)包里媒鼓,它里面包含的system.img鏡像是sparse image格式的,如果用file命令查看它的信息错妖,顯示如下:

system.img: Android sparse image, version: 1.0, Total of 655360 4096-byte output blocks in 6009 input chunks.

對(duì)于這種格式的鏡像绿鸣,如果想把它掛載和修改,就要轉(zhuǎn)成我們上面提到的raw image(原始鏡像)格式暂氯,命令如下:

simg2img <sparse_image_files> <raw_image_file>

修改完成后潮模,取消掛載,再使用下面的命令將raw image轉(zhuǎn)成sparse image:

img2simg <raw_image_file> <sparse_image_file> [<block_size>]

5. 總結(jié)

相對(duì)于修改Android源碼的方式痴施,直接修改鏡像的方法對(duì)PC配置要求低很多擎厢。如果我們只想增加一些現(xiàn)有的模塊和刪除不必要的模塊,這是很好的方式辣吃。而且對(duì)于一些手機(jī)廠商动遭,他們沒有提供Android源碼,我們就只能用直接修改鏡像的方式來定制我們的ROM神得。修改ROM的方法是靈活的厘惦,總結(jié)下來就是,看見一個(gè)鏡像哩簿,可以根據(jù)后綴名和file命令確認(rèn)它的格式宵蕉,看情況將它轉(zhuǎn)成原始鏡像格式并掛載,就可以修改了节榜,修改后又轉(zhuǎn)回它原來的格式羡玛,最后替換刷機(jī)包中原有的鏡像

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宗苍,隨后出現(xiàn)的幾起案子缝左,更是在濱河造成了極大的恐慌,老刑警劉巖浓若,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺杉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挪钓,警方通過查閱死者的電腦和手機(jī)是越,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌上,“玉大人倚评,你說我怎么就攤上這事浦徊。” “怎么了天梧?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盔性,是天一觀的道長。 經(jīng)常有香客問我呢岗,道長冕香,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任后豫,我火速辦了婚禮悉尾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挫酿。我一直安慰自己构眯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布早龟。 她就那樣靜靜地躺著惫霸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葱弟。 梳的紋絲不亂的頭發(fā)上壹店,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音翘悉,去河邊找鬼茫打。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妖混,可吹牛的內(nèi)容都是我干的老赤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼制市,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抬旺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起祥楣,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤开财,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后误褪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體责鳍,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年兽间,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了历葛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘀略,死狀恐怖恤溶,靈堂內(nèi)的尸體忽然破棺而出乓诽,到底是詐尸還是另有隱情,我是刑警寧澤咒程,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布鸠天,位于F島的核電站,受9級(jí)特大地震影響帐姻,放射性物質(zhì)發(fā)生泄漏稠集。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一卖宠、第九天 我趴在偏房一處隱蔽的房頂上張望巍杈。 院中可真熱鬧忧饭,春花似錦扛伍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼砂,卻和暖如春逆航,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渔肩。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工因俐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人周偎。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓抹剩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓉坎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澳眷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容