Android拓展系列(5)–CyanogenMod源碼下載和編譯(Android ROM定製基礎篇)

來源:互聯網
上載者:User

本來想下載Android官方原始碼,沒想到android.git.kernel.org維護,不能訪問,非常遺憾,並因此還鬱悶了幾天。 
後來轉投MIUI,沒找到它的源碼,不知道它的"超過40萬人社區Team Dev"是什麼意思,求解具體開發人員幾何,都是誰?
後來一想,竟然忘記了CyanogenMod這茬,這可是的的確確的開源啊,My Phone一直也在用CyanogenMod系統的,感覺確實不錯。

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,我推薦如下安裝:

$ 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

其中第二句可能會出錯,不過沒關係,跳過即可。 

2.安裝repo
因為android.git官方已經不能訪問,所以我這裡提供一個repo檔案的,免的大家到處搜尋:http://115.com/file/cl15goo2#repo 
把repo拷貝到ubuntu根目錄下得bin下
操作方法:

$mkdir bin//下載的repo指令碼拷貝本地bin檔案夾下//設定本地repo的可執行許可權$chmod a+x ~/bin/repo$alias repo="~/bin/repo"//這裡我用特意用別名,大家也可以按常規方法把repo的路徑添加到PATH中

3.ubuntu中環境的配置
JDK前面已經說了,其他的軟體列表如下:

$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源碼。

4.下載CyanogenMod源碼

//從使用者根目錄下開始//建立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,我們點擊看看:


我的liberty靜靜的優雅的舒服的躺在那裡。
所以本人決定編譯一個我手頭上的liberty對應的系統版本,編譯完成後我們直接刷機。
第一步:讀取手機上的一些私人設定檔

$cd CyanogenMod/device/htc/liberty$./extract-files.sh

圖示如下:

第二步:產生編譯指令檔

$cd ~/CyanogenMod/vendor/cyanogen  $./get-rommanager$./extract-google-files//複製編譯指令檔到CyanogenMod目錄下,後面編譯整個系統用的就是這個檔案$cp ~/CyanogenMod/vendor/cyanogen/products/cyanogen_lieberty.mk  ~/CyanogenMod/buildspec.mk

貼上進行時圖片:

第三步:編譯指令碼
回到CyanogenMod目錄下,執行指令碼。

//初始化指令碼,這個是後面的重要基礎步驟$source build/envsetup.sh//選擇編譯的產品//這個命令需要一小會兒時間,但是又沒提示,耐性等待一下$lunch cyanogen_liberty-eng//開始編譯$make -j4 CYANOGEN_WITH_GOOGLE=true otapackage 

這個過程也是相當的漫長,還好一般情況下我們只是第一次需要項目整個編譯,後面只需要編譯某個模組。
可惜完成的時候我忘記了,可惜不能了。
在編譯的過程中,我們有一點要特別注意,虛擬機器的記憶體不要太小,本人剛開始分配虛擬機器512M記憶體,一會兒就出錯,重新編譯又一會兒出錯,如此重複,而且還導致某個檔案被破壞掉了(values-cs/strings.xml中某行少一個右角括弧,這個我百思不得其解),後來我把虛擬機器記憶體調到1024M就一直編譯通過了。

第四步:生產刷機zip包。

./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:

//回到根目錄$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當然也是事前要裝好的哦),開啟終端:

//使其可寫$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許可權):

$adb remount$adb shell#cd system/app//用rm刪除系統FM應用#rm FM.apk

有了這些基礎知識,我相信我們後面的深度定製ROM一定非常精彩!

7.小結
本文以CyanogenMod源碼編譯總結了Android改造系統的一個基本環境,是我們之後ROM系統定製,最佳化的基礎,是android深入學習的必會技能,特此分享,共勉! 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.