原本想下載Android官方源代碼,沒想到android.git.kernel.org維護,不能訪問,很是遺憾,並所以還鬱悶了幾天。
後來轉投MIUI,沒找到它的源碼,不知道它的"超過40萬人社區開發團隊"是什麼意思,求解具體開發人員幾何,都是誰?
後來一想,居然忘記了CyanogenMod這茬,這但是的的確確的開源啊,個人手機一直也在用CyanogenMod系統的,感受確實不錯。html
1.準備
我得環境以下,
VirtualBox 4.1.2.r73507
Ubuntu11.10 Beta2(32位)
下載CyanogenMod的gingerbread分支
Ubuntu的環境配置你們能夠參考我前面寫的《Android拓展系列(3)--Android源碼下載》,也能夠參考http://source.android.com/。
這裏着重說下Android 2.3以上須要藉助JAVA6,安裝Java6,我推薦以下安裝:java
1
2
3
4
|
$ sudo add-apt-repository
"deb http://archive.canonical.com/ lucid partner"
$ sudo add-apt-repository
"deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-
get
update
$ sudo apt-
get
install sun-java6-jdk
|
其中第二句可能會出錯,不過不要緊,跳過便可。 android
2.安裝repo
由於android.git官方已經不能訪問,因此我這裏提供一個repo文件的下載地址,免的你們處處搜索:http://115.com/file/cl15goo2#repo
把repo拷貝到ubuntu根目錄下得bin下
操做方法:git
1
2
3
4
5
6
|
$mkdir bin
//下載的repo腳本拷貝本地bin文件夾下
//設置本地repo的可執行權限
$chmod a+x ~/bin/repo
$alias repo=
"~/bin/repo"
//這裏我用特地用別名,你們也能夠按常規方法把repo的路徑添加到PATH中
|
3.ubuntu中環境的配置
JDK前面已經說了,其餘的軟件列表以下:github
1
|
$sudo apt-
get
install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool
|
這些軟件都安裝好以後咱們開始下載CyanogenMod源碼。shell
4.下載CyanogenMod源碼ubuntu
1
2
3
4
5
6
7
|
//從用戶根目錄下開始
//建立CyanogenMod文件夾來放置後面全部的代碼
$mkdir CyanogenMod
//獲取gingerbread的分支源代碼
$repo init -u git:
//github.com/CyanogenMod/android.git -b gingerbread
//同步服務器代碼到本地,-j16據網友反應是多開網絡鏈接,從而能提升下載速度
$repo sync -j16
|
這個過程很是的漫長,你們慢慢的等吧,本人是晚上睡覺的時候下載,次日早上醒來就Done了。服務器
5.編譯源碼
在CyanogenMod/device目錄下有不少款手機的對應版本:網絡
裏面有個htc,本人是htc G9,也就是Liberty,咱們點擊看看:app
個人liberty靜靜的優雅的舒服的躺在那裏。
因此本人決定編譯一個我手頭上的liberty對應的系統版本,編譯完成後咱們直接刷機。
第一步:讀取手機上的一些私有配置文件
1
2
|
$cd CyanogenMod/device/htc/liberty
$./extract-files.sh
|
圖示以下:
第二步:生成編譯腳本文件
1
2
3
4
5
|
$cd ~/CyanogenMod/vendor/cyanogen
$./
get
-rommanager
$./extract-google-files
//複製編譯腳本文件到CyanogenMod目錄下,後面編譯整個系統用的就是這個文件
$cp ~/CyanogenMod/vendor/cyanogen/products/cyanogen_lieberty.mk ~/CyanogenMod/buildspec.mk
|
貼上進行時圖片:
第三步:編譯腳本
回到CyanogenMod目錄下,執行腳本。
1
2
3
4
5
6
7
|
//初始化腳本,這個是後面的重要基礎步驟
$source build/envsetup.sh
//選擇編譯的產品
//這個命令須要一小會兒時間,可是又沒提示,耐性等待一下
$lunch cyanogen_liberty-eng
//開始編譯
$make -j4 CYANOGEN_WITH_GOOGLE=
true
otapackage
|
這個過程也是至關的漫長,還好通常狀況下咱們只是第一次須要項目整個編譯,後面只須要編譯某個模塊。
惋惜完成的時候我忘記截圖了,惋惜不能上圖了。
在編譯的過程當中,咱們有一點要特別注意,虛擬機的內存不要過小,本人剛開始分配虛擬機512M內存,一下子就出錯,從新編譯又一下子出錯,如此重複,並且還致使某個文件被破壞掉了(values-cs/strings.xml中某行少一個右尖括號,這個我百思不得其解),後來我把虛擬機內存調到1024M就一直編譯經過了。
第四步:生產刷機zip包。
1
|
./vendor/cyanogen/tools/squisher
|
有圖爲賞:
用這個zip包,我刷到我手機上,一切正常。
6.定製ROM
有了以上的環境後,咱們就能夠大展手腳,深度定製ROM, 作本身的操做系統,本身的CyanogenMod,本身的MIUI,本身的Android系統。
舉個最簡單的例子:
咱們換一下默認menu菜單的選中背景圖,咱們進入CyanogenMod/frameworks/base/core/res/res/mdpi目錄下(由於htc liberty的分辨率是480x320),找到圖片highlight_pressed.png,替換爲綠色的背景:
那麼修改資源文件後,咱們須要從新編譯framework-res.apk:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//回到根目錄
$cd
//切換到管理員權限
$sudo -s
//進入CyanogenMod目錄,並初始化腳本文件
$cd CyanogenMod
$source build/envsetup.h
//選擇產品
$lunch cyanogen_liberty-eng
//進入資源編譯目錄(或者它的子目錄也能夠)
$cd frameworks/
base
/core/res
//開始編譯framework-res.apk
$mm
|
編譯完成,示意圖以下:
在CyanogenMod/out/target/product/liberty/system/framework目錄下生成了一個framework-res.apk文件,就是咱們修改Menu選中項圖片後新打的資源包。
如今咱們須要把這個資源包更新到手機中。
USB連上手機後,一切正常的話(adb固然也是事前要裝好的哦),打開終端:
1
2
3
4
5
6
|
//使其可寫
$adb remount
//替換手機中資源包
$adb push ~/CyanogenMod/
out
/target/product/liberty/system/framework/framework-res.apk /system/framework/
//重啓手機後生效
$adb reboot
|
重啓後,進入桌面,咱們點擊Menu,選擇一項:
修改資源包,能夠修改樣式,顯示圖片,調整佈局等等。
你也能夠直接修改framework代碼,在framework/base/core/java目錄下,修改對應的類,好比邏輯處理,樣式重繪等等,而後同上面相似編譯,把生成的framework.jar替換掉手機的/system/framework下的framework.jar,重啓手機便可看到效果。
你也能夠添加系統應用,刪除系統應用等等,這裏特別提到一點,系統應用能夠經過以下命令刪除(具備root權限):
1
2
3
4
5
|
$adb remount
$adb shell
#cd system/app
//用rm刪除系統FM應用
#rm FM.apk
|
有了這些基礎知識,我相信咱們後面的深度定製ROM必定很是精彩!
7.小結 本文以CyanogenMod源碼編譯總結了Android改造系統的一個基本環境,是咱們以後ROM系統定製,優化的基礎,是android深刻學習的必會技能,特此分享,共勉!