Ubuntu14.04 Android Studio源碼導入調試

版權聲明:本文為作者原創(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)境配置

  1. 去Google 官網下載 android studio
  2. 安裝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
  3. 打開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這個文件,如下:


android.iml

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


modules settings

ok ,經過差不多幾十秒的scan(根據電腦配置不同而有差異)項目基本構建完成。

第二個問題代碼自動跳轉到指定類

Dependencies

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


Screenshot from 2018-11-21 19:59:13.png

第三個問題如何打斷點調試源碼

如果你想調試源碼并準確對應,最好要保證如下兩點:

  1. 用你編譯好的源碼生成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重啟手機。
  2. 保證Rom編譯的版本為userdebug版本,這樣才能保證可以調試系統(tǒng)各個進程。編譯userdebug版本的rom是在編譯階段,通過lunch命令來選擇userdebug版本的。

好啦,如果你已經保證滿足了上面的條件,此時你就可以開始打斷點調試了。比如我們以調試ActivityManagerService為例,看看app啟動過程是如何的?這時你肯定會想到startActivityAsUser函數。


ActivityManagerService.java

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

參考文章:

1.https://blog.csdn.net/yanbober/article/details/48846331

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容