自己动手调试Android源码(超简单)
在自己動手編譯Android最新源碼一文中,我們?yōu)樽约壕幾g了一份最新的Android源碼.很多時候,我們編譯源碼的目的不僅僅是嘗試一番,而是希望對其進行調試,并修改源碼,看看其中一些關鍵機制的運行原理.比如你對AMS掌握不深,那么就來單獨的調試一下;又或者是說你想看看launcher的實現(xiàn)原理,同樣也可以自己動手調試.更或者說,你覺得某個模塊很不理想,想自己修改一番,那就更好了.
下面,我們來說說如何調試源碼.同樣這里的工作平臺還是ubuntu 16.04和Android Studio.另外,本文參考源碼中developent/tools/idegen/README文檔.
基礎準備
源碼編譯完整之后,我們就可以導入源碼到Android Studio中進行調試了.那么如何調試呢?
在源碼中,存在idegen模塊,該模塊專門用來為idea工具生成系統(tǒng)源碼的project.
在開始編譯該模塊之前,首先確保你已經編譯過Android源碼了,如果沒有,可以參考上篇文章進行編譯.
和編譯普通的模塊一樣,我們用mmm命令編譯idegen.在開始編譯之前,檢查out/host/linux-x86/framework/目錄下是否存在idegen.jar文件,存在則說明你已經編譯過該模塊,否者,則需要編譯.執(zhí)行如下命令即可:
其中mmm development/tools/idegen/執(zhí)行完成后會生成idegen.jar,而sodo ./development/tools/idegen/idegen.sh則會在源碼目錄下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.
簡單的說明一下這三個文件的作用:
android.ipr:通常是保存工程相關的設置,比如編譯器配置,入口,相關的libraries等
android.iml:則是主要是描述了modules,比如modules的路徑,依賴關系等.
android.iws:則主要是包含了一些個人工作區(qū)的設置.
到目前為止,我們就完成了源碼準備工作.
源碼導入
2.1 修改AS配置文件
編譯成功后,現(xiàn)在我們就可以將源碼導入Android Studio了.但是在導入之前,我們先修改一下Android studio的配置:32位系統(tǒng)下修改idea.vmoptions,64位下修改idea64.vmotions
調整其中的-Xms和-Xmx參數(shù)值,官方要求至少在748m以上,根據(jù)實際情況進行配置即可.
然后進入android-studio目錄下的bin文件夾,執(zhí)行如下命令啟動Android Studio
2.2 導入源碼
接下來,我們導入源碼:打開Android Studio,點擊File->Open,選擇剛才生成的android.ipr文件即可,然后就是漫長的等待,注意此時是將源碼完全導入到AS中了,不出意外,你會覺得AS運行非常之慢.那么該如何做呢?繼續(xù)往下看吧.
很多情況下,我們希望不導入某些模塊,那么就可以在導入前修改android.iml文件,通過添加配置的方式告訴AS不導入某些模塊,比如現(xiàn)在我不想導入art模塊,那么就在android.iml文件中添加:
<excludeFloder url="file://$MODULE_DIR$"/abi>不難發(fā)現(xiàn),其格式為:<excludeFloder url="file://$MODULE_DIR$"/模塊名>
注:編譯生成的android.iml文件中已經默認排除了一下模塊,通過搜索excludeFolder關鍵字可找到.
我這里只保留了framworks和packages模塊,將其他模塊全部排除了,因此在android.iml中添加了以下配置:
<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" />此時導入AS后的結果如下所示:
這里寫圖片描述
如果已經將全部項目導入到AS中,而又想排除一些模塊該怎么辦呢?
此時可以在Project Scureture的Mobules中進行排除.比如這里我想排除art模塊,那么做法如下圖:
這里寫圖片描述
2.3 源碼查看
導入的過程是很漫長滴.導入完成之后,現(xiàn)在我們就可以在android studio中查看源碼,如圖:
這里寫圖片描述
2.4 解決源碼跳轉錯誤問題
為了編碼Android源碼跳轉錯誤問題,還需要做以下兩點:配置SDK,JDK及修改依賴,具體操作如下:
2.4.1 配置SDK和JDK
我們需要為當前項目配置JDK和SDK:點擊Project Structure,進入到項目配置界面,在SDKs設置中加入必須的JDK和SDK:
這里寫圖片描述
為了確保使用的是Android源碼庫中的文件,我們將新添加的這個JDK的Classpath中的內容全部刪掉,也就是需要刪掉Classpath標簽頁下的所有jar包,然后在下面Android API 24 platform中指定使用剛才新增的JDK,最后在右側選中Project標簽,在Project SDK中選擇對應的Android API版本.
2.4.2 修改依賴
同樣打開Projects Stucture,選擇Modules.首先將所有的依賴刪除(為了方便,后邊如果缺少,可以自行添加進來)
這里寫圖片描述
刪除完成之后(保留下圖所示的兩項),并點擊右邊的"+"添加Frameworks和external目錄,結果如下圖所示:
這里寫圖片描述
到現(xiàn)在為止,你就可以正常的查看源碼,并在源碼間進行跳轉了.
源碼調試
搞定上面之后,現(xiàn)在我們來看看如何用Android Studio一步一步調試代碼.
首先為剛才導入的工程添加Framework,以便讓AS將它作為一個Android工程,從而能讓我們進行調試,如果項目已經是Android工程了(目前最新的android源碼導入到as中就是作為一個android工程,因此不需要在做這一步了)則不需要再次進行添加了.
在Project Structure中的Mouble中,為其添加Framework,如下圖所示:
這里寫圖片描述
接下來就可以用debugger進行調試跟蹤代碼了.首先使用emulator命令啟動我們的虛擬機.接下來選擇Attache debugger to Android process,在彈出的Choose Process框內必須選擇Show all processes,否則看不到相關的進程:
這里寫圖片描述
調試演示
這里我一調試com.android.settings模塊為例進行說明.
在SettingActivity中下斷點,如圖:
這里寫圖片描述
選擇com.android.settings
這里寫圖片描述
做完這些后,我們點擊android 虛擬機中的設置,隨后就可以一步一步調試了
這里寫圖片描述
總結
要想調試源碼,不難發(fā)現(xiàn),一共需要以下幾個步驟:
現(xiàn)在呢,你可以放心的去調試了,在這期間出現(xiàn)問題可自行Google解決,一般都能找到答案.
總結
以上是生活随笔為你收集整理的自己动手调试Android源码(超简单)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android libcutils库中整
- 下一篇: 用Android Studio调试Fra