Android源碼分析之準(zhǔn)備:Android Studio調(diào)試AOSP代碼

導(dǎo)入Android Studio

Android Studio是閱讀Android源碼最合適的工具,并且還可以調(diào)試,AOSPidegen模塊就提供了對(duì)Android Studio最好的支持。按照以下步驟,就可以將源碼導(dǎo)入了:

編譯idegen模塊

mmm development/tools/idegen/

生成android.ipr

development/tools/idegen/idegen.sh

運(yùn)行完成后會(huì)在根目錄生成android.iprandroid.iml文件,這里android.ipr就是可以打開(kāi)的項(xiàng)目,而android.iml可以用來(lái)配置加載哪部分文件,因?yàn)樵创a體積過(guò)于龐大,加載會(huì)很慢,而有很多部分是現(xiàn)在不需要研究的,可以?xún)H關(guān)注FrameworkPackages部分,在此文件中加入以下幾句:

<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,如下所示:

project

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

dependencies

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

dependencies

這樣調(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):

debugger

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

processes

然后選擇system_process,就可以進(jìn)行調(diào)試了。

調(diào)試Native代碼

因?yàn)槟壳把芯恐攸c(diǎn)在Java部分,這部分知識(shí)之后再補(bǔ)充~

上一篇:Android源碼分析之準(zhǔn)備:AOSP編譯

下一篇:Android源碼分析之App啟動(dòng)流程(一)

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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