導(dǎo)入Android Studio
Android Studio是閱讀Android源碼最合適的工具,并且還可以調(diào)試,AOSP的idegen模塊就提供了對(duì)Android Studio最好的支持。按照以下步驟,就可以將源碼導(dǎo)入了:
編譯idegen模塊
mmm development/tools/idegen/
生成android.ipr
development/tools/idegen/idegen.sh
運(yùn)行完成后會(huì)在根目錄生成android.ipr和android.iml文件,這里android.ipr就是可以打開(kāi)的項(xiàng)目,而android.iml可以用來(lái)配置加載哪部分文件,因?yàn)樵创a體積過(guò)于龐大,加載會(huì)很慢,而有很多部分是現(xiàn)在不需要研究的,可以?xún)H關(guān)注Framework和Packages部分,在此文件中加入以下幾句:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<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$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/ndk" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
接下來(lái)就可以通過(guò)Android Studio打開(kāi)了。
導(dǎo)入后出現(xiàn)的問(wèn)題
The current inotify(7) watch limit is too low.
解決方法:
sudo vim fs.inotify.max_user_watches = 524288
sudo sysctl -p --system
然后重啟Android Studio。
代碼跳轉(zhuǎn)到Jar
導(dǎo)入完成后,當(dāng)我們進(jìn)行代碼的跳轉(zhuǎn)時(shí),跳轉(zhuǎn)到的是從jar包反編譯的*.class類(lèi),而不是源碼中的類(lèi)。
解決方法如下:
打開(kāi)Project Structure,選擇Project選項(xiàng),將SDK設(shè)置為和源碼版本一致,Android 7.0.0對(duì)應(yīng)的SDK版本號(hào)是24,如下所示:

然后選擇Modules選項(xiàng),選擇android->Dependencies,再點(diǎn)擊右側(cè)的+按鈕,選擇Jars or directories,將frameworks和external目錄添加進(jìn)來(lái),如下所示:

然后選中所有的*.jar文件,然后點(diǎn)擊右側(cè)的向下箭頭,點(diǎn)多次,直到它們位于最下方,如下所示:

這樣調(diào)整完畢之后,就可以跳轉(zhuǎn)到正確的代碼了。
調(diào)試Java代碼
要調(diào)試代碼,首先要打開(kāi)模擬器,注意不是Android Studio自帶的模擬器,而是通過(guò)編譯后的代碼啟動(dòng)的模擬器,否則可能出現(xiàn)代碼不對(duì)應(yīng)的問(wèn)題。
直接運(yùn)行emulator命令是無(wú)法啟動(dòng)的,執(zhí)行方法如下:
source build/envsteup.sh
lunch 6 //和編譯時(shí)對(duì)應(yīng)
emulator
然后通過(guò)Run->Attach debugger to Android process,或者點(diǎn)擊工具欄上的圖標(biāo):

就會(huì)出現(xiàn)剛剛啟動(dòng)的模擬器了,在彈出的對(duì)話框中勾選Show all processes,就可以看到運(yùn)行的全部進(jìn)程:

然后選擇system_process,就可以進(jìn)行調(diào)試了。
調(diào)試Native代碼
因?yàn)槟壳把芯恐攸c(diǎn)在Java部分,這部分知識(shí)之后再補(bǔ)充~