TShopping

 找回密碼
 註冊
搜索
查看: 307|回復: 0

[教學] 如何製作Android ROM

[複製鏈接]
發表於 2014-2-7 23:45:04 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 

http://hi.baidu.com/garrych/blog/item/25005c23c06e9845925807fe.html



如何製作Android ROM

有點玩機興趣的android愛好者,應該對custom ROM這種東西都不陌生。我介紹root許可權獲取的時候,就直接用的MoDaCo Custom ROM作為例子。適用於Hero比較好的ROM還有不少,比如Drizzy’s Custom Hero ROM等等,都可以在XDA上找到。肯定有不少朋友感到很好奇,這些ROM都是怎麼做的。考慮到中文社區相關資料比較少,在這裏抛磚引玉,大概原理介紹一下。

對於第三方ROM來講,通常都包括兩部分,一個recovery image,一個update.zip。而大多數的第三方ROM的特色,就是加入了很多東西,比如superuser程式來獲得root許可權,busybox來擴充命令行下的功能,各種各樣的配置檔或者小工具,比如默認打開中文locale,等等。這些看似神奇的改動,都是在 update.zip裏面搞的,custom recovery image的主要作用就是引導用戶的操作,比如讓你先備份,再應用update.zip,再重啟之類的操作。由於custom recovery image和update.zip的耦合性很小,所以不少custom ROM直接都用同一個custom recovery image,這個好像是出自MoDaCo作者之手。再然後,我之前的文章已經有對 recovery image的簡單講解,所以這裏,我主要介紹一下update.zip的製作。


如果我們直接把MoDaCo ROM中的update.zip解包,我們會發現有一個boot.img,一個data檔夾,一個system檔夾,一個META-INF檔夾。這個data檔夾放的是init.rc,而本來在系統中,init.rc就是在data目錄下的。當然,兩者的作用不一樣,這裏的init.rc主要作用是開機執行你希望執行的命令,比如MoDaCo的init.rc就是install busybox。

而值得詳細說明的,就是system文件夾。MoDaCo ROM版本的system下有一系列作者希望放到系統中的工具,對於apk檔,就放到app下,工具就放到bin和xbin下,依此類推。換句話說,system或者data這個目錄層次結構是取決於你自己的,你希望放的東西屬於什麼,應該運行在online系統的什麼目錄下,update.zip裏面就應該是有相應的目錄路徑,然後東西就放在裏面。

具體點,我們現在要依樣畫葫蘆,搞一個新的update.zip,那麼第一步就是首先建立一個檔夾

mkdir new-update

好,假設我新update.zip的作用就是預裝我自己的一個程式,my.apk,那麼,我建立對應的子目錄

mkdir -p new-update/system/app
cp my.apk !$

這樣,system目錄就完成了。但是這時,update.zip的目錄層次還沒完,我們看MoDaCo ROM中的update.zip中有檔夾叫META-INF,這個檔夾很關鍵,除了根目錄下的三個檔外,裏面層層目錄,就包括了一個檔,叫 update-script,內容如下

show_progress 0.1 0

copy_dir PACKAGE:system SYSTEM:

set_perm_recursive 0 0 0755 0644 SYSTEM:xbin
set_perm_recursive 0 0 0755 0644 SYSTEM:sd
set_perm 0 0 04755 SYSTEM:bin/su
set_perm 0 0 04755 SYSTEM:bin/a2sd
set_perm 0 0 04755 SYSTEM:xbin/busybox

copy_dir PACKAGE:data DATA:

show_progress 0.2 0
format BOOT:
write_raw_image PACKAGE:boot.img BOOT:
show_progress 0.2 10

這裏面的內容,大部分是針對你要做的修改設置的。比如

copy_dir PACKAGE:system SYSTEM:

就是把system中新增的工具拷貝到手機上,然後

set_perm_recursive 0 0 0755 0644 SYSTEM:xbin
set_perm_recursive 0 0 0755 0644 SYSTEM:sd
set_perm 0 0 04755 SYSTEM:bin/su
set_perm 0 0 04755 SYSTEM:bin/a2sd
set_perm 0 0 04755 SYSTEM:xbin/busybox

就是設置MoDaCo ROM中新增程式的許可權,然後

copy_dir PACKAGE:data DATA:

把data下的內容(就是那個init.rc)複製到手機上,然後

format BOOT:
write_raw_image PACKAGE:boot.img BOOT:

刷boot分區。

那我們這裏沒有這麼多新增的東西,應該怎麼寫呢?

copy_dir PACKAGE:system SYSTEM:
set_perm_recursive 0 0 04755 SYSTEM:app/my.apk

就可以了。你當然還可以做一些別的事情,比如加一個FORMAT DATA之類的^_^開個玩笑,千萬別這個幹,不然你的資料就全沒了。

好,那麼也就是說,我們要在自己的new-update目錄下也建一個/META-INF/com/google/目錄,然後把新的update-script扔進去。

完了麼?差一點。其實如果你沒有別的需求了,那麼就完了,可以把下面這一小塊跳過。下面這一小塊,是關於boot.img的。在如何修改Android系統的Ramdisk以及boot鏡像文章中,我們談到,如果刷boot鏡像有問題,就要用別的方法讓系統boot我們自己的boot image了,這個別的方法,自然就是用update.zip了。MoDaCo ROM版本的update.zip也包括了一個boot.img,但是如果我們有出於各種需求自己修改的boot.img,自然就可以替換掉原來的了。當然注意,如果加了boot.img,那麼update-script裏面就不能漏掉

write_raw_image PACKAGE:boot.img BOOT:

這句。

好,到現在,我們的new-update目錄下有

/system/app/my.apk
/META-INF/com/google/update-script
/META-INF/MANIFEST.MF
/META-INF/CERT.SF
/META-INF/CERT.RSA
boot.img

恩,那麼就進入打包階段。你可能會問,這有什麼難的,直接zip一下不就得了。如果要是這麼簡單就好了,你打包後,必須把你的內容都sign一下,得到相應的cert,才能在fastboot模式中被承認並成功刷機。

在sign你的檔之前,先做這麼幾件事

  • 打包。進入update檔夾,zip update.zip xxx xxxx xxxx xxxx xxxx。什麼意思呢,就是只把你需要的檔打包,不要用./*作為參數。而且相對路徑最好是在update下面,不要在外面用zip update.zip ./update/*這種命令打包
  • sun網站下載最新的jre
  • 下載這個檔testsign

一定要用JRE1.6.0.16或者更高,我知道這個有點噁心,但是提供下載的testsigh.jar就是按照這個版本或者更高編譯的,你用老版本就運行不了。

好,下下來以後,執行這個命令

~/jre1.6.0_16/bin/java -classpath testsign_path/testsign.jar testsign update.zip update-signed.zip

稍微講解一下,java程式是最新jre下的,testsign_path是你放testsign.jar的地方,建議放到sdk的tool目錄下。update是待sign檔,update-signed是指定的生成檔案名。

sign執行完後,用unzip -l看,會發現

/META-INF/MANIFEST.MF
/META-INF/CERT.SF
/META-INF/CERT.RSA

三個檔的日期屬性變了。我懷疑就是重新生成了這三個檔。但如果之前打包時候不包括這三個檔,sign完又不會新生成。因為不管大局,所以我就沒有仔細研究,有清楚的朋友懇請賜教。

好了,現在,把你自己的update.zip放到sd卡上,在fastboot下通過recovery image引導,執行update.zip,然後就享受你自己的修改成果吧:)

最後提醒一句,任何類似的操作之前,都把自己的手機做好備份。此方法僅供參考,我不對任何因此造成的破壞負責,嘿嘿。



 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-4 03:37 , Processed in 0.081145 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表