Android AOSP基础(五)不会调试系统源码,还搞什么Android?
本文首發于微信公眾號「劉望舒」
關聯系列
Android AOSP基礎系列
Android系統啟動系列
應用進程啟動系列
Android深入四大組件系列
Android深入理解Context系列
Android深入理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理機制系列
Android輸入系統系列
前言
作為應用開發,我們將AOSP源碼下載下來后,去查看源碼已經足夠用,如果想更進一步,可以學習調試源碼,這樣有助于了解系統源碼和原理。調試系統源碼的方式有很多種,今天分享出來的是比較適合應用開發的三種,分別是AOSP源碼項目調試、導入部分源碼調試、新建Android項目調試。
需要注意的是,這三種方法都不需要整編系統源碼,甚至有的方法只需要下載部分源碼就可以了,哪個方法更適合你呢?看完本篇文章就會有答案了。
1. AOSP源碼項目調試
這種調試方法的前提是要將AOSP源碼下載下來,關于下載AOSP源碼,可以查看Android AOSP基礎(二)AOSP源碼下載這篇文章,另外還需要將AOSP源碼導入到Android Studio中,并且配置SDK和JDK,這個在Android AOSP基礎(四)Source Insight和Android Studio導入系統源碼講過,因為這篇文章多次用到配置SDK和JDK這一知識點,再次講一遍。
1.1 配置SDK和JDK
由于我們下載的是9.0的AOSP源碼,SDK版本也應該對應為API 28,如果沒有就去SDK Manager下載即可。 點擊File -> Project Structure-->SDKs配置項目的JDK、SDK。 創建一個新的JDK,這里取名為1.8(No Libraries),刪除其中classpath標簽頁下面的所有jar文件。
接著設置將Android SDK的Java SDK設置為1.8(No Libraries),這樣Android源碼使用的Java就是Android源碼中的。
確保的項目的SDK為源碼對應的SDK。
1.2 新建Android工程配置
實際上不按如下配置也可以調試源碼,但是打開AS時會在Event Log處報錯且不能消除提醒,因此這里建議還是要配置下。 在File-->Project Structure-->Modules中添加一個Android FrameWork:
修改Manifest file等路徑為下圖中類似的路徑,因為我們常調試這個目錄所以這么設置,你也可以設置其他的路徑。
在AS最頂部的工具條中選擇Edit Configurations
在Run/Debug Configurations彈框中點擊左上角的加號,添加一個Android App配置,按下圖進行配置:
1.3 調試源碼
打開Genymotion,運行Android 9.0的模擬器。 應用程序的啟動過程是大部分開發都熟悉的知識點,如果還不熟悉可以看Android深入四大組件(六)Android8.0 根Activity啟動過程(前篇)和Android深入四大組件(七)Android8.0 根Activity啟動過程(后篇)這兩篇文章。 本篇文章的調試源碼部分都以這個知識點為基礎進行調試。 應用程序的啟動時會調用ActivityStarter的startActivityMayWait方法,下圖是AMS到ApplicationThread的調用鏈。
ctrl+N 查找類ActivityStarter,在ActivityStarter的startActivityMayWait方法上打斷點,也可以在其他地方打斷點,比如AMS的startActivity方法,這里只是舉一個例子。
點擊菜單的Run-->Attach Debugger to Android Process或者上方工具條的Attach Debugger to Android Process圖標,
勾選Show all processer,選擇system_process,如下圖所示。
在Genymotion模擬器中點擊Gallery應用,我們設的斷點就會生效,就可以愉快的進行調試了。
2. 導入部分源碼進行調試
第一種方法需要對源碼的idegen模塊進行單編,生成android.ipr以便于AS導入AOSP全部源碼。事實上,我們平常調試源碼也用不到AOSP全部源碼,導入部分源碼也可以調試。這里導入最常用的frameworks/base目錄作為舉例。
在當前項目File-->New-->Import project,或者關閉當前項目,選擇Import project,如下圖所示。
選擇導入frameworks/base目錄,一路Next:
這是AS會列出frameworks/base目錄下的所有項目,因為要調試ActivityStarter類,這里只需要導入frameworks/base/services/core/java就可以了。
剩下一路Next就可以了,項目加載進來后,按照本文1.1小節來配置項目的JDK、SDK。接下來的調試步驟和1.3小節是一樣的。
3. 新建Android項目進行調試
如果我們沒有下載源碼,或者不想導入那么多源碼,也可以新建一個Android項目來進行調試,步驟如下:
4.總結
這篇文章介紹了3種調試源碼的方法,作為應用開發來說,這三種調試方法就夠用了,總體來說都是大同小異,適合不同需求的開發人員,按照我個人的理解,最推崇第一種方法,畢竟這種方法一勞永逸。好了AOSP基礎系列就講到這,接下來你可以開始閱讀和調試源碼了,建議從Android系統啟動系列開始。
Android AOSP基礎系列
Android AOSP基礎(一)VirtualBox 安裝 Ubuntu
Android AOSP基礎(二)AOSP源碼下載
Android AOSP基礎(三)Android系統源碼的整編和單編
Android AOSP基礎(四)Source Insight和Android Studio導入系統源碼
Android AOSP基礎(五)Android Studio調試系統源碼的三種方式
這里不僅分享大前端、Android、Java等技術,還有程序員成長類文章。
轉載于:https://juejin.im/post/5d4838d5f265da03e275d135
總結
以上是生活随笔為你收集整理的Android AOSP基础(五)不会调试系统源码,还搞什么Android?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鲁迅散文——随感录三十五
- 下一篇: 介绍Android 与 GPhone的书