當前位置:首頁 » 網頁前端 » 修改官方刷機包腳本
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

修改官方刷機包腳本

發布時間: 2023-06-05 19:51:46

❶ 如何修改製作卡刷包 安卓卡刷包製作教程

在此先要明確聲明一下:
依照此做法出現您的手機出現任何問題,概不負責的喔!!
英文好的朋友,可以直接看英文官方的參考網站即可:
只用android源代碼做一些簡單實驗的朋友可以參考下面這幾個網站:
說起android刷機包,聽起來非常神秘,實際上它僅僅是一個經過數字簽名的zip壓縮包而已。如果要自己製作刷機包,則必須了解刷機包的基本工作原理,偶首先從android系統的啟動說起:
android系統啟動的時候,首先會進行一些諸如硬體自檢之類的操作,這些操作完成以後(至少它應該知道當前的機器有沒有電),會檢查一下當前手機按鍵的狀態(接下來就是所謂刷機模式切換了,不同的android手機有不同的按鍵組合用來進入刷機模式),如果此時按鍵狀態處於刷機組合,那麼系統會調用ROM裡面的一個叫做recovery的程序(這時就是進入了所謂的刷機程序了,它只是一個工具性質程序,用於檢查刷機包的完整性和數字簽名的合法性。對於目前大多數root過的機器而言,數字簽名的合法性都不會成問題,然後由recovery程序將刷機包進行解壓,然後把刷機包裡面的文件寫入到ROM中去,以此完成刷機過程);如果此時按鍵沒有標明是刷機模式,那麼系統會創建內存檔,開始從ROM裡面載入相應的文件系統,並把相關的文件拷貝到內存檔中,進而引導linux啟動,然後是啟動虛擬機dalvik,然後就是創建工作進程載入和運行framework,然後就會看到待機的畫面。當然在這個過程中還發生了許多事情,啟動了許多服務,為了簡化起見,對於啟動過程偶只講解到此,感興趣的朋友可以自己結合著linux的啟動過程加以對比來學習。
現在來總結一下,實際上刷機包就是一個ROM文件的壓縮包,進入刷機模式後,recovery程序會把刷機包裡面的文件寫入ROM存儲區替換ROM存儲區的原有文件;當下次啟動手機的時候,會從ROM中載入剛剛替換過的文件,並利用這些文件來啟動和運行系統。這就是刷機包的全部功能和作用,看不懂的朋友可以反復看幾次,刷機的本質就是文件的覆蓋和替換操作,偶相信各位一定能看懂!
OK,現在大家已經知道ROM文件的zip壓縮包就是所謂的刷機包。製作刷機包的過程就是准備這些文件,然後重新把這些文件壓縮成一個zip包的過程,在製作的最後,使用簽名工具簽個名,就可以測試和發布刷機包了。雖然說起來就是一句話的事情,但是實際上准備這些文件的過程是非常痛苦和漫長的。
那麼update.zip壓縮包裡面的都包含哪些文件?這些文件又都是如何做出來的呢?hoho,現在開始漸漸接觸到問題的本質了,解壓縮這個update.zip壓縮包以後我們可以看到兩個目錄和一個文件:
boot.img <---文件,這是編譯內核源代碼生成的內核映像,然後與android源碼編譯出來的ramdisk.img一起通過mkbootimg工具創建出來的,圖省事的朋友也可以從網上其他的刷機包裡面拷貝一個能用的出來即可,基本上都差不多。
META-INF <---目錄,這個目錄是手工創建的,主要用來存放一個升級腳本update-script(這個腳本的內容與system目錄中包含的文件有很大關聯)以及保存若干刷機包內的apk文件的簽名。
system <---目錄,這個目錄就是編譯android的平台源代碼生成的,
其實最好的學習方式就是把現在互聯網上的那些update.zip包給解包,然後自己一個一個文件地看和分析,然後修改,嘗試做自己的刷機包。
對於這個boot.img,基本思路是編譯android kernel代碼,生成內核image然後利用mkbootimg感興趣的朋友可以參考下面這兩個wiki網站:
下面的做法偶都是在linux下面完成的(slackware 13.1):
(1)下載和編譯android的源代碼,具體過程不再贅述
如果各位還不知道repo sync之類的命令的話,可以參考網上的關於下載android源代碼以及編譯的文章,據偶所知這些文章非常豐富。編譯之前一定要注意平台的選擇,不同平台的驅動程序是不一樣的!這些參數可以通過:
$ cd android-src <---進入android的源代碼目錄
$ . build/envsetup.sh <---設置環境變數,運行完畢後,你可以輸入一下help命令,看看google的團隊提供了多少有用的便利命令,這對於我們以後修改代碼重新編譯非常有幫助。
$ lunch generic-eng <---開始配置android的源代碼的編譯選項
運行上述命令後會看到如下輸出:
wayne@wayne:~/android-src$ lunch generic-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================
$ make -j2 <---只有單核的CPU的朋友可以嘗試此參數,雙核的朋友可以試試-j3,否則就老老實實運行make即可。
然後就是一個漫長的等待,這個時間大概有1-2小時左右(偶的機器比較慢),完全編譯完畢以後硬碟的佔用大概需要8個G左右。
(2)編譯完成以後,進入wayne@wayne:~/android-src/out/target/proct/generic目錄,應該會看到如下的文件:
android-info.txt
data
obj
ramdisk.img
sdk
system
userdata.img
clean_steps.mk
installed-files.txt
previous_build_config.mk
root
symbols
system.img
這里的system.img是不是很眼熟?!對拉,這個就是刷機包裡面好像也有一個叫做什麼system的目錄,那麼這個system.img裡面都有什麼呢?這裡面的東西其實就是當前目錄下的一個叫做system的目錄裡面的內容了,只是保存成了yaffs文件系統的格式。我們可以通過unyaffs工具來把system.img給解開來看看,就明白偶說話了。
unyaffs的代碼下載地址為:
在linux下編譯方法非常地簡單,只需要下載源代碼,然後運行:$ gcc -c unyaffs.c
$ gcc -o unyaffs unyaffs.o
即可生成這個unyaffs的解包工具,利用這個工具就可以把自己生成的system.img進行解包,然後修改裡面的內容了。
unyaffs使用方法非常簡單:
$ unyaffs system.img [回車]
即可將system.img解包成一個叫做system的目錄,裡麵包含了整個android的文件系統
(3)剛剛開始,不適合一切從頭來,還是老實一些,先從修改別的大牛們做得刷機包開始吧
首先拷貝一個從網上下載下來的刷機包,然後找一個目錄解壓縮(當然,這是最保險的做法,自己做這些目錄也沒有任何問題,只是比較費時間而已)
$ unzip xxxxxx.zip <--- 這個xxxxx.zip就是從網上下載的某刷機包(一定要跟你的代碼版本基本一致喔,偶在這里用的是2.1的刷機包)
(4)替換原有的system目錄
解壓縮刷機包以後,會看到在開篇的時候提到的兩個目錄,一個文件:
boot.img
META-INF
system
好了,可以把system目錄拷貝到別的路徑下備份一給,防止這些修改發生別的問題。然後把wayne@wayne:~/android-src/out/target/proct/generic這個目錄下面的system拷貝到當前的工作目錄下。注意,這個system目錄裡面有很多「符號鏈接」指向了toolbox。這些鏈接其實沒啥用,可以通過後面的update-script自動進行創建的,因此,需要用一個腳本把這些鏈接都刪掉。
可以參考:
這個網頁附件給出來的DeleteExtras.txt改寫成一個DeleteExtras.sh腳本來清除這些符號鏈接。
(5)修改update-script腳本
修改META-INF/com/google/android目錄下的那個叫做update-script的腳本,只要修改一下即可,主要是刪除一些不存在的文件以及增加一些文件的許可權之類的定義(語法十分清晰,一目瞭然)。把需要「預裝」到刷機包裡面的apk安裝程序都准備好,將這些apk拷貝到system/app目錄下即可。那個boot.img能不改就不改,因為這東西涉及到驅動和內核的問題,出了問題刷機包就啟動不了了。