導航:首頁 > 編程大全 > 安卓img打包工具

安卓img打包工具

發布時間:2025-05-26 20:39:54

A. 幾個常見的Android多渠道打包工具介紹

多渠道打包是Android項目開發中不可或缺的步驟,其目的是在不同的應用市場或合作渠道中進行數據統計和區分。選用合適的打包工具能大大提高效率,以下是幾款市面上常用的多渠道打包工具介紹。

一、Android Studio打包APK

Android Studio是傳統的打包工具,操作相對繁瑣,適合對項目有足夠耐心的情況。首先,在Android Studio中打開「Build」菜單,選擇「Generate Signed APK」。隨後,用戶需創建密鑰庫和密鑰,配置保存路徑,並完成打包過程。

二、Hbuilder打包APK

Hbuilder打包過程簡單,特別適合前端工程師,因為它具有雲原生打包功能。使用時,首先下載並運行Hbuilder軟體,新建項目並替換所有文件,包括css、img、js等。點擊「發行—雲打包」,根據需求調整並完成打包。

三、Xinstall渠道包製作

Xinstall是最推薦的打包方式,它簡化了打包流程,即使是運營或產品人員也能自主製作渠道包。完成Android SDK集成後,上傳APK母包,然後在控制台生成並導出攜帶channel信息的渠道包。Xinstall還會自動統計相關數據,方便查看安裝、注冊、留存等指標。

四、美團Walle打包

美團Walle打包工具能顯著提升效率,特別是對熟悉後。配置根build.gradle文件,引入所需的插件,然後在App build.gradle文件中添加相應的依賴和插件配置。通過在工程根目錄下新建channel.txt文件並添加渠道名稱,最後使用Terminal命令編譯打包。

B. 如何解包/編輯/打包android系統的boot.img文件

Android產品中,內核格式是linux標準的zImage,根文件系統採用ramdisk格式。這兩者在Android下是直接合並在一起取名為boot.img,會放在一個獨立分區當中。這個分區格式是Android自行制定的格式。Android開發時,最標準的做法是重新編譯於內核和根文件系統,然後調用Android給的命令行文件mkbootimg(out/host/linux-x86/bin/)來打包。 在製作手機ROM時,有時會單獨編譯內核或抽出根文件進行修改內容,比如我只編譯內核,其餘的地方不變。這樣重新安裝巨大的Android開發環境實在不劃算。因此很多boot.img解包工具被人開發出來,這一些工具都是把內核和根文件系統從一個現成的boot.img抽取出來,修發後再次打包還原。一.常見的解包工具因為boot.img的格式比較簡單,它主要分為三大塊(有的可能有四塊)因此很多人開發分析工具,有是linuxshell腳本,比如repack-zImage,也有人採用perl,還有C語言編寫的unbootimg, 我使用的是在源碼位置system/core/mkbootimg/下的mkbootimg。為了簡化,藍點工坊把與mkbootimg中打包工具和解包工具以及所包含的libmincrpty庫抽出來,並且重寫一個Makefile,作為開源項目。使用者只需要在linux(需安裝gcc,make,一般是標配)或windows(需要安裝mingw)的命令行執行make,即可產生可執行文件mkbootimg,unpackbootimg。二.解/打包工具使用解包工具:unpackbootimg常見格式 unpackbootimg-i.\tmp\boot.img-o.\out 這一句命令行表示把boot.img解包,所有文件輸出到out目錄下它會解壓出如下文件:boot.img-zImage(內核文件)boot.img-ramdisk.gz(根文件系統打包文件) boot.img-cmdline(mkbootimgcmdline參數) boot.img-pagesize(mkbootimgpagesize參數) boot.img-base(mkbootimgbase參數)打包工具:mkbootimg(Android自帶)常見的命令格式: ./mkbootimg --cmdline'no_console_suspend=1console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img--base02e00000 這句含義是把內核文件zImage和boot目錄下的根文件壓縮包boot.img-ramdisk.gz打包成boot.img. 其中cmdline和base的值均來源於unpackbootimg的結果

C. 如何解包/編輯/打包android系統的boot.img文件

目錄
1、背景知識
2、boot和recovery映像的文件結構
3、對映像文件進行解包、編輯、打包的常規方法
3.1、另一種解包、編輯、打包的方法
4、將新的映像刷回到手機
5、解包、編輯、打包為我們帶來了什麼
6、本文講的內容與使用update.zip刷機包不是一碼事

正文
1、背景知識

Android手機的文件系統有許多存儲器組成,以下是在adb shell下面的輸出:
#cat/proc/mtd
dev: size erasesize name
mtd0: 00040000 00020000 "misc"
mtd1: 00500000 00020000 "recovery"
mtd2: 00280000 00020000 "boot"
mtd3: 04380000 00020000 "system"
mtd4: 04380000 00020000 "cache"
mtd5: 04ac0000 00020000 "userdata"

注意,不同的手機在上述存儲設備的順序可能會各不相同!一定要檢查您的手機,確定在以下的操作中選擇正確的設備號(mtdX,這個X的序號一定要檢查清楚)。

在本向導中,我們主要描述對"recovery"和"boot"的存儲設備進行操作;"system"存儲設備保存了android系統目錄的所有數據(在系統啟動後會掛載到「system/」目錄);「userdata」存儲設備將保存了android數據目錄中的所有數據(在系統啟動後會掛載到「data/」目錄,裡面是會有很多應用數據以及用戶的preference之類的配置數據)。

從上面的輸出可以看出來,recovery和boot分區對應著/dev/mtd/mtd1和/dev/mtd/mtd2,在你您開始做任何修改之前一定要做兩件事情,第一件事情,一定要先對這兩個分區進行備份。
可以使用如下命令進行備份:
# cat/dev/mtd/mtd1>/sdcard/recovery.img
# cat/dev/mtd/mtd2>/sdcard/boot.img

(注意,只有手機獲取了ROOT許可權以後才能夠執行上述的備份命令)

第二件事情,你您應該把你您最喜歡的update.zip刷機包放置到你您的sd卡的根目錄上面。如此一來,即使你您在後續的操作中出了問題,也可以啟動到recovery模式進行恢復。

另外一個你您需要知道的重要文件是在android系統目錄下的/system/recovery.img,此文件是mtd1存儲設備的完全拷貝。這個文件在每次關機的時候,會自動地被寫回到mtd1存儲設備裡面。

這會意味著兩個事情:
(1)任何對/dev/mtd/mtd1中數據的直接修改都會在下一次重啟手機以後消失。
(2)如果希望對/dev/mtd/mtd1進行修改,最簡單的做法是用你您自己的recovery.img替換掉/system/recovery.img。當你您創建自己的update.zip刷機包的時候(特別是在做刷機包的適配的時候),如果你您忘記替換這個/system/recovery.img,這個recovery.img就會在關機的時候被燒寫到mtd1裡面去或許會變磚。一定要注意這一點!

(譯者的話,關於這個/system/recovery.img文件,在2.1的android的平台裡面並沒有找到,或許這個機制已經out了?!或者偶本人對這段話的理解不夠深入?!希望明白的朋友不吝斧正)

2、boot和recovery映像的文件結構
boot和recovery映像並不是一個完整的文件系統,它們是一種android自定義的文件格式,該格式包括了2K的文件頭,後面緊跟著是用gzip壓縮過的內核,再後面是一個ramdisk內存檔,然後緊跟著第二階段的載入器程序(這個載入器程序是可選的,在某些映像中或許沒有這部分)。此類文件的定義可以從源代碼android-src/system/core/mkbootimg找到一個叫做
bootimg.h的文件。

(譯者的話,原文是一個叫做mkbootimg.h的文件,但從Android 2.1的代碼來看,該文件名應該是改為bootimg.h了)。

/*
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
**
** n = (kernel_size + page_size - 1) / page_size
** m = (ramdisk_size + page_size - 1) / page_size
** o = (second_size + page_size - 1) / page_size
**
** 0. all entities are page_size aligned in flash
** 1. kernel and ramdisk are required (size != 0)
** 2. second is optional (second_size == 0 -> no second)
** 3. load each element (kernel, ramdisk, second) at
** the specified physical address (kernel_addr, etc)
** 4. prepare tags at tag_addr. kernel_args[] is
** appended to the kernel commandline in the tags.
** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
** 6. if second_size != 0: jump to second_addr
** else: jump to kernel_addr
*/

ramdisk映像是一個最基礎的小型文件系統,它包括了初始化系統所需要的全部核心文件,例如:初始化init進程以及init.rc(可以用於設置很多系統的參數)等文件。
以下是一個典型的ramdisk中包含的文件列表:
./init.trout.rc
./default.prop
./proc
./dev
./init.rc
./init
./sys
./init.goldfish.rc
./sbin
./sbin/adbd
./system
./data

recovery映像包含了一些額外的文件,例如一個叫做recovery的二進製程序,以及一些對該程序支持性的資源圖片文件(當你您按下home+power組合鍵的時候就會運行這個recovery程序)。
典型的文件列表如下:

./res
./res/images
./res/images/progress_bar_empty_left_round.bmp
./res/images/icon_firmware_install.bmp
./res/images/indeterminate3.bmp
./res/images/progress_bar_fill.bmp
./res/images/progress_bar_left_round.bmp
./res/images/icon_error.bmp
./res/images/indeterminate1.bmp
./res/images/progress_bar_empty_right_round.bmp
./res/images/icon_firmware_error.bmp
./res/images/progress_bar_right_round.bmp
./res/images/indeterminate4.bmp
./res/images/indeterminate5.bmp
./res/images/indeterminate6.bmp
./res/images/progress_bar_empty.bmp
./res/images/indeterminate2.bmp
./res/images/icon_unpacking.bmp
./res/images/icon_installing.bmp
./sbin/recovery

3、對映像文件進行解包、編輯、打包的常規方法
(注意,下面我給你您介紹的是手工命令行方式進行解包以及重新打包的方法,但是我仍然創建了兩個perl腳本,這兩個腳本可以讓你您的解包和打包工作變得輕松許多。

如果你您很擅長使用16進制編輯器的話,你您可以打開boot.img或者recovery.img,然後跳過開始的2K的頭數據,然後尋找一大堆0的數據,在這一堆0的數據後面,緊跟著1F 8B這兩個數字(1F 8B是gzip格式的文件的結束標記)。從此文件開始的地方(跳過2K的頭),一大堆0後面緊跟著到1F 8B這兩個數字為止的全部數據(不包括1F 8B),就是gzip壓縮過的linux內核。從1F 8B開始一直到文件的結尾包含的全部數據,就是ramdisk內存檔的數據。你您可以把把內核和ramdisk兩個文件分別保存下來,在進行分別的修改和處理。我們可以通過un-cpio和un-gzip操作來讀取ramdisk文件中的數據,可以使用如下的命令來實現這個目的,以下操作會生成一個目錄,直接cd進去就可以看到ramdisk中的數據了:

gunzip -c ../your-ramdisk-file | cpio -i

此命令可以將ramdisk中的所有的文件解包到當前的工作目錄下面,然後就可以對它進行編輯了。

當需要重新打包ramdisk的時候,就需要re-cpio然後re-gzip這些數據和目錄,可以通過如下命令來實現:(cpio會把所有當前目錄下面的文件都打包進去,因此,在進行此步驟之前,請把不需要的文件都清除掉。)

find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz

最後一步就是通過 mkbootimg這個工具,把kernel和ramdisk打包在一起,生成一個boot.img:

mkbootimg --cmdline 'no_console_suspend=1 console=null'
--kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img

這里的mkbootimg工具會在編譯android的源代碼的時候會在~/android-src/out/host/linux-x86/bin目錄下面自動生成。

現在,如果不想背這些復雜的命令或者擺弄那個讓人眩暈的16進制編輯器的話,可以嘗試使用我編寫的用於解包和打包的perl腳本了。希望這些腳本能夠節約各位的鍵盤。

3.1、另一種解包、編輯、打包的方法
下載 split_bootimg.zip文件,在此zip文件中包含一個perl文件,split_bootimg.pl腳本,該腳本可以讀取boot.img頭(根據 Android源碼中的bootimg.h讀取)將kernel和ramdisk讀取出來,此腳本也會輸出內核命令行和板子名字。

(注意,不要使用從/dev/mtd/mtd2直接拷貝出來的boot.img,此映像可能在讀取過程遭到損壞。)
下面是一個從TC4-RC28更新中提取出來的boot.img進行解包操作:
% ./split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 1388548 (0x00153004)
Ramdisk size: 141518 (0x000228ce)
Second size: 0 (0x00000000)
Board name:
Command line: no_console_suspend=1
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.

解包ramdisk的命令如下:
% mkdir ramdisk
% cd ramdisk
% gzip -dc ../boot.img-ramdisk.gz | cpio -i
% cd ..

解碼完畢後,就可以修改了(例如,在default.prop設置ro.secure=0等等)

使用mkbootfs工具(mkbootfs工具是編譯完畢Android源代碼以後,就會在~/android-src/out/host/linux-x86/bin自動生成)來重新創建ramdisk,可以使用如下命令來操作:
% mkbootfs ./ramdisk | gzip > ramdisk-new.gz

使用mkbootimg來重新創建boot.img,mkbootimg也可以在~/android-src/out/host/linux-x86/bin目錄中可以找到:
% mkbootimg --cmdline 'no_console_suspend=1 console=null'
--kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img

(注意:console=null的命令行選現是從TC4-RC30的boot.img引入的,用以去掉root shell)

4、將新的映像刷回到手機
可以將recovery.img拷貝到/system目錄下面,然後重新啟動手機,讓手機自動為你您刷寫到mtd裡面(工作原理在上面已經提過了)。對於boot.img可以通過將其拷貝到sd卡的根目錄,然後通過手機內的刷寫工具將此映像寫入到手機中。

例如,使用 adb工具( Android SDK中的一個工具)將boot.img拷貝到手機的sd卡的根目錄:
adb push ./mynewimage.img /sdcard

然後通過adb shell登錄手機(獲取過 ROOT的)的shell交互模式,利用命令行進行交互:
# cat /dev/zero >/dev/mtd/mtd2
write: No space left on device [this is ok, you can ignore]
# flash_image boot /sdcard/mynewimage.img

然後重啟手機。

如果手機能夠正常啟動,那麼祝賀你您,你您的修改和替換已經成功了;如果不能夠順利啟動,則需要重新啟動進入recovery模式,並且使用update.zip來恢復。

5、解包、編輯、打包為我們帶來了什麼
可以修改手機開機啟動時候的畫面
You can display a "splash" screen of sorts upon boot. You just have to have a file named initlogo.rle in your root directory. The trick is that the root directory is overwritten each time you boot with the contents of your boot image (mtd2). There are instructions elsewhere on the forums for updating this image.

You can prove to yourself that this works by just ing logo.rle to initlogo.rle in your updated boot image and you will see the "G1" screen twice.

The hurdle I'm running into is generating my own images. There is a program called [url=]to565[/url] that takes in an image and spits out the resulting image in the appropriate format (give it the -r flag to generate an rle) [edit, correct flag is -rle]. However, everything I generate with this just looks like random colored bars when I boot up (and sometimes at the bottom of the screen I see part of whatever was left in the framebuffer when I shut down). Supposedly to565 takes in a raw rgb888 file, and perhaps I'm not generating those properly. I tried saving to "raw image" from gimp but so far everything is just different variations on colored bars.

I may give up at this point, but I thought others might be interesting in picking up where I left off.

6、本文講的內容與使用update.zip刷機包不是一碼事

您可以很容易地在其他論壇上看到關於如何自製update.zip刷機包的方法,也可以下載到很多在網路上共享的自製刷機包。例如:近期的多數刷機包都來自對rc30包的修改和調整。在update.zip刷機包裡面會包括新的boot.img,recovery.img以及整個system/目錄下的若干文件的替換和更新。如果您希望自己自製boot.img以及recovery.img,建議您選取相對較新的更新和版本。(選用較老的映像的話,或許會出現兼容性問題)。

D. 如何打包 android img

工具/原料

刷機包(還有system.img)
ROM助手
方法/步驟

提取system.img
一般的刷機包後綴名是MD5或者tar格式,如果是MD5的話就重命名位tar格式,然後再解壓縮,PS:解壓縮都會的吧。解壓出來之後裡面有很多img文件,其中就包括system.img。這就是今天的豬腳,搞的就是他。三星刷機包作為案例。

下載安裝ROM助手
打開ROM助手,選擇「系統精簡」功能。使用之前要注意,最好把一些殺毒軟體暫時的關閉,

載入system.img
把第一步提取的system.img載入進去。稍等片刻,等待載入完成。。

精簡和添加
這時ROM助手把整個system.img的APK都顯示出來了,在保證刷機包的完整性的同時,你想怎麼玩就怎麼玩 ,如果不盡興的話 ROM助手還有一層功效哦!!!繼續往下看。。
文件包的修改
在載入完成後 ROM助手的安裝目錄會生成一個文件夾,這里顯示的是全部system.img的內容 我的是 D:\MoGu\Temp\~0,在這里你可以盡情的移植,美化什麼的,只要你會的 都可以玩。。。另外:ROM助手的美化功能在抓緊的開發測試中,敬請期待哦~~~

封裝IMG
一切完成後 點擊右下角的「開始封裝」 等待封包完成,
這樣system.img的解包 修改 打包就結束了,是不是很簡單的呀 !!!
在人家還在安裝LINUX的時候 你都完成了SYSTEM的封包,很有成就感的哈,

閱讀全文

與安卓img打包工具相關的資料

熱點內容
電腦卸載東西顯示找不到文件 瀏覽:503
微信45安卓版安裝包 瀏覽:667
大唐千兆網路交換機 瀏覽:349
洛奇探險怎麼升級 瀏覽:792
匯編語言程序順序 瀏覽:163
download文件是什麼 瀏覽:883
文檔文件損壞怎麼修復 瀏覽:167
把文件1中的內容復制到文件2中 瀏覽:971
怎麼看文件的編號格式 瀏覽:770
電腦桌面突然沒有文件了 瀏覽:247
U盤64G可裝多少文件 瀏覽:987
南京公安app怎麼添加車輛信息 瀏覽:427
indesign矩形框架工具怎麼用 瀏覽:2
cad刻繪文件怎麼導入 瀏覽:454
蘋果安裝微信要密碼 瀏覽:252
exe文件捆綁工具 瀏覽:721
蜘蛛網是怎麼編程的 瀏覽:943
u盤啟動文件系統格式 瀏覽:887
到日本寄文件多少錢 瀏覽:15
鳳崗網站建設多少錢 瀏覽:17

友情鏈接