1. 程式人生 > >Android ROM製作教程,讓你擁有自己喜歡的ROM

Android ROM製作教程,讓你擁有自己喜歡的ROM

作者斯文是我

關鍵詞:java環境配置 製作工具 update-編寫美化 整合 編譯反編譯 一. 製作目的: 1. 培養個人興趣,感受動手動腦的快樂。 2. 學習手機基本知識,最終動手製作自己的ROM。 3. 幫助那些需要幫助的朋友(說不定有人喜歡你製作的ROM) 二. 製作原理: 1. 安卓基礎知識普及: Android一詞的本義指“機器人”,同時也是Google於2007年11月5日宣佈的基於Linux平臺的開源手機作業系統的名稱,該平臺由作業系統、中介軟體、使用者介面和應用軟體組成,號稱是首個為移動終端打造的真正開放和完整的移動軟體。目前,最新版本為Android 2.4Gingerbread和Android 3.0Honeycomb。 ① 底包 :官方的系統包,相當於我們的Windows的作業系統,事實上它相當於一個純淨版或者核心版的系統包,是最底層的東西。副檔名為sbf,底包通常是官方釋出的,ROM作者直接拿來用的,可以選擇的版本不會太多,通常更新也不會頻繁。底包通常使用PC端刷機工具(RSD)配合Bootloader的工程模式完成刷入。 ② 升級包 (映象包):廣大玩家制作的底包增強包,通常表現為一個update.zip檔案。升級包是對底包的擴充套件和增強,包含一系列的輔助工具和服務,沒有中文的底包通過升級包可以實現中文。當然,很多功能也是通過升級包來實現的。可以說,在重新整理了底包後,配合重新整理相應的升級包,這樣才形成一個完整系統。升級包通常通過Recovery工具,從SD卡讀取刷入。 ③ Bootloader  :相當於電腦裡面的bios(基本輸入輸出系統),手機一開機,控制手機的就是Bootloader。我們通常所說的進入Bootloader,實際上是指進入Bootloader的工程模式,既是刷機模式,在此模式下可以將moto的sbf檔案(底包)刷到機器裡面。 ④ Recovery : Moto 手機內建的一個獨立備份恢復工具,類似電腦上的一些一鍵還原系統,既是在系統出現問題的時候仍然可以開啟的一個模式。Moto 的 Recovery 主要提供了WIPE(硬啟,清除資料,恢復出廠設定)和Update(通常用於安裝升級包,update.zip)功能。 Recovery是不能直接重新整理的底包的,通常它重新整理的升級包(update.zip)的方式是:自動尋找SD卡上的特定檔案,然後寫入。 ⑤ 基帶(Baseband):是手機中的一塊專門的程式碼,或者可以理解成為一個專門負責通訊的BIOS,負責完成移**絡中無線訊號的解調、解擾、解擴和解碼工作。基帶的不同會造成訊號效果的不同。因為各地、各網路實際情況不同,需要大家自己選擇適合自己的基帶。 ⑥ WIPE :wipe後就恢復了出廠設定,包括聯絡人、簡訊、安裝的軟體等全部刪除。俗稱硬啟,恢復出廠設定。注意,wipe後app2sd和root許可權需要重新做。而且app2sd重要的分割槽步驟也要重新來過。某些說法提到在重新整理底包或者升級包前需要進行WIPE操作,我對此操作的必要性不是很確定。 ⑦ OpenRecovery(簡稱OR) :由於MOTO很蛋疼的在update.zip上做了一些手腳,這些東西影響到了升級包的製作。於是高手們就搞出了一個OpenRecovery,這其實就一個第三方的增強版的Recovery工具,某些OpenRecovery已經發展成為一個具有很多功能的小系統了(類似WindowsPE),在這個OR中,可以完成很多東西,我們完全可以把OR想象成電腦上用的應急PE系統,在上面可以調整超頻、基帶、app2sd、更換啟動畫面、wipe、改變時區、調整鍵盤佈局,甚至連結USB當讀卡器等等,凡是recovery能做的,OR都可以做,recovery不能做到,OR可以做到。一般OpenRecovery在sd卡上有兩個部分存在:update.zip和OpenRecovery目錄,最新的GOT底包添加了新的一個OpenRecovery-CFG目錄,用來存放各種個人檔案。update.zip就是用來坑MOTO一個標準的的zip升級包,而真正的升級包要放在/sdcard/OpenRecovery/updates目錄下。 ⑧ App2sd :說白了,其實很簡單,就是把APK檔案安裝到sd卡上,android是Linux脫胎而來,App2sd的原理就是對SD卡進行分割槽,然後把SD上劃分出來的某個分割槽合併到系統分割槽中去(聽不懂,不要緊),劃分出來的分割槽是Ext2格式,一般Windows不能識別,不要驚慌,正常現象。App2sd對sd卡要求比較高,如果感覺app2sd後比較慢,可以試試換一張C4的sd卡。因為在2.1的環境下,app2sd需要對sd進行分割槽,操作比較複雜,E文不好的小白或者電腦基礎薄弱的小白容易失誤。建議對Android非常熟悉了再做App2sd。 ⑨ Root :大家都知道android系統脫胎自Linux,也正是這個開源的核心讓廣大玩家可以自由發揮。Root是Linux系統下的系統級賬號,擁有系統的全部許可權,Android設計上的不開放這個使用者的,目的是為了保護系統安全,但是這個保護似乎也帶來很多不便。於是就一些工具和方法來開放這個賬號。開放Root賬號的方法似乎有很多,這裡就不再細說。原理上分析,root的賬號,應該通過在Android系統安裝某個系統級別的服務,該服務具有root許可權,然後其它需要root許可權的程式再向這個服務請求root許可權。WIPE、刷機都有可能會造成root許可權失效,需要重新root許可權。 額外說明: ① 從原理上分析,通常 底包,Bootloader,Recovery,基帶都是可以重新整理替換的,升級包當然更可以。但是底包、Bootloader很少會有第三方開發或者修改的,一般都使用官方釋出的。底包有時候會內建Bootloader、Recovery,這樣的底包重新整理時會連上述兩者一起更新(推測結果,不確定)。更新這樣的底包是有危險的,有可能會造成Bootloader損壞,這個東西損壞了,基本就是變磚了,真正的變磚,只能花錢去修了。只有這個東西沒壞,就不是磚。② 我們通常所說的刷機ROM實際是升級包,升級包是對應於特定的底包製作的,所以刷機時務必確保使用的底包和升級包版本上保持一致。③ 需要注意版本號的還有:Bootloader版本、基帶版本、Recovery版本④ 目前有些OpenRecovery工具支援底包、升級包一起從SD卡讀取刷入⑤ 似乎刷機前確保系統乾淨整潔是很重要的,很多教程提到要通過 WIPE - 刷底包的步驟來確保刷機前的乾淨,實際上如果底包版本沒有變化,刷底包似乎、也許、大概、可能是不必要的。 2. 系統結構及檔案簡單剖析: 一個常見的自制ROM根目錄會有以下幾個資料夾及檔案: data,-IN,system,boot.img(鎖了BL的可以無視這個,但製作時需要它,打包時把它拿出來。) 系統目錄說明 ①應用程式安裝目錄 1) 系統應用程式所在目錄/system/app/*.apk 2)使用者安裝應用程式所在目錄/data/app/*.apk 3) 注意:a)在模擬器中,每重啟一次,/system/app/下的應用都會被還原,有時/data/app下也會被清除 b)若在/system/app和/data/app下有重名的應用,不一定會啟動哪一個,尤其是在adb install殺死正在執行的程式時,有時舊的就會被啟動 ②.使用者資料所在目錄 /data/data/應用包名/shared_prefs配置檔案 /data/data/應用包名/databases/*庫檔案所在目錄 ③. SD卡對應目錄/sdcard/ 而我們需要處理的只是兩個資料夾裡面的內容: data/app ——該資料夾裡的檔案可以全刪,也可以自由新增自已所需安裝的應用軟體,刷機安裝後可以自由刪除。 system/app ——在這個資料夾下的程式為系統預設的元件,可以看到都是以APK格式結尾的檔案,但有些系統自帶的ROM裡面還有和APK檔名對應的odex檔案。我們主要是針對該資料夾裡的檔案進行精簡,如果有odex檔案的,刪除APK檔名時同時也刪除與其對應的odex檔案。雖然一般定製時只是對以上兩個資料夾裡的檔案做相應的增減,但我們還是一起來了解system相應目錄常見相應檔案的用途吧。rom版本不同,裡面的APK也會不一樣,其它資料夾下需要改動的較少,或者不需要改動。但app檔案下是製作時的重點,所以詳細列出: \\system\\app \\system\\app\\AlarmClock.apk 鬧鐘 \\system\\app\\Browser.apk 瀏覽器 \\system\\app\\Bugreport.apk Bug報告 \\system\\app\\Calculator.apk 計算器 \system\app\Calendar.apk 日曆 \\system\\app\\CalendarProvider.apk 日曆提供 \\system\\app\\Camera.apk 照相機 \\system\\app\\Contacts.apk 聯絡人 \\system\\app\\DownloadProvider.apk 下載提供 \\system\\app\\DrmProvider.apk DRM數字版權提供 \\system\\app\\Email.apk 電子郵件客戶端 \\system\\app\\FieldTest.apk 測試程式 \\system\\app\\GDataFeedsProvider.apk GoogleData提供 \\system\\app\\Gmail.apk Gmail電子郵件 \\system\\app\\GmailProvider.apk Gmail提供 \\system\\app\\GoogleApps.apk 谷歌程式包 \\system\\app\\GoogleSearch.apk 搜尋工具 \\system\\app\\gtalkservice.apk GTalk服務 \\system\\app\\HTMLViewer.apk HTML檢視器 \\system\\app\\Htc**.apk 整合**客戶端PEEP \\system\\app\\IM.apk 即使通訊元件包含MSN、yahoo通 \\system\\app\\Launcher.apk 啟動載入器 \\system\\app\\Maps.apk 電子地圖 \\system\\app\\MediaProvider.apk 多媒體播放提供 \\system\\app\\Mms.apk 簡訊、彩信 \\system\\app\\Music.apk 音樂播放器 \\system\\app\\PackageInstaller.apk apk安裝程式 \\system\\app\\Phone.apk 電話撥號器 \\system\\app\\Settings.apk 系統設定 \\system\\app\\SettingsProvider.apk 設定提供 \\system\\app\\SetupWizard.apk 設定嚮導 \\system\\app\\SoundRecorder.apk 錄音工具 \\system\\app\\Street.apk 街景地圖 \\system\\app\\Sync.apk 同步程式 \\system\\app\\Talk.apk 語音程式 \\system\\app\\TelephonyProvider.apk 電話提供 \\system\\app\\Updater.apk 更新程式 \\system\\app\\***Services.apk ***服務 \\system\\app\\Vending.apk 製造商資訊 \\system\\app\\VoiceDialer.apk 語音撥號器 \\system\\app\\VoiceSearch.apk 語音搜尋 app資料夾內放的就是內建軟體,有不想要的,直接刪除之。請在刪除之前先弄清楚它能不能刪除。有些官方內建的軟體,刪除了ROM就廢了。當然,你也可以在沒弄清楚的情況下亂刪一氣,只要在刷機完發現問題之後,把刪除的軟體,一個個放回去排查,刷個十遍八遍,大約也就搞定了。所以我們要佩服那麼敢於探索的先驅,不容易啊。 fonts資料夾放的是手機的字型,如果沒有美術細胞的人就不要亂改,改字型有時候會死人的,刺眼、字形不協調、大小不一致等等諸如此類。要改也刷機完以後再改。具體方法要參見自己區的人發的帖子。 lib資料夾顧名思義,是內建軟體的庫檔案。有些軟體需要動態庫支援才能正常使用的,比如常見的輸入法之類的。所以,如果你向一個原本可以正常使用的ROM中加入了新的軟體之後,反而出現 某程式意外關閉 某程式意外結束的情況後,那麼基本上就是你忘了把庫檔案給它移動過去。 bin資料夾中放的是系統內建的工具,像什麼busybox,su之類的都在裡面,沒事不要刪除它,可以新增,但不要刪除。 etc資料夾中放置的是系統的設定,諸如無線、GPS、DHCP、撥號、APN列表之類的設定。這個目錄中,如果你改了重要的CONF檔案,則可能系統出問題。也可以改一部分不重要的東西(比如說APN列表)而不出現問題,但貌似APN列表沒必要改。 framework目錄就是系統的UI了,想改介面的人應該改這個目錄中的檔案。。大約也就是替換一些什麼圖片,換掉介面框架什麼的,改改字型顏色什麼的?以達到改換介面的目的。    media目錄是系統內建的媒體檔案,如開機音樂,內建的通話鈴聲、資訊鈴聲、鬧鐘鈴聲,可以改,但格式是OGG的,可以自己去搜索如何換格式。 usr目錄是系統的部分使用配置,包括鍵盤對映表什麼的,沒事不要改。。。 xbin目錄,好吧,這個目錄可以放一些工具,而且貌似官方本身在裡面放了一個tcpdump,是截獲網路資料包的。沒試過刪除它,推薦有冒險精神的可以刪除之,再將結果告訴我們。       system:系統分割槽.我們刷機器一般就是刷的這個分割槽.       userdata:資料分割槽.       cache:快取分割槽       recovery:Recovery分割槽,相當於建立在hboot與android系統間的一箇中間層,如名字一般,主要用於系統除錯和恢復。.       boot:存放核心和ramdisk的分割槽.       hboot:這個是SPL所在的分割槽,即 bootloader       splash1:這個就是開機第一螢幕了.       radio:這個是無線所在的分割槽,即基帶所在分割槽。        misc:其他分割槽 3.建立一個刷機包,update-指令碼語法說明 ①簡單舉例:建立一個update.zip檔案是很簡單的事情,你所需要做的就是將檔案放置到與Android檔案系統中相對應的資料夾中,然後編寫一個用來複制這些檔案到手機對應位置的update-, 檔案。作為舉例,比如安裝Calculator.apk到system/app資料夾,複製libsec-ril.so檔案到system/lib資料夾:新建一個空資料夾(本文例:G:\android)新建用來放置Calculator.apk的資料夾C:\android\system\app以及用來放置libsec-ril.so的資料夾G:\android\system\lib。建立用來放置update-檔案的資料夾G:\android\-INF\com\google\android。 建立一個名為updater-的檔案,其內容如下: 1. show_progress 0.1 0 2. 3. copy_dir PACKAGE:systemSYSTEM: 4. 5. show_progress 0.1 10 6. 行1和行5:顯示進度條 行3:複製刷機包中的system資料夾到Android的/system 注意:你應該在檔案的最末尾多新增一個空行(也就是行6)將C:\android壓縮中的所有內容壓縮為zip包(千萬記住:是壓縮android這個資料夾中的內容,不是android資料夾本身)為android.zip簽名 ②基礎語法篇 1.copy_dir 語法:copy_dir  ⑩ 預設時區。在/system/default.prop中修改persist.sys.timezone(如果沒有該項,則手動新增)的值為Asia/Shanghai(即東八區),即 persist.sys.timezone=Asia/Shanghai 注:如果沒有/system/default.prop,也可以在/system/build.prop中修改或新增。 ⑾鎖了bl的同學,在修改時注意看執行時的語句,凡是涉及到的功能修改了boot.img,你就趁早刪了update-相關語句重來吧,不然也不會出什麼大事,就是手機卡在第一屏進不去,或者一直進入恢復模式。解決辦法如果你先前備份了,那就還原一下。如果沒備份,重刷底包吧。 ⑿接下來就是打包簽名,按照提示一步一步來就OK了。