使用Android Studio導入AOSP源碼的奇技淫巧

通常情況下缤骨,對于整個AOSP源碼爱咬,我們一般只關心Framework和某些App,至于其他模塊可能關心的比較少绊起,因此沒有必要全部作為源碼導入精拟。

修改移除不需要關心的模塊

在AOSP源碼目錄,修改下面文件:

development/tools/idegen/excluded-paths

在最后面添加:
ps:我現(xiàn)在是去除了framework和libcore之外的所有模塊虱歪,如果想留下某些模塊蜂绎,可以自己適當修改。

# remove projects except framework
#^out
^disregard
^kernel
^bootstrap.bash -> build/soong/bootstrap.bash
^Android.bp -> build/soong/root.bp
^build
^vendor
^tools
^toolchain
^test
^system
^shortcut-fe
^sdk
^prebuilts
^platform_testing
^pdk
^packages
^oem-release
^libnativehelper
#^libcore
^libcore/.*/test$
^libcore/.*/test-rules$
^libcore/test-rules$
^libcore/metrictests$
^hardware
#^frameworks
^frameworks/support/samples$
^frameworks/.*/.*tests$
^frameworks/.*/test$
^frameworks/.*/test-base$
^frameworks/.*/core-testing$
^frameworks/.*/testing$
^frameworks/.*/testutils$
^frameworks/.*/loadtest$
^frameworks/.*/testtensorflow$
^frameworks/.*/testrunner-src$
^frameworks/.*/androidTest$
^flashing-files
^external
^device
^build.sh
^development
^developers
^dalvik
^cts
^compatibility
^Makefile
^bootable
^bionic
^art

編譯 idegen 模塊

在AOSP源碼根目錄:

source build/envsetup.sh

including device/generic/car/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/uml/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
Created 12 symlinks out of 12 mapped links..
including sdk/bash_completion/adb.bash

  1. 編譯生成 idegen.jar
make idegen

或者:

mmm development/tools/idegen/
// 編譯完成
[100% 3/3] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
[ 50% 1/2] glob art
[100% 4/4] Install: out/host/linux-x86/framework/idegen.jar

#### build completed successfully (01:26 (mm:ss)) ####
  1. 生成 android.ipr 和 android.iml
$ development/tools/idegen/idegen.sh
Read excludes: 10ms
Traversed tree: 14696ms

運行完畢上面的命令之后笋鄙,就在根目錄生成了2個文件:

android.ipr 和 android.iml

開始導入源碼

  1. 排除不必要的模塊师枣,提高加載速度
    打開android.iml, 找到excludeFolder屬性,我們可以看到默認有14個模塊是被排除了局装,不會被導入的坛吁。
<excludeFolder url="file://$MODULE_DIR$/./external/emma"/>
<excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/>
<excludeFolder url="file://$MODULE_DIR$/out/eclipse"/>
<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolder url="file://$MODULE_DIR$/external/chromium"/>
<excludeFolder url="file://$MODULE_DIR$/external/icu4c"/>
<excludeFolder url="file://$MODULE_DIR$/external/webkit"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/host"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/product"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilt"/>

但實際上劳殖,整個AOSP代碼中铐尚,一般情況下,我們只是關心framework模塊哆姻,因此可以根據(jù)自己的需求多去掉一些模塊宣增。
比如把下面這些加到上面那14行之下:

<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$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/kernel"/>

這樣修改之后,打開速度會快很多矛缨。

  1. 使用Android Studio直接打開android.ipr文件爹脾。

File - Open...,找到adnroid.ipr即可

正在導入

導入完成之后箕昭,就能看到整個AOSP源碼了:


image.png

橘紅色的就上咱們在上一步exclude的模塊灵妨。

到目前為止,我們就可以正常的搜索代碼落竹,然后打開看了:


image.png

但是有個問題泌霍,打開的Java代碼,查看集成關系或者調(diào)用關系的時候述召,還是會跳轉(zhuǎn)到.class文件中朱转,而不是相應的Java類蟹地,比如PhoneWindow.java繼承了Window.java,但是我們跳轉(zhuǎn)的時候卻跳到了Window.class:

image.png

配置JDK和SDK解決跳轉(zhuǎn)不到源碼的問題

File - Project Structure - SDKs

  1. 刪除多余的JDK和SDK:


    image.png
  1. 添加JDK,并刪除Classpath和Sourcepath下面的所有內(nèi)容


    Peek 2021-10-08 17-57.gif
  2. 配置Project的SDK


    Peek 2021-10-08 18-08.gif
  3. 配置Modules


    Peek 2021-10-08 18-09.gif

把framework添加到Dependencies中:


Peek 2021-10-08 18-11.gif

最后看一下藤为,可以正確跳轉(zhuǎn)了:


image.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怪与,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缅疟,更是在濱河造成了極大的恐慌分别,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件存淫,死亡現(xiàn)場離奇詭異茎杂,居然都是意外死亡,警方通過查閱死者的電腦和手機纫雁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門煌往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轧邪,你說我怎么就攤上這事刽脖。” “怎么了忌愚?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵曲管,是天一觀的道長。 經(jīng)常有香客問我硕糊,道長院水,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任简十,我火速辦了婚禮檬某,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘螟蝙。我一直安慰自己恢恼,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布胰默。 她就那樣靜靜地躺著场斑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牵署。 梳的紋絲不亂的頭發(fā)上漏隐,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音奴迅,去河邊找鬼青责。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的爽柒。 我是一名探鬼主播吴菠,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浩村!你這毒婦竟也來了做葵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤心墅,失蹤者是張志新(化名)和其女友劉穎酿矢,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怎燥,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瘫筐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铐姚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片策肝。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖隐绵,靈堂內(nèi)的尸體忽然破棺而出之众,到底是詐尸還是另有隱情,我是刑警寧澤依许,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布棺禾,位于F島的核電站,受9級特大地震影響峭跳,放射性物質(zhì)發(fā)生泄漏膘婶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蛀醉、第九天 我趴在偏房一處隱蔽的房頂上張望悬襟。 院中可真熱鬧,春花似錦滞欠、人聲如沸古胆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惹恃,卻和暖如春夭谤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巫糙。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工朗儒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓醉锄,卻偏偏與公主長得像乏悄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恳不,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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