文章目錄
CyanogenMod是一個開源的基於Android作業系統,也就是大家經常刷機用的CM,至於如何刷機以及如何編譯google原生的Android。
可以參考我的iteye部落格:http://hualang.iteye.com/admin/categories/166795
在此,有意個建議。如果是做Android開發的最好還是用google親生的手機作為測試機(nexus one、nexus s、nexus prime),因為這些機型不僅效能強大,支援原生作業系統,還支援很多其他機型目前還沒有的功能(比如我的HTC desire z不支援NFC),另外如果想刷機也可以找到n個版本。而其他機型總是存在這樣那樣的問題,做開發遇到基於其他機型的問題時也難以找到合適的答案,閑話不說了。
我博文是關於如何下載、編譯CyanogenMod,以及如何自訂自己的ROM系列,比如我們比較熟悉的小米手機的MIUI就是基於CyanogenMod。但是因為自己換了不同手機,所以以前基於Nexus S的一些操作不適合於現在的機型了,但是大概流程是一樣的。在這裡最最麻煩的不是下載源碼,而是--編譯CyanogenMod。各種各樣的問題,每一次編譯都要至少1、2個小時,我話費了5天來編譯源碼,期間遇到各種各樣的問題,隨著一點一點的查詢也逐個的解決了,今天終於編譯成功、刷機成功了。
機型:HTC desire z(HTC vision)
Android源碼:CyanogenMod 7(下載的最新的CM源碼2.3.7編譯還有問題,所以用的是稍微老一點2.3.4的)
電腦:Thinkpad 32位
系統:Ubuntu 10.10
問題解決:如果你的機型不是這個,編譯的源碼版本也不是這個,遇到問題最好還是去外面查查(程式員必備技術,你們懂得),下面是一些對你有協助的網站
1、CyanogenMod Wiki。可以根據上面的教程來下載並編譯適合你機型的CM
http://wiki.cyanogenmod.com/wiki/Main_Page
2、XDA Developer。遇到技術問題多上上面問,大牛很多
http://forum.xda-developers.com/index.php
3、github:如果你編譯時間缺少某些包,可以到上面找找看
https://github.com/koush
4、CyanogenMod官網,用於下載ROM
http://www.cyanogenmod.com(被牆了,so...)
在開始之前你需要root你的手機,在www.cyanogenmod.com裡找到針對你的機型的ROM下載並刷機。(國內這段時間牆了,so...)
有關刷機、root等可以到我的iteye部落格中找到,也可以到MIUI官網找一些關於刷機的教程
http://hualang.iteye.com/admin/categories/166795
下面開始具體的步驟
1、安裝軟體
首先需要你安裝並配置好Android環境,這個不解釋
For 32-bit & 64-bit systems:
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
For 64-bit only systems:
-
g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib
-
NOTE:
gcc-4.3-multilib g++-4.3-multilib
is no longer available for Ubuntu 11.04 64-bit, but should still build without issue.
-
NOTE:On Ubuntu 10.10, and variants, you need to enable the parter repository to install sun-java6-jdk:
-
add-apt-repository "deb http://archive.canonical.com/ maverick partner"
Download RomManager
2、建立目錄
在終端中輸入下列命令下載並執行repo
建立一個目錄,用於存放原始碼
$mkdir -p cyanogenmod
$mkdir -p bin
3、初始化下載庫
在終端中輸入下列命令下載並執行repo:
-
$curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
-
$chmod a+x ~/bin/repo
-
注意:你需要重啟電腦來使其生效
$chmod a+x ~/bin/repo
4、下載CyanogenMod源碼
在終端中輸入下列命令下載並執行repo:
現在輸入下列命令來初始化版本庫:
-
$cd ~/cyanogenmod
-
$repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
-
$repo sync
-
或者repo sync -j16(-jn中的n表示開啟的網路連接數,開啟多個網路連接可以加速下載速度)
-
出現如下的狀態就表示下載完成了(耗時教長,我用的是4M頻寬下了3個小時,大小4G多)
-
5、擷取屬性檔案
此時需要將手機通過USB串連到Ubuntu上。如果一開始不知別手機裝置的話,可以參考http://www.cnblogs.com/loulijun/archive/2012/01/10/2318316.html來解決
然後在終端中輸入
$adb devices
如果顯示如下錯誤的話,可以通過如下命令來解決(以後再遇到就用這種方式解決就是了)
$sudo adb kill-server
$sudo adb devices
-
$cd ~/cyanogenmod/device/htc/vision/
-
$./extract-files.sh
-
NOTE: 注意,如果你擷取檔案的時候缺少某些如照相機或radio等檔案時,你可以到上面的網站找找是否你需要的檔案
6、下載 RomManager
-
$cd ~/android/system/vendor/cyanogen/
-
$./get-rommanager
7、編譯CyanogenMod
編譯源碼
編譯源碼之前,因為源碼預設設定是在64位機編譯的,所以你需要修改其為32位即可
------------------------------64位改為32位方法-----------------------------------------------------
build/core/main.mk:73: You are attempting to build on a 32-bit system.
build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
是因為cm預設只支援64-bit,而我的電腦是32位的,所以需要修改一些檔案即可
將
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
4個檔案中的
LOCAL_CFLAGS += -m64LOCAL_LDFLAGS += -m64
注釋掉,或者將“64”換成“32”
LOCAL_CFLAGS += -m32LOCAL_LDFLAGS += -m32
然後,將./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改為:
ifneq (i686,$(findstring i686,$(build_arch)))
這樣,32位的電腦也可以正常編譯了
NOTE:最新版本的CM源碼沒有ifneq(64...)這部分,所以就不許要改了
-----------------------------------------------------------------------------------------------------------
-
$. build/envsetup.sh && brunch vision
-
編譯成功後
-
8、刷機
正常情況下可以刷成功,刷機教程看上面
9、編譯期間遇到的問題
(1)執行.extract-files.sh如果擷取手機的屬性檔案缺少的話,如。可以到
https://github.com/koush/proprietary_vendor_htc/tree/gingerbread/vision/proprietary
上尋找你缺少的檔案,下載後放到
/home/loulijun/cyanogenmod/vendor/htc/vision/proprietary下即可
(2)undefined reference to 'msm_device_mute'、libaudio.so錯誤
這種錯誤網上的有些方法依然不能解決,我是換了從cm2.3.7最新的源碼為cm2.3.4的。或者關閉audio的編譯選項,可以到vendor和device下找到相應的mk檔案將設定audio的true設定為false
(3)undefined reference to 'HAL_getCameraInfo'、libcameraservice錯誤
解決辦法:
$cd /cyanogenmod/device/htc/vision
$vim BoardConfig.mk
將BOARD_USE_FROYO_LIBCAMERA := false(設定為false)
$cd /cyanogenmod/vendor/htc/vision/
$vim BoardConfigVendor.mk
將USE_CAMERA_STUB設定為false(這樣編譯就好了)
另外還可以參考
http://forum.xda-developers.com/showthread.php?t=899674
裡面有解決camera問題的方法(如果上述不奏效的話),不過上面是基於nexus one的,原理一樣