AOSP(二)AndroidStudio导入Android系统源码

前言

下载了AOSP源码,那我们要考虑如果开发和查看,查看的工具有Source Insight,开发和查看AndroidStudio和Eclipse,当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具。问题来了,那么我们如何将 AOSP 源码导入 Android Studio里面?

一、生成源代码工程配置文件

在导入项目之前我们要先保证代码至少成功编译了一次且并未执行make clean命令清除先前编译的内容清除,我们要先使用aosp提供的idegen工具来生成aosp项目的工程配置文件,它位于aosp根目录下的development/tools/idegen/目录

1.1 编译生成idegen.jar

bash 复制代码
source build/envsetup.sh        # 每次新启动电脑都要进入目录初始化编译环境变量一次
mmm development/tools/idegen/   # 编译生成idegen.jar

1.2 生成 android.ipr 和 android.iml

bash 复制代码
./development/tools/idegen/idegen.sh

运行完毕上面的命令之后,就在根目录生成了2个文件:

android.ipr 和 android.iml

二、AOSP导入Android Studio导入代码

2.1 修改Android Studio内存配置

打开System Setings->Memory Setings ->IDE max heap size这个大小调大一点

2.2 修改android.iml文件

sourceFolder : 顾名思义就是包含的文件目录,通常我们只需要留下framework即可,我怕这边保留了framework和packages。 excludeFolder:这个标签自然就是不包含的意思,有什么目录我们不想让Android Studio去管它我们就可以使用这个目录将其排除掉。

为了排除不必要的模块,提高加载速度打开android.iml, 找到excludeFolder属性,我们可以看到默认有14个模块是被排除了,不会被导入的

ini 复制代码
   <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模块,因此可以根据自己的需求多去掉一些模块,可以多加如下:

ini 复制代码
<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

三、断点调试

真机想调试系统进程需要Root权限,然后利用Magisk等软件修改:ro.debuggable = 1,可以新建模拟器时选择 非 Google Play的64位镜像,也可以得到 ro.debuggable = 1 的设备

3.1 添加调试程序

Add Configurations

3.2 添加SDK

IDE and Project Settings->Project

3.3 修改无依赖JDK

总结

至此,我们的准备工作已经全部完成,后面我们将继续学习Framework、Luanchr和SystemUI进行定制化的开发,如继续学习车载开发,后续文档会持续修改和更新,如果有那边不对或者疑问,我们可以探讨。!

相关推荐
qq_422152571 分钟前
PDF 解密工具怎么选?2026 年文档密码移除方案与注意事项
java·前端·pdf
YHHLAI5 分钟前
前端工程化调用 AI 多模态生图模型:Qwen Image Demo 实战
前端·人工智能
To_OC18 分钟前
我一直以为 Ajax 是个黑盒,直到我写了这 50 行代码
前端·后端·全栈
用户0595401744623 分钟前
RAG 记忆层踩坑实录:用户偏好凭空消失,我排查了 4 小时,最后用 LangChain + Chroma 搭了套自动化回归测试
前端·css
程序猿阿伟29 分钟前
《Chrome隔离机制的维度落地指南》
前端·chrome
用户0543243297031 分钟前
AI 生成的代码怎么在前端安全预览 + 一键运行:sandbox iframe 实战 🔒
前端
ALianBlank32 分钟前
一个 Unity 框架能做多少事?86 个模块 + 21 个小游戏平台
前端·后端·游戏开发
To_OC35 分钟前
搞懂二叉树递归遍历,我居然是从爬楼梯开始的
前端·javascript·数据结构
何何____40 分钟前
svg基本图形绘制介绍
前端·css
weedsfly40 分钟前
Sass 运算 vs CSS calc():你的计算该放在哪一层?
前端