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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

自己动手调试Android源码(超简单)

發(fā)布時間:2025/3/15 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手调试Android源码(超简单) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在自己動手編譯Android最新源碼一文中,我們?yōu)樽约壕幾g了一份最新的Android源碼.很多時候,我們編譯源碼的目的不僅僅是嘗試一番,而是希望對其進行調(diào)試,并修改源碼,看看其中一些關(guān)鍵機制的運行原理.比如你對AMS掌握不深,那么就來單獨的調(diào)試一下;又或者是說你想看看launcher的實現(xiàn)原理,同樣也可以自己動手調(diào)試.更或者說,你覺得某個模塊很不理想,想自己修改一番,那就更好了.

下面,我們來說說如何調(diào)試源碼.同樣這里的工作平臺還是ubuntu 16.04和Android Studio.另外,本文參考源碼中developent/tools/idegen/README文檔.


基礎(chǔ)準備

源碼編譯完整之后,我們就可以導入源碼到Android Studio中進行調(diào)試了.那么如何調(diào)試呢?
在源碼中,存在idegen模塊,該模塊專門用來為idea工具生成系統(tǒng)源碼的project.

在開始編譯該模塊之前,首先確保你已經(jīng)編譯過Android源碼了,如果沒有,可以參考上篇文章進行編譯.
和編譯普通的模塊一樣,我們用mmm命令編譯idegen.在開始編譯之前,檢查out/host/linux-x86/framework/目錄下是否存在idegen.jar文件,存在則說明你已經(jīng)編譯過該模塊,否者,則需要編譯.執(zhí)行如下命令即可:

soruce build/envsetup.sh mmm development/tools/idegen/ sudo ./development/tools/idegen/idegen.sh

其中mmm development/tools/idegen/執(zhí)行完成后會生成idegen.jar,而sodo ./development/tools/idegen/idegen.sh則會在源碼目錄下生成IEDA工程配置文件:android.ipr,android.iml及android.iws.

簡單的說明一下這三個文件的作用:

android.ipr:通常是保存工程相關(guān)的設置,比如編譯器配置,入口,相關(guān)的libraries等
android.iml:則是主要是描述了modules,比如modules的路徑,依賴關(guān)系等.
android.iws:則主要是包含了一些個人工作區(qū)的設置.

到目前為止,我們就完成了源碼準備工作.


源碼導入

2.1 修改AS配置文件

編譯成功后,現(xiàn)在我們就可以將源碼導入Android Studio了.但是在導入之前,我們先修改一下Android studio的配置:32位系統(tǒng)下修改idea.vmoptions,64位下修改idea64.vmotions
調(diào)整其中的-Xms和-Xmx參數(shù)值,官方要求至少在748m以上,根據(jù)實際情況進行配置即可.
然后進入android-studio目錄下的bin文件夾,執(zhí)行如下命令啟動Android Studio

./studio.sh

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文件中已經(jīng)默認排除了一下模塊,通過搜索excludeFolder關(guān)鍵字可找到.

我這里只保留了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后的結(jié)果如下所示:


這里寫圖片描述

如果已經(jīng)將全部項目導入到AS中,而又想排除一些模塊該怎么辦呢?
此時可以在Project Scureture的Mobules中進行排除.比如這里我想排除art模塊,那么做法如下圖:


這里寫圖片描述

2.3 源碼查看

導入的過程是很漫長滴.導入完成之后,現(xiàn)在我們就可以在android studio中查看源碼,如圖:


這里寫圖片描述

2.4 解決源碼跳轉(zhuǎn)錯誤問題

為了編碼Android源碼跳轉(zhuǎn)錯誤問題,還需要做以下兩點:配置SDK,JDK及修改依賴,具體操作如下:

2.4.1 配置SDK和JDK

我們需要為當前項目配置JDK和SDK:點擊Project Structure,進入到項目配置界面,在SDKs設置中加入必須的JDK和SDK:


這里寫圖片描述


為了確保使用的是Android源碼庫中的文件,我們將新添加的這個JDK的Classpath中的內(nèi)容全部刪掉,也就是需要刪掉Classpath標簽頁下的所有jar包,然后在下面Android API 24 platform中指定使用剛才新增的JDK,最后在右側(cè)選中Project標簽,在Project SDK中選擇對應的Android API版本.

2.4.2 修改依賴

同樣打開Projects Stucture,選擇Modules.首先將所有的依賴刪除(為了方便,后邊如果缺少,可以自行添加進來)


這里寫圖片描述

刪除完成之后(保留下圖所示的兩項),并點擊右邊的"+"添加Frameworks和external目錄,結(jié)果如下圖所示:


這里寫圖片描述

到現(xiàn)在為止,你就可以正常的查看源碼,并在源碼間進行跳轉(zhuǎn)了.


源碼調(diào)試

搞定上面之后,現(xiàn)在我們來看看如何用Android Studio一步一步調(diào)試代碼.
首先為剛才導入的工程添加Framework,以便讓AS將它作為一個Android工程,從而能讓我們進行調(diào)試,如果項目已經(jīng)是Android工程了(目前最新的android源碼導入到as中就是作為一個android工程,因此不需要在做這一步了)則不需要再次進行添加了.

在Project Structure中的Mouble中,為其添加Framework,如下圖所示:


這里寫圖片描述

接下來就可以用debugger進行調(diào)試跟蹤代碼了.首先使用emulator命令啟動我們的虛擬機.接下來選擇Attache debugger to Android process,在彈出的Choose Process框內(nèi)必須選擇Show all processes,否則看不到相關(guān)的進程:


這里寫圖片描述

調(diào)試演示

這里我一調(diào)試com.android.settings模塊為例進行說明.
在SettingActivity中下斷點,如圖:


這里寫圖片描述

選擇com.android.settings


這里寫圖片描述

做完這些后,我們點擊android 虛擬機中的設置,隨后就可以一步一步調(diào)試了


這里寫圖片描述

總結(jié)

要想調(diào)試源碼,不難發(fā)現(xiàn),一共需要以下幾個步驟:

  • 編譯好的源碼
  • 使用idegen模塊生成必要的項目工程文件
  • 導入源碼到AS中
    現(xiàn)在呢,你可以放心的去調(diào)試了,在這期間出現(xiàn)問題可自行Google解決,一般都能找到答案.
  • 轉(zhuǎn)載:http://www.jianshu.com/p/30a628335114

    總結(jié)

    以上是生活随笔為你收集整理的自己动手调试Android源码(超简单)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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