前言
下載了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
2.3 導入項目模塊
箭頭說明
- 1换帜、選擇好我們的源碼路徑
- 2楔壤、填寫編譯源碼時選擇的 Product(假如不知道可以lunch看一下)
- 3、加號惯驼,來添加我們需要修改的模塊蹲嚣,可以有多個,帶Android.bp文件
- 4祟牲、勾選后可以支持 native 代碼
2.4 完成后的界面
3隙畜、調(diào)試系統(tǒng)模塊
3.1 添加源碼中的 jdk 和 sdk
配置 jdk 和 sdk,點擊 file -> Project Structure:
點擊 Add JDK:
接著點擊 + 號说贝,添加 Android SDK:選擇系統(tǒng)源碼目錄下的 out/host/linux-x86/sdk/sdk/....
接著我們需要配置項目的 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ā)那樣去打斷點:
最后打勾show all processes谆趾,然后選擇要斷點進程:
方式二 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)大一點
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
3.2 添加SDK
IDE and Project Settings->Project
3.3 修改無依賴JDK
總結
至此轧房,我們的準備工作已經(jīng)全部完成,從android.ipr 和 android.iml導入AS到AIDEGen绍绘,再到最新Google官方給我們提供專用開發(fā)工具奶镶,一步一步方便我們,讓我們能更方便輕松的開發(fā)Framework陪拘。