Android AOSP基礎(五)不會調試系統源碼,還搞什麼Android?

本文首發於微信公衆號「劉望舒」html

關聯繫列
Android AOSP基礎系列
Android系統啓動系列
應用進程啓動系列
Android深刻四大組件系列
Android深刻理解Context系列
Android深刻理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理機制系列
Android輸入系統系列前端

前言

做爲應用開發,咱們將AOSP源碼下載下來後,去查看源碼已經足夠用,若是想更進一步,能夠學習調試源碼,這樣有助於瞭解系統源碼和原理。調試系統源碼的方式有不少種,今天分享出來的是比較適合應用開發的三種,分別是AOSP源碼項目調試、導入部分源碼調試、新建Android項目調試。java

須要注意的是,這三種方法都不須要整編系統源碼,甚至有的方法只須要下載部分源碼就能夠了,哪一個方法更適合你呢?看完本篇文章就會有答案了。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文件。 ubuntu

接着設置將Android SDK的Java SDK設置爲1.8(No Libraries),這樣Android源碼使用的Java就是Android源碼中的。 微信

確保的項目的SDK爲源碼對應的SDK。 ide

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的調用鏈。

VZhkiF.png

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項目來進行調試,步驟以下:

  1. File --> New --> New Project,一路Next就能夠了。
  2. 新建一個包,由於要調試ActivityStarter類,包名稱就爲ActivityStarter的包名com.android.server.am。
  3. 將9.0版本的ActivityStarter類複製到包中,若是沒有下載源碼,能夠從http://androidxref.com 中下載。
  4. 按照1.3節的內容開始調試。

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等技術,還有程序員成長類文章。
相關文章
相關標籤/搜索