AOSP學習(二)AndroidStudio導入Android系統(tǒng)源碼

前言

下載了AOSP源碼颗胡,那我們要考慮如果開發(fā)和查看理郑,查看的工具有Source Insight舒憾,開發(fā)和查看AndroidStudio和Eclipse巷蚪,當然選擇 Android Studio,官方也提供我們系統(tǒng)開發(fā)專用版本Android Studio for Platform ,利用強大的工具啦扬。我們?nèi)绾螌?AOSP 源碼導入 Android Studio里面?

方式一 AndroidStudio for Platform(推薦)

因為是新出的凫碌,Android系統(tǒng)高版本才支持扑毡,最新系統(tǒng)建議使用AndroidStudio for Platform

1、準備工作

下載鏈接:https://developer.android.google.cn/studio/platform
Android-Studio for Platform盛险,目前僅支持 Ubuntu 系統(tǒng)瞄摊。下載好以后勋又,使用以下命令安裝:

//sudo dpkg -i /你的下載路徑/asfp-2023.1.1.19-linux.deb
sudo dpkg -i /home/zhangxiaoxiao/Downloads/asfp-2023.1.1.19-linux.deb

2、Android Studio for Platform 打開系統(tǒng)模塊

2.1 使用命令行打開:

/opt/android-studio-for-platform/bin/studio.sh

2.2 打開后點擊 Import Asfp Project

1694700334068.jpg

2.3 導入項目模塊

1694700194153.jpg

箭頭說明

  • 1换帜、選擇好我們的源碼路徑
  • 2楔壤、填寫編譯源碼時選擇的 Product(假如不知道可以lunch看一下)
  • 3、加號惯驼,來添加我們需要修改的模塊蹲嚣,可以有多個,帶Android.bp文件
  • 4祟牲、勾選后可以支持 native 代碼

2.4 完成后的界面

1694700873301.jpg

3隙畜、調(diào)試系統(tǒng)模塊

3.1 添加源碼中的 jdk 和 sdk

配置 jdk 和 sdk,點擊 file -> Project Structure:


1694616766245.jpg

點擊 Add JDK:

1694616983840.jpg

接著點擊 + 號说贝,添加 Android SDK:選擇系統(tǒng)源碼目錄下的 out/host/linux-x86/sdk/sdk/....

1694617172480.jpg

接著我們需要配置項目的 sdk议惰,點擊 file -> Project Structure,點擊左側 Project乡恕、 Modules腕窥,右側 SDK 選項選擇 aosp13-android-sdk,最后點擊 apply闷板,項目開始重新索引穷娱,項目內(nèi)絕大部分類方法變量均可正確跳轉(zhuǎn),至此蛋哭,配置完成县习。

3.2 開始設置調(diào)試

我們先打開一個新的終端,打開模擬器:

source build/envsetup.sh
lunch 72
emulator

接著我們像平常一下app開發(fā)那樣去打斷點:

1694617731387.jpg

最后打勾show all processes谆趾,然后選擇要斷點進程:

1694702228650.jpg

方式二 AIDEGen

1躁愿、什么是AIDEGen

AIDEGen,大概是“Android IDE (helper) Generator”的簡寫沪蓬,是 AOSP 源代碼樹中的一個工具彤钟,它允許從 Android Studio 等通常僅為非平臺應用程序開發(fā)配置的 IDE 中處理系統(tǒng)應用程序。

AIDEGen 旨在自動化項目設置過程跷叉,以便開發(fā)人員在流行的 IDE 環(huán)境中處理 Java 項目逸雹。開發(fā)者不再需要手動配置一個 IntelliJ 項目,比如所有的項目依賴云挟。它是一個命令行工具梆砸,提供以下功能:

  • 配置 Intellij 或 Android Studio 項目文件,并解決相關的模塊依賴關系园欣。
  • 為指定的子項目或構建目標啟動 IDE帖世,即 frameworks/base 或 Settings。
  • 為包含構建目標的指定文件夾啟動 IDE沸枯,即 cts日矫。
  • 為 Intellij 自動配置 JDK 和 Android 編碼風格

2赂弓、如何使用AIDEGen

需要注意的是,AIDEGen工具是在Android10以后才被引入的一個工具哪轿,所以如果你要使用它盈魁,需要確保你下載AOSP源碼并切換到Android10或更高版本的分支

2.1 首先需要在AOSP源碼的根目錄下執(zhí)行下面的命令:

source build/envsetup.sh
lunch 72(這里具體構建哪個目標,根據(jù)你自己的情況來窃诉,你也可以使用默認的(即直接lunch回車,然后在選擇)
# 如果之前已經(jīng)執(zhí)行就不需要杨耙,這個為了等下打開as選擇sdk和jdk,注意:這個內(nèi)存要足夠大,不然會報內(nèi)存不足
make sdk

2.2 上面一步執(zhí)行成功后褐奴,即可在終端中使用AIDEGen命令了按脚,使用下面的方法可自動編譯framework模塊并使用Android Studio打開項目:

aidegen framework -i s -p /home/zhangxiaoxiao/aosp/android-studio/bin -s
選項 多頭期權 描述
-d --depth 源引用的模塊的深度。
-i --ide 啟動 IDE 類型敦冬,j=IntelliJ s=Android Studio e=Eclipse c=CLion v=VS Code
-p --ide-path 指定用戶的 IDE 安裝路徑如:/home/zhangxiaoxiao/aosp/android-studio/bin辅搬。
-n --no_launch 不要啟動 IDE。
-r --config-reset 重置所有 AIDEGen 的已保存配置脖旱。
-s --skip-build 跳過構建 jar 或模塊堪遂。
-v --verbose 顯示 DEBUG 級別的日志記錄。
-a --android-tree 為 IDE 生成整個 Android 源代碼樹項目文件萌庆。
-e --exclude-paths 排除 IDE 中的目錄溶褪。
-l --language 使用特定語言啟動 IDE,j=java c=C/C++ r=Rust
-h --help 顯示幫助信息并退出

2.3 Android Studio 配置

參考方式一的3践险、調(diào)試系統(tǒng)模塊

方式三 android.ipr 和 android.iml(不推薦)

1. 生成源代碼工程配置文件

在導入項目之前我們要先保證代碼至少成功編譯了一次且并未執(zhí)行make clean命令清除先前編譯的內(nèi)容清除猿妈,我們要先使用aosp提供的idegen工具來生成aosp項目的工程配置文件,它位于aosp根目錄下的development/tools/idegen/目錄

1.1 編譯生成idegen.jar

source build/envsetup.sh        # 每次新啟動電腦都要進入目錄初始化編譯環(huán)境變量一次
mmm development/tools/idegen/   # 編譯生成idegen.jar

1.2 生成 android.ipr 和 android.iml

./development/tools/idegen/idegen.sh

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

android.ipr 和 android.iml

2 AOSP導入Android Studio導入代碼

2.1 修改Android Studio內(nèi)存配置

打開System Setings->Memory Setings ->IDE max heap size這個大小調(diào)大一點

1676811339234.jpg

2.2 修改android.iml文件

sourceFolder : 顧名思義就是包含的文件目錄彭则,通常我們只需要留下framework即可,我怕這邊保留了framework和packages占遥。
excludeFolder:這個標簽自然就是不包含的意思俯抖,有什么目錄我們不想讓Android Studio去管它我們就可以使用這個目錄將其排除掉。

為了排除不必要的模塊瓦胎,提高加載速度打開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$/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" />
   <excludeFolder url="file://$MODULE_DIR$/.repo" />

但實際上搔啊,整個AOSP代碼中柬祠,一般我們不會全部需要去關心,我們只需要關心framework模塊负芋,因此可以根據(jù)自己的需求多去掉一些模塊瓶盛,可以多加如下:

<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" />

2.3 AndroidStudio打開android.ipr

File - Open...,在項目的AOSP的根目錄下找到android.ipr

3、斷點調(diào)試

真機想調(diào)試系統(tǒng)進程需要Root權限惩猫,然后利用Magisk等軟件修改:ro.debuggable = 1,可以新建模擬器時選擇 非 Google Play的64位鏡像蚜点,也可以得到 ro.debuggable = 1 的設備

3.1 添加調(diào)試程序

Add Configurations

1676809557499.jpg

3.2 添加SDK

IDE and Project Settings->Project

1676813611596.jpg

3.3 修改無依賴JDK

1676813576819.jpg

總結

至此轧房,我們的準備工作已經(jīng)全部完成,從android.ipr 和 android.iml導入AS到AIDEGen绍绘,再到最新Google官方給我們提供專用開發(fā)工具奶镶,一步一步方便我們,讓我們能更方便輕松的開發(fā)Framework陪拘。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厂镇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子左刽,更是在濱河造成了極大的恐慌捺信,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欠痴,死亡現(xiàn)場離奇詭異迄靠,居然都是意外死亡,警方通過查閱死者的電腦和手機喇辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門掌挚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩咨,你說我怎么就攤上這事吠式。” “怎么了抽米?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵特占,是天一觀的道長。 經(jīng)常有香客問我缨硝,道長摩钙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任查辩,我火速辦了婚禮胖笛,結果婚禮上,老公的妹妹穿的比我還像新娘宜岛。我一直安慰自己长踊,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布萍倡。 她就那樣靜靜地躺著身弊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阱佛,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天帖汞,我揣著相機與錄音,去河邊找鬼凑术。 笑死翩蘸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的淮逊。 我是一名探鬼主播催首,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泄鹏!你這毒婦竟也來了郎任?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤备籽,失蹤者是張志新(化名)和其女友劉穎舶治,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胶台,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡歼疮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了韩脏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡赡矢,死狀恐怖阅仔,靈堂內(nèi)的尸體忽然破棺而出吹散,到底是詐尸還是另有隱情,我是刑警寧澤八酒,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站羞迷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏衔瓮。R本人自食惡果不足惜浊猾,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望热鞍。 院中可真熱鬧葫慎,春花似錦、人聲如沸艰额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逐工。三九已至漂辐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間髓涯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工蚓再, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留包各,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓娃属,卻偏偏與公主長得像护姆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卵皂,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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