Android Studio 导入安卓源码步骤
前言
我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工程源码导入到Android Studio中,导入后我们也可以通过断点调试,更加快速和准确地定位分析解决问题。
操作步骤
开发环境: Ubuntu 20.4 Android Studio4.1.3 Android 11(R) 源码
步骤一
1. 进入源码根目录,初始化系统环境
source build/envsetup.sh
2. 源码根目录执行如下命令 ,生成idegen.jar
mmm development/tools/idegen/
[100% 1767/1767] Install: out/host/linux-x86/framework/idegen.jar#### build completed successfully (03:15 (mm:ss)) ####
3. 源码根目录下执行 sudo development/tools/idegen/idegen.sh
# 这个步骤一般需要等几分钟,成功后在源码根目录下会生成android.ipr和android.iml两个文件Read excludes: 9ms
Traversed tree: 24991ms
4. 修改android.ipr和android.iml 的文件读写权限,文件默认为只读权限,修改权限后,我们修改android.iml文件,可以自定义只加载哪些模块,这样子在导入整个源码过程中,速度会快一点
# android.iml (记录项目所包含的module、依赖关系、SDK版本等等,类似一个XML文件)
# android.ipr (工程的具体配置,代码以及依赖的lib等信息,类似于Visual Studio的sln文件)# 也是在工程源码根目录下执行如下命令
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
5. 使用文本编辑器打开"android.iml"文件,搜索关键字"excludeFolder ",把不需要加载的模块添加到此处,我一般关注app层和framework层,过滤掉以下模块,配置如下:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<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$/compatibility" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/developers/samples" />
<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$/flashing-files" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
<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$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/shortcut-fe" />
<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" />
好了,接下来就是用Android Studio 打开工程源码下的 android.ipr 文件,此时就开始加载代码,整个过程大概需要十几分钟。
步骤二
这个时候代码加载完成后,但是会发现当你点击应用层中某个Activity调用Framework层 AMS,WMS 中的方法时, 会跳转到 Android SDK中的AMS,WMS文件中去,而不是项目代码中framework/base/对应的AMS,WMS文件。
再者,Activity中定义的成员变量为 String, ArrayList,HashMap类型,在使用的地方(比如String.replace(), ArrayList.add(), HashMap.put()方法)你想具体看看实现源码,发现点击进去跳转到JDK中的jar中包去了,而不是项目代码的/libcore/ojluni/src/main/java/java/io 下的文件。
这个时候,我们就需要新建一个没有任何jar包的自定义的AndroidSDK,然后关联到项目工程上(目的:不用官方的JDK,用项目代码中的jar包)。
好了,接下来开始配置项目所依赖的 JDK 和 SDK
配置自定义SDK的界面,打开路径为:右键项目名->Open Module Settings
图一:
图二:
图三:
图四:
图五:
好了,到这里,等待工程源码加载完毕,就可以正确跳转并阅读源码啦!
工欲善其事,必先利其器,用断点调试定位分析问题,也会让你事半功倍,去在平时的工作
中慢慢积累吧,加油!
【备注】:有些网友说按照步骤设置不成功,存在图二删除jdk jar包不成功 图四中点击apply之后自定义SDK还是会置顶到最上面,导致不能跳转到framework源码(Android Studio Dolphin | 2021.3.1 Patch 1 for Linux 64-bit这个版本存在这个问题), 可能是AS最新版本存在bug暂时没有修复,等修复稳定后再使用吧,本文中AS的版本号为4.1.3 。
官方Android Studio下载地址:https://developer.android.google.cn/studio/archive
Android Studio 导入安卓源码步骤相关推荐
- 使用Android Studio导入安卓源码
1 背景 这篇文章主要说明的是用它来看源码的相关配置(该实例依据官方源码进行配置说明).在android源码中发现有一个development/tools/idegen目录,查了一下发现是生成IDE的 ...
- AS导入安卓源码步骤
Android Studio 导入安卓源码步骤 前言 我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工 ...
- Android AOSP基础(四)Source Insight和Android Studio导入系统源码
本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...
- Android Studio 导入 AOSP 源码
有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...
- Android Studio 导入 AOSP 源码 1
有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...
- android studio im源码,Android Studio 导入 AOSP 源码
有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...
- android sutdio导入源码教程,《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码...
idegen是Android源码中的一个模块,需要编译一下.生成一个jar包.然后再进行构建生成AndroidStudio配置相关文件. > 什么是idegen 要将Android系统源代码工程 ...
- AndroidStudio配合android.jar查看安卓源码
使用as在查看源码的时候经常会有类报错的情况,比如: 下面介绍一种方法修复类似错误,可以直接在as查看的方法. 获取源码 从各种渠道获取到安卓源码,可以从 清华大学开源软件镜像站下载,当然也可以单独下 ...
- NanoMsg框架|Android Studio编译NanoMsg源码
学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2184字,预计阅读6分钟 导语 前面的章节已经把NanoMsg的简介,及C#相关的NNanoMsg使用Demo已经介绍完成了, ...
- android studio 编译Telegram源码
编译Telegram代码,群语音版本 Telegram github地址 编译环境 准备工作 开始编译 拉取代码 检出7.6.1 Android studio打开telegram项目 去除一些代码 运 ...
最新文章
- vc6 C/C++的64位整型
- 计算机/ARM 系统
- BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】
- 等你Battle!——11万个真实场景配置,用AI为车主答疑解惑
- Vue.js 极简小例: 点击事件
- 结构设计模式 - 复合设计模式
- 深圳增强互动科技_增强女性在科技领域的十项原则
- MyBatis框架笔记05:MyBatis条件查询
- filddler一个抓包修改的工具 貌似很强大2017.12.07
- C++ Primer Plus学习(一)—— 基础知识
- 探寻微博背后的大数据原理:微博推荐算法简述
- 计算机一级二级三级缓存,CPU一级缓存,二级缓存和三级缓存是什么意思? CPU缓存有什么用?...
- C语言:下载并安装编译器(MinGW-W64 GCC)win10环境
- js常用的正则匹配(一般不用修改)
- Ceph对象存储的使用
- PLC通过ModbusTCP通讯——基于组态王7.5进行数据采集
- QQ登录+分享+空间分享
- 净空法师法语:你想真正消业障,要用真心待人接物!南无阿弥陀佛!
- 数据质量管理_第四篇 对数变换
- [Intensive Reading]图像生成:GAN
热门文章
- springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
- 基于Android平台的酒店预订管理系统软件设计的论文
- 【图像识别】基于人工蜂群算法优化卷积神经网络CNN实现图像分类附matlab代码
- Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
- office2010每次打开总是出现配置进度
- 南航计算机考研调剂,南京航空航天大学接受调剂生的时间定了,南航读研就业会咋样...
- sap新手学习第一天
- 【学习笔记】人体姿态识别
- 基于Python构建土地利用转移矩阵及完成Markov预测
- 经验:OrCAD Capture卡顿问题的解决方法