日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android AOSP基础(五)不会调试系统源码,还搞什么Android?

發(fā)布時(shí)間:2024/4/17 Android 175 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android AOSP基础(五)不会调试系统源码,还搞什么Android? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文首發(fā)于微信公眾號「劉望舒」

關(guān)聯(lián)系列
Android AOSP基礎(chǔ)系列
Android系統(tǒng)啟動系列
應(yīng)用進(jìn)程啟動系列
Android深入四大組件系列
Android深入理解Context系列
Android深入理解JNI系列
Android解析WindowManager
Android解析WMS系列
Android解析AMS系列
Android包管理機(jī)制系列
Android輸入系統(tǒng)系列

前言

作為應(yīng)用開發(fā),我們將AOSP源碼下載下來后,去查看源碼已經(jīng)足夠用,如果想更進(jìn)一步,可以學(xué)習(xí)調(diào)試源碼,這樣有助于了解系統(tǒng)源碼和原理。調(diào)試系統(tǒng)源碼的方式有很多種,今天分享出來的是比較適合應(yīng)用開發(fā)的三種,分別是AOSP源碼項(xiàng)目調(diào)試、導(dǎo)入部分源碼調(diào)試、新建Android項(xiàng)目調(diào)試。

需要注意的是,這三種方法都不需要整編系統(tǒng)源碼,甚至有的方法只需要下載部分源碼就可以了,哪個方法更適合你呢?看完本篇文章就會有答案了。

1. AOSP源碼項(xiàng)目調(diào)試

這種調(diào)試方法的前提是要將AOSP源碼下載下來,關(guān)于下載AOSP源碼,可以查看Android AOSP基礎(chǔ)(二)AOSP源碼下載這篇文章,另外還需要將AOSP源碼導(dǎo)入到Android Studio中,并且配置SDK和JDK,這個在Android AOSP基礎(chǔ)(四)Source Insight和Android Studio導(dǎo)入系統(tǒng)源碼講過,因?yàn)檫@篇文章多次用到配置SDK和JDK這一知識點(diǎn),再次講一遍。

1.1 配置SDK和JDK

由于我們下載的是9.0的AOSP源碼,SDK版本也應(yīng)該對應(yīng)為API 28,如果沒有就去SDK Manager下載即可。 點(diǎn)擊File -> Project Structure-->SDKs配置項(xiàng)目的JDK、SDK。 創(chuàng)建一個新的JDK,這里取名為1.8(No Libraries),刪除其中classpath標(biāo)簽頁下面的所有jar文件。

接著設(shè)置將Android SDK的Java SDK設(shè)置為1.8(No Libraries),這樣Android源碼使用的Java就是Android源碼中的。

確保的項(xiàng)目的SDK為源碼對應(yīng)的SDK。

1.2 新建Android工程配置

實(shí)際上不按如下配置也可以調(diào)試源碼,但是打開AS時(shí)會在Event Log處報(bào)錯且不能消除提醒,因此這里建議還是要配置下。 在File-->Project Structure-->Modules中添加一個Android FrameWork:

修改Manifest file等路徑為下圖中類似的路徑,因?yàn)槲覀兂U{(diào)試這個目錄所以這么設(shè)置,你也可以設(shè)置其他的路徑。

在AS最頂部的工具條中選擇Edit Configurations

在Run/Debug Configurations彈框中點(diǎn)擊左上角的加號,添加一個Android App配置,按下圖進(jìn)行配置:

1.3 調(diào)試源碼

打開Genymotion,運(yùn)行Android 9.0的模擬器。 應(yīng)用程序的啟動過程是大部分開發(fā)都熟悉的知識點(diǎn),如果還不熟悉可以看Android深入四大組件(六)Android8.0 根Activity啟動過程(前篇)和Android深入四大組件(七)Android8.0 根Activity啟動過程(后篇)這兩篇文章。 本篇文章的調(diào)試源碼部分都以這個知識點(diǎn)為基礎(chǔ)進(jìn)行調(diào)試。 應(yīng)用程序的啟動時(shí)會調(diào)用ActivityStarter的startActivityMayWait方法,下圖是AMS到ApplicationThread的調(diào)用鏈。

ctrl+N 查找類ActivityStarter,在ActivityStarter的startActivityMayWait方法上打斷點(diǎn),也可以在其他地方打斷點(diǎn),比如AMS的startActivity方法,這里只是舉一個例子。

點(diǎn)擊菜單的Run-->Attach Debugger to Android Process或者上方工具條的Attach Debugger to Android Process圖標(biāo),

勾選Show all processer,選擇system_process,如下圖所示。

在Genymotion模擬器中點(diǎn)擊Gallery應(yīng)用,我們設(shè)的斷點(diǎn)就會生效,就可以愉快的進(jìn)行調(diào)試了。

2. 導(dǎo)入部分源碼進(jìn)行調(diào)試

第一種方法需要對源碼的idegen模塊進(jìn)行單編,生成android.ipr以便于AS導(dǎo)入AOSP全部源碼。事實(shí)上,我們平常調(diào)試源碼也用不到AOSP全部源碼,導(dǎo)入部分源碼也可以調(diào)試。這里導(dǎo)入最常用的frameworks/base目錄作為舉例。

在當(dāng)前項(xiàng)目File-->New-->Import project,或者關(guān)閉當(dāng)前項(xiàng)目,選擇Import project,如下圖所示。

選擇導(dǎo)入frameworks/base目錄,一路Next:

這是AS會列出frameworks/base目錄下的所有項(xiàng)目,因?yàn)橐{(diào)試ActivityStarter類,這里只需要導(dǎo)入frameworks/base/services/core/java就可以了。

剩下一路Next就可以了,項(xiàng)目加載進(jìn)來后,按照本文1.1小節(jié)來配置項(xiàng)目的JDK、SDK。接下來的調(diào)試步驟和1.3小節(jié)是一樣的。

3. 新建Android項(xiàng)目進(jìn)行調(diào)試

如果我們沒有下載源碼,或者不想導(dǎo)入那么多源碼,也可以新建一個Android項(xiàng)目來進(jìn)行調(diào)試,步驟如下:

  • File --> New --> New Project,一路Next就可以了。
  • 新建一個包,因?yàn)橐{(diào)試ActivityStarter類,包名稱就為ActivityStarter的包名com.android.server.am。
  • 將9.0版本的ActivityStarter類復(fù)制到包中,如果沒有下載源碼,可以從http://androidxref.com 中下載。
  • 按照1.3節(jié)的內(nèi)容開始調(diào)試。
  • 4.總結(jié)

    這篇文章介紹了3種調(diào)試源碼的方法,作為應(yīng)用開發(fā)來說,這三種調(diào)試方法就夠用了,總體來說都是大同小異,適合不同需求的開發(fā)人員,按照我個人的理解,最推崇第一種方法,畢竟這種方法一勞永逸。好了AOSP基礎(chǔ)系列就講到這,接下來你可以開始閱讀和調(diào)試源碼了,建議從Android系統(tǒng)啟動系列開始。

    Android AOSP基礎(chǔ)系列

    Android AOSP基礎(chǔ)(一)VirtualBox 安裝 Ubuntu
    Android AOSP基礎(chǔ)(二)AOSP源碼下載
    Android AOSP基礎(chǔ)(三)Android系統(tǒng)源碼的整編和單編
    Android AOSP基礎(chǔ)(四)Source Insight和Android Studio導(dǎo)入系統(tǒng)源碼
    Android AOSP基礎(chǔ)(五)Android Studio調(diào)試系統(tǒng)源碼的三種方式


    這里不僅分享大前端、Android、Java等技術(shù),還有程序員成長類文章。

    轉(zhuǎn)載于:https://juejin.im/post/5d4838d5f265da03e275d135

    總結(jié)

    以上是生活随笔為你收集整理的Android AOSP基础(五)不会调试系统源码,还搞什么Android?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。