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

相关推荐
刺客-Andy12 分钟前
React 第七十节 Router中matchRoutes的使用详解及注意事项
前端·javascript·react.js
前端工作日常27 分钟前
我对eslint的进一步学习
前端·eslint
禁止摆烂_才浅1 小时前
VsCode 概览尺、装订线、代码块高亮设置
前端·visual studio code
程序员猫哥1 小时前
vue跳转页面的几种方法(推荐)
前端
代码老y2 小时前
十年回望:Vue 与 React 的设计哲学、演进轨迹与生态博弈
前端·vue.js·react.js
一条上岸小咸鱼2 小时前
Kotlin 基本数据类型(五):Array
android·前端·kotlin
大明882 小时前
用 mouseover/mouseout 事件代理模拟 mouseenter/mouseleave
前端·javascript
小杨梅君2 小时前
vue3+vite中使用自定义element-plus主题配置
前端·element
一个专注api接口开发的小白2 小时前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
前端·数据挖掘·api
林太白2 小时前
Nuxt.js搭建一个官网如何简单
前端·javascript·后端