最近在看《Android系統(tǒng)源代碼情景分析》荤傲,于是嘗試著在自己系統(tǒng)上編譯系統(tǒng)的源碼耻涛,中間遇到不少問題呐伞,在這里記錄一下吧敌卓,一來以后自己可以回顧,二來也希望能幫到有需要的人伶氢。
1. 搭建環(huán)境
一開始我用jdk1.7趟径,在編譯過程中報(bào)錯(cuò),換成1.6即可癣防。
下載鏈接:http://pan.baidu.com/s/1eRNFNLw 密碼:wthp
安裝g++4.4和gcc4.4(據(jù)說其他版本可能會(huì)報(bào)錯(cuò)蜗巧,我沒試過,遇到的朋友可以交流一下)
$sudo apt-get install gcc-4.4
$sudo apt-get install gcc-4.4-multilib
$sudo apt-get install g++-4.4
$sudo apt-get install g++-4.4-multilib
2. 下載源代碼
書中介紹了一個(gè)下載源代碼的簡易方法蕾盯,奈何需要代理幕屹,下載速度很慢,于是另尋他徑下載了一個(gè)版本级遭。壓縮包只有500多兆望拖,很快就下載好了。以下是百度云鏈接
http://pan.baidu.com/s/1mhMNC60 密碼:0fi4
下載完解壓大概2g多装畅。按照書中的習(xí)慣靠娱,我解壓到了~/Android路徑下。解壓過程中也碰到了問題掠兄,就是在ubuntu下解壓一直提示錯(cuò)誤說.git文件夾無法解壓,很奇怪不知道什么問題锌雀,于是我把壓縮包拷貝到了虛擬機(jī)xp系統(tǒng)中完成解壓的蚂夕,然后又拷回來,于是終于有了一份完整的android系統(tǒng)源代碼了腋逆。
3. 開始編譯源代碼
于是進(jìn)入到~/Android目錄下婿牍,直接輸入make即開始編譯。這個(gè)過程注定不是一帆風(fēng)順的惩歉,肯定會(huì)遇到各種各樣的問題等脂,這里我把我遇到的問題貼出來
1). /usr/bin/ld: cannot find -lncurses 這個(gè)報(bào)錯(cuò)是找不到對(duì)應(yīng)的so庫,只需要去搜索下載對(duì)應(yīng)庫即可撑蚌。這一類問題很多上遥,就不一一列舉了。
apt-get install libncurses5-dev
有時(shí)安裝了對(duì)應(yīng)的庫争涌,仍然報(bào)錯(cuò)粉楚,這時(shí)需要找到這個(gè)庫文件,然后拷貝到/usr/lib/目錄下即可解決。
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so /usr/lib/libncurses.so
2). dalvik/vm/native/dalvik_system_Zygote.c:191: error: storage size of ‘rlim’ isn’t known 找不到變量
添加兩個(gè)頭文件即可
vim dalvik/vm/native/dalvik_system_Zygote.c
#include <sys/time.h>
#include <sys/resource.h>
還有一些問題當(dāng)時(shí)沒有記錄下來模软,不過基本上google一下伟骨,都能找到相應(yīng)的解決辦法。直到最后生成system.img燃异,就算編譯成功了携狭。
4. 編譯android內(nèi)核源代碼和打包模塊
按照書上的講解順利的完成了這一步。這里有g(shù)oldfish2.6.29的下載地址
http://pan.baidu.com/s/1c196L3q 密碼:ku02
5. 在android studio中閱讀系統(tǒng)源碼
mmm development/tools/idegen/
./development/tools/idegen/idegen.sh
執(zhí)行完命令后會(huì)在目錄下生成一些文件回俐。這時(shí)不要android studio打開整個(gè)工程目錄逛腿,這樣是建立不了索引的,也就無法在各個(gè)類之間跳轉(zhuǎn)鲫剿。
只要打開Android studio鳄逾,點(diǎn)擊File > Open,選擇剛剛生成的android.ipr就好了灵莲。這樣就能完美導(dǎo)入了雕凹。
6. 心得體會(huì)
總的來說還是比較順利的吧,中間遇到過很多問題政冻,但是網(wǎng)上基本都能找到答案枚抵,果然是前人種樹,后人乘涼明场。所以我這里也把我遇到的問題匯總一下汽摹,希望能幫到后面踩到同樣坑的人了。