Framework編譯并使用Android studio閱讀源碼指導(dǎo)

如果沒整編過源碼,可以直接執(zhí)行如下命令單編idegen模塊:
source build/envsetup.sh
make idegen
如下截圖:


圖片1.png

圖片2.png

如上截圖可以看出,idegen模塊編譯成功。
idegen模塊編譯成功后,會(huì)在 out/host/linux-x86/framework目錄下生成idegen.jar。


圖片3.png

執(zhí)行如下命令:
sudo development/tools/idegen/idegen.sh
圖片4.png

這時(shí)會(huì)在源碼根目錄生成android.iml 和 android.ipr 兩個(gè)文件,這兩個(gè)文件一般是只讀模式,這里建議改成可讀可寫,否則,在更改一些項(xiàng)目配置的時(shí)候可能會(huì)出現(xiàn)無法保存的情況。如下截圖:
圖片29.png

sudo chmod 777 android.iml

sudo chmod 777 android.ipr


圖片6.png

執(zhí)行之后,如下截圖,android.iml 和 android.ipr已經(jīng)設(shè)置可讀可寫了。
圖片7.png

由于要將所有源碼導(dǎo)入AS會(huì)導(dǎo)致第一次加載很慢,可以在android.iml中修改excludeFolder配置,將不需要看的源碼排除掉。
在android.iml中搜索excludeFolder,在下面加入這些配置。
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />

如下截圖:


圖片8.png

Exclude不需要的代碼目錄
File -> Project Structure -> Modules中可以通過Excluded來篩選代碼目錄,比如我們選擇bionic目錄,點(diǎn)擊Excluded,bionic目錄會(huì)變?yōu)槌壬?,bionic字段會(huì)出現(xiàn)在右側(cè)視圖中,說明該目錄已經(jīng)被Excluded掉,通俗來講就是被排除在工程之外。如果不希望bionic目錄被Excluded掉,再次點(diǎn)擊Excluded,bionic目錄會(huì)變?yōu)榛疑?。如下截圖:


圖片9.png

圖片10.png

從源碼目錄可以看出,部分目錄會(huì)變?yōu)槌壬?,說明該目錄已經(jīng)被Excluded掉,通俗來講就是被排除在工程之外。
圖片30.png

Build framework源碼之后會(huì)發(fā)現(xiàn)類名出現(xiàn)橘黃色J的警告。并提示如下提示:


圖片11.png

打開terminal,檢查當(dāng)前配置。
cat /proc/sys/fs/inotify/max_user_watches
圖片12.png

65536
當(dāng)前值太小,需要修改 /etc/sysctl.conf 文件,修改這個(gè)文件需要root權(quán)限
第一步:在/etc/sysctl.conf文件的最后添加一行代碼。
1.使用 vim 編輯。vim /etc/sysctl.conf
2.最后一行添加代碼。fs.inotify.max_user_watches = 524288
圖片13.png

3.該文件是只讀文件,保存到只讀文件。
:w !sudo tee %
4.會(huì)提示一個(gè)警告,大致是說 文件 /etc/sysctl.conf 已變動(dòng),并且在 Vim 中的緩沖區(qū)也已變動(dòng),確定([O]), 加載文件((L)),按 [O] ,之后按 [Enter],完成修改。
5.最后退出 vim,由于是只讀文件,使用強(qiáng)制退出:
:q!
第二步:運(yùn)行此命令將剛才的修改生效。
sudo sysctl -p


圖片14.png

第三步:重啟 Android Studio。

源碼整編
source build/envsetup.sh
lunch
使用make -j8執(zhí)行編譯。
編譯過程當(dāng)中可能會(huì)出現(xiàn)編譯不通過,如下幾個(gè)問題進(jìn)行應(yīng)對(duì):
執(zhí)行make update-api命令:


圖片15.png

需要安裝m4、gperf
命令如下:
sudo apt-get install m4
sudo apt install gperf
再次執(zhí)行make update-api命令,結(jié)果如下圖:


圖片16.png

如果執(zhí)行make -j8命令后仍然出現(xiàn)如下編譯問題:
圖片17.png

首先安裝apt-file
sudo apt-get install apt-file
安裝完成后,可能需要提示更新。
圖片18.png

執(zhí)行sudo apt-file update命令

使用sudo apt-file search命令查找?guī)焖诘陌?,安裝對(duì)應(yīng)的包。


圖片19.png

圖片20.png

通過上面可以看到,libncurses.so對(duì)應(yīng)的是lib32ncurses-dev。需要執(zhí)行如下命令進(jìn)行安裝:
sudo apt-get install lib32ncurses-dev
繼續(xù)執(zhí)行如下make -j8進(jìn)行編譯仍然出現(xiàn)編譯問題,如下截圖:
圖片21.png

繼續(xù)通過apt-file search命令查找?guī)焖诘陌?,安裝對(duì)應(yīng)的包,后續(xù)就不繼續(xù)截圖了。
經(jīng)過漫長等待,編譯后可能出現(xiàn)如下情況:
圖片22.png

若出現(xiàn)上述錯(cuò)誤,需要切換python2.7。
1).查看ubuntu下的所有python版本
ls /usr/bin/python*
2)切換python版本
sudo update-alternatives --config python
如下截圖:
圖片23.png

上圖可看出,已切換到phthon相應(yīng)的版本,再次執(zhí)行make -j12如下圖:
圖片24.png

上述提示build completed successfully,說明編譯成功。
編譯成功后,執(zhí)行emulator命令啟動(dòng)模擬器,執(zhí)行后可能出現(xiàn)如下情況:
圖片25.png

問題:

在window系統(tǒng)下,用VMware搭建ubuntu系統(tǒng),在ubuntu系統(tǒng)搭建安卓emulator,啟動(dòng)emulator時(shí)報(bào)錯(cuò)如上截圖。
解決方法:
1.關(guān)閉ubuntu系統(tǒng);
2.VMware右擊ubuntu虛擬機(jī)名字,選擇設(shè)置;
3.虛擬機(jī)設(shè)置界面選擇【硬件】下的【處理器】,勾選虛擬化引擎下的【虛擬化Intel VT-x/EPT或者AMD-V/RVI(V)】,點(diǎn)擊確定;
4.重啟ubuntu系統(tǒng)。


圖片26.png

繼續(xù)emulator命令啟動(dòng)模擬器,如下圖:
圖片27.png

emulator模擬器正式啟動(dòng)。
圖片28.png

如上述,類名沒有出現(xiàn)橘黃黃色J的警告了,可以正式閱讀源碼了,和普通項(xiàng)目一樣,可以進(jìn)行Java代碼跳轉(zhuǎn)了,方便閱讀代碼了。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容