版權聲明:本文為作者原創(chuàng),轉載必須注明出處。
轉載請注明出處:http://www.itdecent.cn/p/e86d33a61bcb
最近一段時間總有一些做App的同學會問,Android源碼也可以像App工程一下導入到Android Studio中方便查看嗎?當然答案是肯定的。這邊文章主要回答如下幾個問題:
1. 如何將android源碼導入到android studio中查看?
2. 代碼跳轉如何在源碼中,而不是跳轉到android sdk中?
3. 如何打斷點調試代碼?
注:編譯系統(tǒng)Ubuntu14.04
如果你還沒有編譯源碼成功,建議你先了解一下上一篇文章Ubuntu 14.04 Android源碼編譯介紹
這樣有助于你接下來的學習!
一、環(huán)境配置
- 去Google 官網下載 android studio
- 安裝Android Studio: https://developer.android.com/studio/install.html
2.1 解壓縮安裝包
2.2 執(zhí)行studio.sh
2.3 最重要不能忘! 安裝一些會用到的Libraries
$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 lib32bz2-1.0 - 打開Android Studio, 就跟Windows版本一樣, 更新一下platform-tools, SDK
第一個問題,AndroidStudio中導入源碼
編譯idegen模塊
這里如果你之前還沒有編譯過源碼,請移步到上一篇文章Ubuntu 14.04 Android源碼編譯介紹。
如果你已經了解了,那么請繼續(xù)往下看:
編譯源碼idegen模塊及生成AS配置文件(*.ipr)
$ source build/envsetup.sh
$ mmm development/tools/idegen/
這行命令的意思是編譯idegen這個模塊項目,然后生成idegen.jar文件。
當你看到如下信息,代表已經生成了idegen.jar。
#### build completed successfully (06:35 (mm:ss)) ####
接下來就需要通過執(zhí)行idegen.sh這個腳本生成*.ipr,android.iml 等工程配置文件。
sh development/tools/idegen/idegen.sh
等待片刻得到類似如下信息說明OK:
Read excludes: 42ms
Traversed tree: 132882ms
該命令行會生成三個文件在root folder: android.iml android.ipr .classpath
android.ipr: 一般保存了工程相關的設置,比如modules和modules libraries的路徑,編譯器配置,入口點等
android.iml: 用來描述modules, 它包括modules路徑, 依賴關系, 順序設置等, 一個項目可以包含多個 *.iml 文件,
所以想要少加一些module進到Android Studio可以修改此檔案。所以,在導入之前,我們可以做一些簡單的配置。
注:特殊情況下,當執(zhí)行上述命令時,發(fā)現(xiàn)會報如下錯誤:
Couldn't find idegen.jar. Please run make first.
通過查看idegen.sh這個腳本的代碼,發(fā)現(xiàn)其實就是通過find命令去查找idegen.jar,然后運行main方法。這時你可以在根目錄去查找一下idegen.jar有沒有生成。如果已經存在,就可以按照如下代碼中注釋掉判斷,直接去執(zhí)行就ok了。
#!/bin/bash
if [ ! -d development ]; then
echo "Error: Run from the root of the tree."
exit 1
fi
#if [[ -z ${OUT_DIR_COMMON_BASE} ]]; then
idegenjar=`find out -name idegen.jar -follow | grep -v intermediates`
#else
#idegenjar=`find $OUT_DIR_COMMON_BASE/$(basename "$PWD") -name idegen.jar -follow | grep -v intermediates`
#fi
if [ "" = "$idegenjar" ]; then
echo "Couldn't find idegen.jar. Please run make first."
else
java -cp $idegenjar Main
fi
接下來我們打開android.iml這個文件,如下:

此時,我們可以通過編輯工具,比如sublime Text3 通過ctrl_H命令批量將sourceFolder替換為excludeFolder。然后再將需要查看的project改為sourceFolder。此時就可以打開Android Studio通過找到android.ipr開始導入項目即可。
其實還有另外一種辦法來減少掃描構建的項目,在android stuido里打開project structure,選擇Sources頁面,將不需要scan的模塊選中點擊Excluded。最后點擊apply。如下圖所示:

ok ,經過差不多幾十秒的scan(根據電腦配置不同而有差異)項目基本構建完成。
第二個問題代碼自動跳轉到指定類

如上圖所示,我們在Dependencies Tab中只保留圖中的兩項,其他全部刪除即可。最后點擊Apply,保存退出。
好啦,大功告成,此時你可以試著雙擊shift。輸入ActivityManagerService,然后嘗試跟在app中跳轉代碼的操作一樣再試一下,ok,可以完美跳轉啦,是不是很簡單?。?!

第三個問題如何打斷點調試源碼
如果你想調試源碼并準確對應,最好要保證如下兩點:
- 用你編譯好的源碼生成
boot.img,system.img,vendor.img(8.0才有),userdata.img,
通過命令adb shell reboot bootloader進入fastboot
依次使用命令
sudo fastboot flash boot boot.img
sudo fastboot flash system system.img
sudo fastboot flash vendor vendor.img
sudo fastboot flash userdata userdata.img
最后sudo fastboot reboot重啟手機。 - 保證Rom編譯的版本為
userdebug版本,這樣才能保證可以調試系統(tǒng)各個進程。編譯userdebug版本的rom是在編譯階段,通過lunch命令來選擇userdebug版本的。
好啦,如果你已經保證滿足了上面的條件,此時你就可以開始打斷點調試了。比如我們以調試ActivityManagerService為例,看看app啟動過程是如何的?這時你肯定會想到startActivityAsUser函數。

大功告成,你也去試試吧!?。?/p>