調(diào)試Android Framework

前言

在開發(fā)android沙盒時茉盏,我們需要涉及到大量Android Framework層的知識,需要對Framework層的運行細(xì)節(jié)有深入的理解饿敲,光靠靜態(tài)看代碼我們是很難從整體把握整個Framework層辽幌,因此,能夠動態(tài)調(diào)試Framework層的代碼是我們開發(fā)沙盒的一個非常重要的前提條件膛堤。

環(huán)境

  • Android Studio
      我們采用android studio調(diào)試Framework
  • AOSP
      這里你要確保已經(jīng)下載和編譯好了android系統(tǒng)源碼,我這里選擇android4.4_r1

過程

為了成功將源碼導(dǎo)入android studio,我們需要為AS生成項目工程配置文件晌该,切換到AOSP根目錄下面肥荔,依次執(zhí)行:

source build/envsetup.sh
lunch 1
development/tools/idegen/idegen.sh

上述命令會在AOSP根目錄下生成名為android.ipr的文件,我們接下來用android studio打開這個文件朝群,android studio會導(dǎo)入整個AOSP到工程中燕耿,如下圖:


我們接下來打開模擬器和ddms


ddms

在繼續(xù)接下來的步驟之前,這里我們簡單介紹下Java平臺的調(diào)試姜胖。Java平臺的調(diào)試是有一個規(guī)范化的標(biāo)準(zhǔn)的誉帅,那就是JPDA(Java Platform Debugger Architecture);通過 JPDA 提供的 API右莱,開發(fā)人員可以方便靈活的搭建 Java 調(diào)試應(yīng)用程序蚜锨。 JPDA 主要由三個部分組成:Java 虛擬機工具接口(JVMTI),Java 調(diào)試線協(xié)議(JDWP)慢蜓,以及 Java 調(diào)試接口(JDI)亚再。Java程序的調(diào)試無非就是通過一個調(diào)試器(debugger)獲取對應(yīng)Java虛擬機的信息,在dalvik虛擬機內(nèi)部有一個專門的jdwp線程晨抡,Android系統(tǒng)的adbd進(jìn)程通過socket與各個虛擬機的jdwp線程進(jìn)行通信氛悬,外部調(diào)試器通過adb工具與adbd通信進(jìn)而完成與jdwp的通信。我們通常所說的「attach debugger」指的就是這個意思——連接到指定的需要調(diào)試的進(jìn)程耘柱。
  這個jdwp線程會根據(jù)AndroidManifest.xml中application標(biāo)簽的屬性android:debuggable以及default.prop中的ro.debuggable屬性值來決定當(dāng)前app是否可以被調(diào)試如捅。由于虛擬機默認(rèn)ro.debuggable=1,因此所有的app都可以被調(diào)試调煎,如ddms上圖所示镜遣。
  如果想詳細(xì)了解JDWP的工作細(xì)節(jié),可以參照android源碼dalvik/vm/jdwp下面的代碼汛蝙。

JDWP的原理

我們通過ddms可以看到所有的jdwp線程都連接到了主機的8700端口烈涮,因此朴肺,通過這個端口我們可以調(diào)試所有的app的java層代碼窖剑。

了解了調(diào)試原理之后坚洽,我們很自然的就會想到用android studio去連接8700這個端口,具體配置:
點擊菜單run->Edit Configurations ,添加一個遠(yuǎn)程調(diào)試配置


遠(yuǎn)程調(diào)試配置

遠(yuǎn)程調(diào)試配置

接下來我們用ddms點擊選擇我們需要調(diào)試的app(這里很重要額)西土,這里我們選擇桌面launcher讶舰,


Paste_Image.png

在類ActivityManagerNative的函數(shù)StartActivity處下斷點,然后點擊工具欄那個“臭蟲”按鈕連接上DDMS需了,

ddms顯示“臭蟲”說明連接上

我們點擊android桌面的任何一個icon打開一個Activity都會被斷下跳昼,如下圖所示:

在ActivityManagerNative的StartActivity處設(shè)斷點

從intent參數(shù)可以看出來,我們點擊打開了計算器app肋乍。

總結(jié)

通過本文我們學(xué)習(xí)了如何調(diào)試android framework層代碼鹅颊,也為我們后續(xù)的沙盒開發(fā)準(zhǔn)備一把倚天劍。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墓造,一起剝皮案震驚了整個濱河市堪伍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌觅闽,老刑警劉巖帝雇,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛉拙,居然都是意外死亡尸闸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門孕锄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮廉,“玉大人,你說我怎么就攤上這事畸肆』侣” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵恼除,是天一觀的道長踪旷。 經(jīng)常有香客問我,道長豁辉,這世上最難降的妖魔是什么令野? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮徽级,結(jié)果婚禮上气破,老公的妹妹穿的比我還像新娘。我一直安慰自己餐抢,他們只是感情好现使,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布低匙。 她就那樣靜靜地躺著,像睡著了一般碳锈。 火紅的嫁衣襯著肌膚如雪顽冶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天售碳,我揣著相機與錄音强重,去河邊找鬼。 笑死贸人,一個胖子當(dāng)著我的面吹牛间景,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艺智,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼倘要,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了十拣?” 一聲冷哼從身側(cè)響起封拧,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎父晶,沒想到半個月后哮缺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡甲喝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年尝苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埠胖。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡糠溜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出直撤,到底是詐尸還是另有隱情非竿,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布谋竖,位于F島的核電站红柱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蓖乘。R本人自食惡果不足惜锤悄,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘉抒。 院中可真熱鬧零聚,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚂会,卻和暖如春淋样,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颂龙。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工习蓬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纽什,地道東北人措嵌。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像芦缰,于是被迫代替她去往敵國和親企巢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容