馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
本帖最後由 YCx 於 2015-11-29 05:25 編輯
此篇教學文基於@sharonliu 大的兩篇教程
(【XPT】如何建立cm11的開發編譯環境(一)、【XPT】如何建立cm11的開發編譯環境(二)~編譯CM11)
修正部份、詳述,並參考官方CyanogenMod編譯LT18i CM10教學
(How To Build CyanogenMod Android for Sony Ericsson Xperia Arc ("anzu"))
而成,希望以更簡單的方式讓大家學習從源碼編譯CyanogenMod,在此特別感謝sharonliu大以及CyanogenMod團隊。
本教學力求完整正確,但疏漏之處在所難免,還請讀者諸君與各界先進不吝賜教是幸。
///不論你是翻到的還是搜尋到的,請不要想說『啊,好長,改天再看吧』的收藏起來或是加到我的最愛--根據統計,這樣做的後果是你會忘記他的存在,直到你整理收藏夾或我的最愛時才會找到!
注意,本教學以Xperia ARC S編譯CM10為例,若你是其他裝置的使用者,請先詢問後再操作。
以下內容中有(*1)等等標注部份,煩請下拉至n樓觀看註解
另外,內容中部份的截圖,拍攝的時間和介面和其他不同(如下面以ppa的方式安裝jdk的那張,拍攝時間較早),他們都是同一個系統,只是更換主題罷了,請各位多多包含。
(教學本體耗時約3天才得以完成,欲轉載請通知本人並取得同意,感謝各位)
最後更新日期:
2015/11/25
yyyy/mm/dd
*11/25:更新在6樓
教學開始
步驟零、預先準備
所謂『工欲善其事,必先利其器』,要從源碼編譯CyanogenMod之前,我們要準備一點東西
1.Android手機/平板電腦一臺
2.安裝Linux系統(*1)的電腦一臺(建議使用64bit,32bit的個人沒試過)
3.4GB以上的ram(愈多愈快)
4.硬碟剩餘20GB以上(下載CM10源碼後實際大小如圖)
01
(圖片:01原始碼大小)
(當然,若硬碟使用SSD,編譯時間會比一般的硬碟快上不少)
5.正常的mirco USB傳輸線
6.未被限制(*2)的網路(愈快愈好)
此教學的使用環境如下
1.Xperia ARC S手機一臺
2.電腦
CPU:Intel i7 2670QM 2.2GHz (turbo boost 3.1GHz)(四核八線程)
RAM:16GB DDR3
系統:Windows 8.1 Pro 64bit + Ubuntu 14.04 64bit 雙系統
硬碟:INTEL SSDSC2CW120A3 128GB
3.WIFI網路環境
4.Sony原廠傳輸線一條
不建議使用虛擬機的方式開啟Linux編譯,除了效能會差很多外,出了什麼差錯也不好解決。如果不會安裝Linux系統就GOOGLE一下吧!
步驟一,安裝JAVA 6 JDK及編譯時所需套件
*java 6=java1.6
*CM11已支援使用java 7編譯
本篇教學須使用JAVA 6 JDK,若你之前有安裝過其他版本的JDK,請直接在終端機輸入以下指令移除
- sudo apt-get purge openjdk-* icedtea-* icedtea6-*
複製代碼
02
(圖片:02移除java)
初學者提示:
終端機使用Ctrl+Alt+T開啟,用法跟Windows的命令提示字元相同(但部份指令不同),建議初學者依照下圖的方式釘選至左側啟動欄
03
(圖片:03新增終端機至啟動欄)
初學者提示:
以下輸入有sudo(*3)的指令後會提示輸入密碼,當然,你看不到你輸入了幾個英文數字,這是預設功能
接下來,讓我們以ppa的方式簡單安裝JAVA 6 JDK,這樣就不用設定一堆複雜的變數
(要按Enter時直接按就好)
- sudo add-apt-repository ppa:webupd8team/java
- sudo apt-get update && sudo apt-get install oracle-java6-installer
複製代碼
下載及安裝完畢後,你會得到這張圖
04
(圖片:04安裝java)
*想要安裝java 7 JDK的人,僅須將以上指令中的 install oracle-java6-installer 改成 install oracle-java7-installer 即可
如圖所示,你的JDK已安裝完畢。
做的好,繼續用終端機指令安裝編譯時需要的套件
輸入
- sudo apt-get install bison build-essential curl flex g++-multilib gcc-multilib git-core gnupg gperf lib32ncurses5-dev lib32readLine-gplv2-dev lib32z1-dev libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop squashfs-tools xsltproc pngcrush schedtool zip zlib1g-dev
- (只有一行,整段複製貼上即可)
複製代碼
05
(圖片:05下載編譯時套件)
結束後,終端機會顯示
06
(圖片:06下載編譯時套件完成)
OK,第一步驟完成了
步驟二、安裝與設定repo及CyanogenMod源碼下載
*若已從網路上下載到某版本CM源碼可跳過此步驟,解壓縮源碼到你指定的位置以及在該位置初始化repo即可
關於repo(*4)的說明,我會在(*4)裡解釋。現在先照指示操作。
初學者提示:
從這段開始會用到一些Linux系統中常用的指令,為了避免有看不懂的地方,下面會穿插較多的初學者提示。
輸入以下指令
- mkdir -p ~/bin
- PATH=~/bin:$PATH
- cd ~/bin
- curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
複製代碼
07
(圖片:07下載repo)
初學者提示:
相信不少人開始霧煞煞了,沒關係,我逐行為各位講解
mkdir -p ~/bin <= 建立bin資料夾(*5)
PATH=~/bin:$PATH <= 將~/bin加入於環境配置中(*6)
cd ~/bin <= 轉移到~/bin(*7)
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo <= 在此網址中取得repo並下載於~/bin,檔案名稱叫「repo」(*8)
執行完以上指令後,repo會被下載到家目錄裡的bin資料夾中,我們可以開啟bin資料夾檢查
08
(圖片:08repo位置)
再輸入一行指令
初學者提示:
chmod a+x ~/bin/repo <= 設定repo檔案權限為a+x(*9)
09
(圖片:09repo權限)
很好,我們在完成上面這步後把電腦重新開機(讓前面說的環境配置生效),就可以開始下載CyanogenMod的源碼了,輸入以下指令
- mkdir -p ~/android/system
- cd ~/android/system/
複製代碼
接下來的這步會依編譯的CM版本而有所不同,各版本的源碼位置如下
CM10(Android 4.1.2):
git://github.com/CyanogenMod/android.git -b jellybean
CM10.1(Android 4.2.2):
git://github.com/CyanogenMod/android.git -b cm-10.1
CM10.2(Android 4.3.1):
git://github.com/CyanogenMod/android.git -b cm-10.2
CM11(Android 4.4.4):
git://github.com/CyanogenMod/android.git -b cm-11.0
本教學以CM10做範例,故下載CM10源始碼
- repo init -u git://github.com/CyanogenMod/android.git -b jellybean
複製代碼
想要編譯其他版本的僅須更替 " git://xxxxxxx " 即可
10
(圖片:10repo init)
初學者提示:
mkdir -p ~/android/system <= 在" ~/ "下建立android目錄,android目錄中再建立system目錄
cd ~/android/system/ <= 轉移到 ~/android/system
repo init -u git://github.com/CyanogenMod/android.git -b jellybean <= 從"git://xxxxxxxx"中初始化repo
對了,你想把源碼放在哪裡都可以,只要更改路徑即可,例如我想下載到行動硬碟裡,而行動硬碟叫SP PHD U3,路徑在
/media/ycx/SP PHD U3(*10),那就在行動硬碟裡建立資料夾(記得,先打開你行動硬碟的根目錄)
cd /media/ycx/"SP PHD U3" <= 轉移到SP PHD U3(*11)
mkdir -p android/system <= 在SP PHD U3下建立android目錄,android目錄中再建立system目錄
repo init -u git://github.com/CyanogenMod/android.git -b jellybean <= 從"git://xxxxxxxx"中初始化repo
好極了,讓我們開始下載CyanogenMod源碼吧,下載的速度取決於你的網路連線,如果網路受到某些限制,那下載途中可能會出現某些麻煩的情況,這就是為什麼我一開始希望各位使用未被限制的網路
確保你正位於~/android/system,輸入
11
(圖片:11repo sync)
這樣就會開始下載Cyanogenmod源碼了,會下載約16GB的資料,請耐心等待
初學者提示:
repo sync <= 使用repo同步源碼
有人可能會問:「如果我家網路斷線了要怎麼辦?」「還沒下載完畢,想要晚點再下載要怎麼做?」
沒關係,這裡教你解決辦法
當你想中斷下載時,按下鍵盤上的Ctrl+Z即可結束源碼同步的動作。下次在同樣的位置中執行以下指令,電腦就會在上次中斷的地方繼續同步源碼
repo sync
(你沒看錯,指令都一樣)
下載完成後,我們就能繼續下一步驟。
12
(圖片:12source下載完畢)
步驟三、準備device-specific code
*從其他地方下載到的源碼(通常為tgz格式(*12))中可能包含device-specific code,這點請留意。
*此步驟僅支援有CyanogenMod官方支援(cyanogenmod official support)的裝置,其他裝置請參閱(*13)。
*說真的,我不太確定device-specific code該怎麼翻譯,翻成裝置個別碼又有點奇怪,大家把它當做每台Android裝置的個別架構就好。
每台Android裝置的device-specific code不一定相同,舉例來說,一樣是32GB ROM不能插卡的情況下,LT26i的分區裡只有一部份能裝載應用程式(/data),再分一大部份作為儲存裝置;而Nexus5卻是全部能裝載應用程式又能當做儲存裝置。因此,我們要取得device-specific code之後才能為個別的裝置編譯ROM。
*這個步驟會透過CyanogenMod開發的懶人程式自動配置device-specific code,免除手動添加Device tree、vendor tree、hardware tree、kernel架構等等麻煩動作。
確保你已經在~/android/system中(重開終端機的人,請輸入cd ~/android/system)
- source build/envsetup.sh
- breakfast anzu
複製代碼
14
(圖片:14envsetup.sh)
初學者提示:
source build/envsetup.sh <= 啟動源始碼工具批次檔envsetup.sh(請參閱(*14))
breakfast anzu <= 至CyanogenMod的github下載及配置anzu的device-specific code(請參閱(*15))
其中,anzu是Xperia arc/s(LT15i/LT18i)在CyanogenMod中的代號,個別裝置的代號請自行搜索。舉例來說,我的前前支手機Xperia mini pro(SK17i)的代號是mango、手上的Nexus5的代號是hammerhead、sharonliu 大之前用的Xperia U的代號是kumquat等等。
15
(圖片:15breakfast anzu)
它會執行一段時間,請耐心等候。
16
(圖片:16device-specific code配置完成)
出現這張圖後,你可以繼續執行下一步。
步驟四、提取裝置自身的blobs
*blob請參考(*16)
這個步驟開始需要連接你的裝置到電腦端,在那之前,我們要先下載Linux專用的adb指令。
到Google Android Developer下載吧
http://developer.android.com/sdk/index.html
(32bit與64bit的檔案不同,請留意)
下載完成後放任意位置,對檔案點擊滑鼠右鍵直接解壓縮
18
(圖片:18解壓縮AndroidSDK)
19
(圖片:19解壓縮中AndroidSDK)
解壓縮完後,進入資料夾內的sdk/platform-tools中,你可以找到adb和fastboot兩個檔案。
adb和fastboot的功用這裡不再贅述,相信刷過機的人都會明白,若真的不清楚請自行搜索。
20
(圖片:20Check adb fastboot位置)
把兩個檔案用滑鼠右鍵複製,再貼上到家目錄下,家目錄位置如圖
13
(圖片:13家目錄)
接著開啟終端機,輸入以下指令
- cd ~/
- sudo su
- mv adb /bin
- mv fastboot /bin
- cd /bin
- chmod 777 adb
- chmod 777 fastboot
- exit
複製代碼
初學者提示:
cd ~/ <= 轉移到~/
sudo su <= 用sudo的方式使用root帳號
mv adb /bin <= 移動adb到/bin
mv fastboot /bin <= 移動fastboot到/bin
cd /bin <= 轉移到/bin
chmod 777 adb <= 設定adb權限為777
chmod 777 fastboot <= 設定fastboot權限為777
exit <= 離開root帳號
這樣一來,我們就能直接使用adb和fastboot了,你可以輸入"adb --version"來確定adb指令是否正常
21
(圖片:21移動adb fastboot)
很好,現在確認你的裝置已經刷上了未被精減的CyanogenMod,我們要提取裝置的blobs了
初學者提示:
不建議使用官方軔體(stock firmware)提取,個人第一次編譯就是因為使用官方軔體提取,導致編譯完成刷入後卡在開機動畫。或許是裝置本身驅動不兼容而導致的原因。
將你的裝置透過傳輸線連接電腦,並開啟USB偵錯模式以供連接,電腦端輸入
初學者提示:
./extract-files.sh <= 執行extract-files.sh,請參考(*17)
17
(圖片:17extract-files.sh)
提取完畢後,你可以拔開傳輸線。恭喜,我們即將執行最後的步驟--編譯。
步驟五、編譯CyanogenMod
確保你已經在~/android/system中(重開終端機的人,請輸入cd ~/android/system)
- . build/envsetup.sh
- brunch anzu
複製代碼
*請將anzu更換成你裝置的代號
初學者提示:
. build/envsetup.sh <= 啟動envsetup.sh掛載專用指令
brunch anzu <= 編譯anzu的CyanogenMod,請參考(*18)
22
(圖片:22brunch anzu)
做的好,你的第一版CyanogenMod開始編譯了。過程中除了等待時間長外,電腦風扇還會高速運轉,請不要慌張。
23
(圖片:23編譯中)
初學者提示:
不建議在安靜的地方(EX. 圖書館或自修室)執行此步驟,否則風扇的聲音會打擾到他人。
編譯的時間視各位CPU、RAM、硬碟的效能而定,若是你一邊開啟其他程式一邊編譯,那速度當然會慢下來,請多加注意。
疑難排解:
(以下是個人有幾次遇到的情況,分享給各位)
24
(圖片:24解決編譯問題)
這個情況代表你在步驟四中,執行./extract-files.sh時出了狀況,有部份檔案沒提取到,那我們只能手動複製。
圖片中反白處為缺少的檔案及位置,我們只要從其他(同裝置的)CyanogenMod中複製貼上即可。
如圖
25
(圖片:25解決編譯問題之位置)
接下來使用指令繼續從中斷處編譯
我們要怎麼知道電腦花了多少時間編譯呢?
事實上有個簡單的方法
我們在輸入任何指令前,指令前方加上time即可。
舉例來說,我們原先輸入"brunch anzu",只要改成以下即可
如圖所示,以本教學使用的配備使用了43分鐘多編譯(*19)完成,採用傳統硬碟的可能需要2小時多才能完成
26
(圖片:26編譯中)
如此一來,眼睛就不用緊緊盯著碼表看了
27
(圖片:27編譯完成)
如果出現以上圖片時,恭喜,你的CyanogenMod完成了。
到家目錄中的android/system/out/target/product/anzu看看你的成果吧
28
(圖片:28out編譯完成)
打鐵趁熱,刷到裝置裡試試吧!
ok,剩餘部份請往下拉繼續觀看。
(教學本體耗時約3天才得以完成,欲轉載請通知本人並取得同意,感謝各位)
(順帶一提,完成本篇教學的時間正好是個人生日,就把這篇當作是自己給自己的生日禮物吧!) |
Android, Xperia, 通用, LT18i, 如何, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android, Android
評分
-
查看全部評分

|