前言

我们做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 导入安卓源码步骤相关推荐

  1. 使用Android Studio导入安卓源码

    1 背景 这篇文章主要说明的是用它来看源码的相关配置(该实例依据官方源码进行配置说明).在android源码中发现有一个development/tools/idegen目录,查了一下发现是生成IDE的 ...

  2. AS导入安卓源码步骤

    Android Studio 导入安卓源码步骤 前言 我们做Android系统源码开发,在定位问题的过程中经常要从App层跟踪代码到Framework层中,为了更加方便的查找代码,这时候就需要把整个工 ...

  3. Android AOSP基础(四)Source Insight和Android Studio导入系统源码

    本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 前言 在上一篇文章Android AOSP基础(三)Android系统源码的整编和单编中,我们对 ...

  4. Android Studio 导入 AOSP 源码

    有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...

  5. Android Studio 导入 AOSP 源码 1

    有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...

  6. android studio im源码,Android Studio 导入 AOSP 源码

    有了 AOSP 源码,接下来就是如何看了,可以直接文本看,可以用 Source Insight,我当然选择 Android Studio,Android Studio 是我熟悉且十分强大的工具.问题来 ...

  7. android sutdio导入源码教程,《AndroidStudio导入安卓源码-idegen》---可方便查看安卓源代码...

    idegen是Android源码中的一个模块,需要编译一下.生成一个jar包.然后再进行构建生成AndroidStudio配置相关文件. > 什么是idegen 要将Android系统源代码工程 ...

  8. AndroidStudio配合android.jar查看安卓源码

    使用as在查看源码的时候经常会有类报错的情况,比如: 下面介绍一种方法修复类似错误,可以直接在as查看的方法. 获取源码 从各种渠道获取到安卓源码,可以从 清华大学开源软件镜像站下载,当然也可以单独下 ...

  9. NanoMsg框架|Android Studio编译NanoMsg源码

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为2184字,预计阅读6分钟 导语 前面的章节已经把NanoMsg的简介,及C#相关的NNanoMsg使用Demo已经介绍完成了, ...

  10. android studio 编译Telegram源码

    编译Telegram代码,群语音版本 Telegram github地址 编译环境 准备工作 开始编译 拉取代码 检出7.6.1 Android studio打开telegram项目 去除一些代码 运 ...

最新文章

  1. vc6 C/C++的64位整型
  2. 计算机/ARM 系统
  3. BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】
  4. 等你Battle!——11万个真实场景配置,用AI为车主答疑解惑
  5. Vue.js 极简小例: 点击事件
  6. 结构设计模式 - 复合设计模式
  7. 深圳增强互动科技_增强女性在科技领域的十项原则
  8. MyBatis框架笔记05:MyBatis条件查询
  9. filddler一个抓包修改的工具 貌似很强大2017.12.07
  10. C++ Primer Plus学习(一)—— 基础知识
  11. 探寻微博背后的大数据原理:微博推荐算法简述
  12. 计算机一级二级三级缓存,CPU一级缓存,二级缓存和三级缓存是什么意思? CPU缓存有什么用?...
  13. C语言:下载并安装编译器(MinGW-W64 GCC)win10环境
  14. js常用的正则匹配(一般不用修改)
  15. Ceph对象存储的使用
  16. PLC通过ModbusTCP通讯——基于组态王7.5进行数据采集
  17. QQ登录+分享+空间分享
  18. 净空法师法语:你想真正消业障,要用真心待人接物!南无阿弥陀佛!
  19. 数据质量管理_第四篇 对数变换
  20. [Intensive Reading]图像生成:GAN

热门文章

  1. springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
  2. 基于Android平台的酒店预订管理系统软件设计的论文
  3. 【图像识别】基于人工蜂群算法优化卷积神经网络CNN实现图像分类附matlab代码
  4. Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别
  5. office2010每次打开总是出现配置进度
  6. 南航计算机考研调剂,南京航空航天大学接受调剂生的时间定了,南航读研就业会咋样...
  7. sap新手学习第一天
  8. 【学习笔记】人体姿态识别
  9. 基于Python构建土地利用转移矩阵及完成Markov预测
  10. 经验:OrCAD Capture卡顿问题的解决方法