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进行定制化的开发,如继续学习车载开发,后续文档会持续修改和更新,如果有那边不对或者疑问,我们可以探讨。!

相关推荐
GIS之路6 小时前
GDAL 读取遥感影像数据
前端
IT_陈寒7 小时前
Spring Boot 3.2 新特性全解析:这5个性能优化点让你的应用提速50%!
前端·人工智能·后端
携欢8 小时前
PortSwigger靶场之Stored DOM XSS通关秘籍
前端·xss
LDM>W<8 小时前
Electron下载失败
前端·javascript·electron
EndingCoder8 小时前
Electron 新特性:2025 版本更新解读
前端·javascript·缓存·electron·前端框架·node.js·桌面端
BillKu8 小时前
Vue3 中使用 DOMPurify 对渲染动态 HTML 进行安全净化处理
前端·安全·html
子兮曰8 小时前
🔥深度解析:Nginx目录浏览美化与功能增强实战指南
前端·javascript·nginx
machinecat8 小时前
node,小程序合成音频的方式
前端·node.js
我是日安8 小时前
从零到一打造 Vue3 响应式系统 Day 4 - 核心概念:收集依赖、触发更新
前端·vue.js
跟橙姐学代码8 小时前
不要再用 print() 了!Python logging 库才是调试的终极武器
前端·python