android studio調(diào)試源碼

android studio調(diào)試源碼

環(huán)境
  • 系統(tǒng):macOS High Sierra 10.13.2
  • JDK: 1.8.0_201
  • Xcode:9.3
  • AOSP分支:andriod-8.1.0_r20
  • python:2.7 (一般自帶)
安裝xcode 命令行工具

xcode歷史版本
由于appstore上的xcode只能裝10.14系統(tǒng)上. 這邊從歷史版本下載了Command Line Tools(macOS 10.13) for Xcode 9.3

安裝MacPorts或者HomeBrew

主要用于安裝軟件

macports下載鏈接 根據(jù)自己系統(tǒng)選擇

這邊shell用的:zsh

  1. 直接編輯~/.zshrc文件

    添加export PATH = /opt/local/bin:$PATH保存

    POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg`

或者

  1. brew install gmake libsdl git gnupg
設(shè)置可以同時(shí)打開(kāi)文件數(shù)字限制

在~/.zshrc下添加 ulimit -S -n 1024

創(chuàng)建APFS卷宗

可以通過(guò) shell 使用以下命令創(chuàng)建磁盤(pán)映像:搞完之后60多G 最后大一點(diǎn)這里搞200g
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 200g ~/android.dmg
這將創(chuàng)建一個(gè) .dmg(也可能是 .dmg.sparseimage)文件匿垄,該文件在裝載后可用作具有 Android 開(kāi)發(fā)所需格式的存儲(chǔ)卷色冀。
如果您以后需要更大的存儲(chǔ)卷,還可以使用以下命令來(lái)調(diào)整稀疏映像的大小:
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
對(duì)于存儲(chǔ)在主目錄下的名為 android.dmg 的磁盤(pán)映像竿裂,您可以向 ~/.zshrc 中添加輔助函數(shù):
要在執(zhí)行 mountAndroid 時(shí)裝載磁盤(pán)映像,請(qǐng)運(yùn)行以下命令:


function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

注意:如果系統(tǒng)創(chuàng)建的是 .dmg.sparseimage 文件,請(qǐng)將 ~/android.dmg 替換成 ~/android.dmg.sparseimage奢赂。
要在執(zhí)行 umountAndroid 時(shí)卸載磁盤(pán)映像,請(qǐng)運(yùn)行以下命令:

# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }

執(zhí)行mountAndroid成功后 在finder中可以找到android存儲(chǔ)圈

裝載 android 存儲(chǔ)卷后颈走,您將在其中開(kāi)展所有工作膳灶。您可以像對(duì)待外接式存儲(chǔ)盤(pán)一樣將其彈出(卸載)。

下載源代碼
  • 確保主目錄下有一個(gè) bin/ 目錄立由,并且該目錄包含在路徑中
mkdir ~/bin

~/.zshrc中加入PATH=~/bin:$PATH

  • 下載 Repo 工具轧钓,并確保它可執(zhí)行
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 
chmod a+x ~/bin/repo
初始化repo
  • 在我們自己創(chuàng)建的android存儲(chǔ)卷下一般掛載的新的盤(pán)是在/Volumes/ 路徑下

    makdir WORK_DIR
    cd WORK_DIR
    
    

    這里需要科學(xué)上網(wǎng)一半用其他鏡像完成 -b命令指定分支

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r20

    在~/.zshrc中添加

    export REPO_URL ='https://mirros.tuna.tsinghua.edu.cn/git/git-repo'

    然后repo sync 進(jìn)入下載源代碼進(jìn)入漫長(zhǎng)的等待。由于下載源碼的時(shí)間太長(zhǎng)锐膜,中途可能會(huì)出現(xiàn)中斷情況毕箍,雖然repo同步是支持?jǐn)帱c(diǎn)續(xù)傳,但是不知道什么時(shí)候會(huì)斷開(kāi)道盏,這一點(diǎn)很麻煩而柑,所以可以寫(xiě)一個(gè)shell腳本來(lái)開(kāi)啟同步

    #!/usr/bin/env bash
    repo sync -j4
    while [ $? -ne 0 ]
    do
      repo sync -j4
    done  
    

    執(zhí)行這個(gè)./xxx.sh

編譯源代碼

在WORK_DIR目錄下

make之前有幾個(gè)地方注意

  • could not find jdk tools.jar

    在~/.zshrc下添加JAVA_HOME

  • could not find mac sdk
    在build/soong/cc/config/x86_darwin_host.go文件中添加10.13支持

    darwinSupportedSdkVersions=[]String{
        "10.10",
        "10.11",
        "10.12",
        "10.13",//添加
    }
    
  • 遇到bison錯(cuò)誤 BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --

    cd WORK_DIR/external/bison
    git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
    mm
    cp WORK_DIR/out/host/darwin-x86/bin/bison WORK_DIR/prebuilts/misc/darwin-x86/bison/
    
source build/envsetup.sh
lunch aosp_arm-eng
make -j4

這里又進(jìn)入漫長(zhǎng)等待

源碼導(dǎo)入android studio
  bash
  source build/envsetup.sh # 在新終端下需要執(zhí)行這一步
  mmma development/tools/idegen
  development/tools/idegen/idegen.sh
  • 由于aosp工程很大,在導(dǎo)入IDEA前需要先修改配置:
  1. 修改VM內(nèi)存大小
    打開(kāi)IDEA 菜單欄 Help > Edit Custom VM Options荷逞,添加

    -Xms1g 
    -Xmx5g
    
  2. 修改文件大小限制媒咳,打開(kāi)區(qū)分大小寫(xiě)選項(xiàng)
    打開(kāi)IDEA 菜單欄 Help -> Edit custom properties, 添加

    idea.max.intellisense.filesize=100000
    idea.case.sensitive.fs=true
    

    重啟生效

  • 在WORK_DIR根目錄下

    android.iml 和 android.ipr 這兩個(gè)文件种远,這兩個(gè)文件是 Android Studio 的工程配置文件涩澡,這時(shí)候其實(shí)已經(jīng)可以直接導(dǎo)入 Android Studio,但會(huì)導(dǎo)入所有的源碼模塊坠敷,會(huì)很慢妙同,可以進(jìn)行過(guò)濾,除了 frameworks 模塊和 packages 模塊常拓,其他都給過(guò)濾掉渐溶,不導(dǎo)入 Android Studio,打開(kāi) android.iml 文件弄抬,搜下excludeFolder茎辐,在后面加入如下代碼

<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$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/.repo" />

用android studio打開(kāi)Android.ipr 等待scanning files to index結(jié)束

安裝到虛擬機(jī)

執(zhí)行

emulator 

這里會(huì)打開(kāi)虛擬機(jī)并安裝系統(tǒng)鏡像

源碼調(diào)式

點(diǎn)擊android studio attach process按鈕選擇我們需要調(diào)式的進(jìn)程比如system_server在AMS處打上斷點(diǎn)就可以調(diào)式了

總結(jié)

其實(shí)只要調(diào)式源碼沒(méi)這么麻煩

  1. 下載framworks部分的代碼
  2. 搞一個(gè)對(duì)應(yīng)版本的虛擬機(jī)
  3. 搞一個(gè)android.iml 和 android.ipr文件用andriod studio 打開(kāi).ipr
  4. attach進(jìn)程,打斷點(diǎn)掂恕。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拖陆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子懊亡,更是在濱河造成了極大的恐慌依啰,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件店枣,死亡現(xiàn)場(chǎng)離奇詭異速警,居然都是意外死亡叹誉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)闷旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)长豁,“玉大人,你說(shuō)我怎么就攤上這事忙灼〗辰螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵该园,是天一觀的道長(zhǎng)酸舍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)里初,這世上最難降的妖魔是什么啃勉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮青瀑,結(jié)果婚禮上璧亮,老公的妹妹穿的比我還像新娘萧诫。我一直安慰自己斥难,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布帘饶。 她就那樣靜靜地躺著哑诊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪及刻。 梳的紋絲不亂的頭發(fā)上镀裤,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音缴饭,去河邊找鬼暑劝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颗搂,可吹牛的內(nèi)容都是我干的担猛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼丢氢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼傅联!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疚察,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒸走,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后貌嫡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體比驻,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡该溯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了别惦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朗伶。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖步咪,靈堂內(nèi)的尸體忽然破棺而出论皆,到底是詐尸還是另有隱情,我是刑警寧澤猾漫,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布点晴,位于F島的核電站,受9級(jí)特大地震影響悯周,放射性物質(zhì)發(fā)生泄漏粒督。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一禽翼、第九天 我趴在偏房一處隱蔽的房頂上張望屠橄。 院中可真熱鬧,春花似錦闰挡、人聲如沸锐墙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溪北。三九已至,卻和暖如春夺脾,著一層夾襖步出監(jiān)牢的瞬間之拨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工咧叭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚀乔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓菲茬,卻偏偏與公主長(zhǎng)得像吉挣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子生均,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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