一步一步教你如何在AndroidStudio查看Android源码(AOSP源码)


idegen工具

要将Android系统源代码工程导入到Eclipse或者IntelliJ IDEA,关键是要有相应的工程配置文件。

idegen专门为IDE环境调试源码而设计的工具,idegen可以用来生成针对Eclipse和IntelliJ IDEA的Android系统源代码工程配置文件,它位于Android系统源代码工程目录的下列位置:

development/tools/idegen/

AS中导入AOSP源码

将工程导入AS需要下面三个步骤:

  1. 获取到idegen.jar
  2. 获取idegen.sh 执行生成android.ipr/android.iml
  3. Android sutdio 选择android.ipr导入

生成android.ipr等文件

执行下面的命令即可生成android.ipr等文件:

cd ~/aosp //具体的源码根目录
source build/envsetup.sh //用于初始化环境变量
mmm development/tools/idegen/  //生成文件out/host/linux-x86/framework/idegen.jar
./development/tools/idegen/idegen.sh//源码根目录生成文件android.ipr(工程相关设置), android.iml(模块相关配置)

注意:如果是mac,执行命令之前,首先要进入bash,方法也很简单:

bash

否则会报错:报错Couldn’t find directory development/tools/idegen/

导入AndroidStudio

打开AS,点击File -> Open,选中前面生成的android.ipr文件即可,该过程比较耗时。

导入AS配置优化

如果直接进行导入,导入之后,可以看到Android Studio下方,Indexing…会一直显示,时间非常长。其实我们大多数情况下只需要framework下的代码,可以进行一些排除操作。

android.iml文件

iml文件是idea组织工程的文件, 里面记录了各种记录模块, 文件夹以及依赖的信息。一般而言, 创建的工程都会有这个文件, 它的本质是一个工程组织文件, 和Maven的pom.xml, gradle的build.gradle, 等组织工程和处理依赖关系的文件并没有什么差别。

打开android.iml文件,我们会发现这个而文件配置项非常多,主要有类标签:

  • sourceFolder:表示包含的文件目录,通常我们只需要留下framewrok即可。
  • excludeFolder:exclude顾名思义就是不包含的意思。我们有很多目录直接就不想让Studio去管它,不管是索引还是什么等等,所以只需要将这些目录配置到中就好了。

android.iml文件修改

打开android.iml文件,那么我们可以有选择的导入如下:

  <component name="NewModuleRootManager" inherit-compiler-output="true"><exclude-output /><content url="file://$MODULE_DIR$"><sourceFolder url="file://$MODULE_DIR$/../10.0.0_r2frameworks/base/core/java" type="kotlin-source" /><excludeFolder url="file://$MODULE_DIR$/.repo" /><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/eclipse" /><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$/../10.0.0_r2external/emma" /><excludeFolder url="file://$MODULE_DIR$/../10.0.0_r2external/jdiff" /></content><orderEntry type="sourceFolder" forTests="false" /><orderEntry type="inheritedJdk" /></component>

如果已经把全部项目导入到Android Studio,又想删除怎么办,其实有一个简单的方法就是进入目录Project Structure -> Modules, 可快速去除某些模块, 其中红色代码Exclueded选项(即代表已删除的目录), 如下图:

AS中关联源码,实现代码跳转

android.ipr导入AS之后,等待一段时间项目构建过程。

我们想要实现代码跳转,需要对项目进行以下几个步骤的配置:

1. 打开Project Structure

点击File菜单下的Project Structure,打开项目的配置选项。

2. 创建JDK

选择“SDKs” -> 中间栏”+“号 -> 选择新建JDK -> 配置如下(选择一个系统的,然后修改即可):

重点:创建一个自定义名称的jdk、将Classpath和Sourcepath下的依赖都删除。

3. Android API依赖

选择目标API版本,将Java SDK修改为我们上一步创建的那个JDK,并且将Classpath和Sourcepath中的依赖清空。

配置Project

选择”Project"选项,这里很简单,只需要设置目标API即可:

配置Modules

这里很关键,我们选择“Modules”,中间栏选中项目,这里先配置API为对应版本,然后在Dependencies项目依赖选项卡中,需要删除所有能删除的选项,然后添加我们的源码目录为新的依赖项(这里我只添加了framewroks目录)。还有一点需要注意,把我们新添加的目录移动到顶部,这样就会优先从我们的源码目录查找代码了。

配置Modules 2

在Modules中,我们切换选项卡到"Sources",然后选择我们的frameworks目录,点击"Mark as“那行中的”Source",代表添加frameworks到源码目录。(也可以在frameworks目录上右键单击,弹框中选择“Source"选项。)

另外,如果我们不需要其他文件夹,可以使用同样类似操作,将该目录标记为”Excluded"的状态即可(添加后,会在窗口右侧展示为红色文本)。

错误处理

Mac系统上,AS启动后,提示一个错误:

Filesystem Case-Sensitivity Mismatch The project seems to be located on a case-sensitive file system. This does not match the IDE setting (controlled by property “idea.case.sensitive.fs”)

问题的原因是:在Mac和windows上默认文件系统都是不区分大小写的,而Linux和friends的文件系统则是区分大小写的。

Mac端解决办法:

显式的告诉IDE我的文件系统是区分大小写的。修改文件idea.properties,位置在IED的包内容目录(右键APP,显示包内容),在idea.properties文件内加上如下代码:

idea.case.sensitive.fs=true

添加后,保存,然后重新打开AS即可。


**PS:更多精彩内容,请查看 --> 《AOSP 专栏》
**PS:更多精彩内容,请查看 --> 《AOSP 专栏》
**PS:更多精彩内容,请查看 --> 《AOSP 专栏》

一步一步教你如何在AndroidStudio查看Android源码(AOSP源码)相关推荐

  1. 新手linux安装vasp_一步一步教你如何在linux 下安装VASP 【真的是从零开始】

    首先我是一个linux 小白,只接触过linux 的基本用法, 听说VASP 编译很复杂,故想学习之. 如果大神见了,请直接飘过,非常期待和大家互动交流. 下面就直接进入主题. 如何在linux 下面 ...

  2. 一步一步教你如何在GitHub上上传自己的项目,亲测有效无bug,

    直接在github 仓库中 add file 添加自己的文件 ###################################### 本地 git 仓库的建立 修改 删除 命令 git conf ...

  3. linux搭建cdn教程_网站搭建新手教程:一步一步教你拥有一个属于自己WordPress网站...

    应网友要求,今天知识吧为大家分享一篇新手建站教程,本来是打算做一个视频教程的,毕竟大家看的会直观一些,但是由于我的个人电脑在并不在身边,在公司电脑录新手建站视频又不太合适,所以就为大家写一篇图文教程吧 ...

  4. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  5. 教你一步一步用C语言实现sift算法、上

    原文:http://blog.csdn.net/v_july_v/article/details/6245939 引言:     在我写的关于sift算法的前倆篇文章里头,已经对sift算法有了初步的 ...

  6. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...

    系列回顾 在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出 ...

  7. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. include_fns.php_一步一步教你用PHP+MySql筹建网站 No.3 管理页面_mysql

    一步一步教你用PHP+mysql搭建网站 No.3 管理页面 先来看一下本篇blog将要介绍的内容. 我们的主页面已经搭建完成了,然后左边的navigation里面的大部分内容也都能点击了,只剩下&q ...

  9. 超级简单:一步一步教你创建一小型的asp.net mvc 应用程序

    超级简单:一步一步教你创建一小型的asp.net mvc 应用程序 这本教程中将帮助你创建一个小型的asp.net mvc示例. 在本教程中,我们将创建自己的 Model , View 和Contro ...

最新文章

  1. Proteus原理图元器件库详细说明
  2. Find the AFei Numbers
  3. 机器学习第六篇:详解支持向量机算法
  4. 这门国产编程语言,确实很棒!
  5. 三维点云学习(4)5-ransac
  6. 安卓ListView行详细内容展示页编写和下拉刷新实现
  7. 西门子阀门定位器常见的故障代码以及解决方法
  8. 线性代数知识框架梳理
  9. python控制本地音乐播放器_如何使用python控制音乐播放器
  10. PDF密码强制解除——一键解除
  11. Word - 修改界面语言和校对语言
  12. 利用windbg简单调试dump文件
  13. pagefile文件大小设置
  14. Linux使用Maven部署SpiderFlow爬虫平台
  15. 索尼xz1c 日版融卡扩容经验分享(无需root,索尼XZP机型也适用)
  16. Android系统各个版本系统特性整理(1.1-6.0)
  17. php 活动网站,网页游戏的活动管理后台和管理后台
  18. QT安装段错误segmentation fault
  19. r 语言c函数,R语言常用函数详解
  20. Flutter 元宇宙开发教程之通过 Flutter 和增强现实实现 Metaverse

热门文章

  1. 计算机应用基础有哪些作用,谈现代媒体在计算机应用基础教学中作用.doc
  2. 第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,
  3. 笔记本显示网络电缆被拔出怎么解决_电脑提示网络电缆被拔出怎么处理
  4. 中国中心城市都市圈发展指数榜单:北京、上海、深圳位列三甲
  5. [Topcoder SRM 590]Fox And City(网络流建模)
  6. Res2net:多尺度骨干网络结构
  7. 【SpringBoot】SPI 与 spring.factories
  8. XT800刷机图示傻瓜教程
  9. java 去掉pdf文字_Java 添加和删除PDF图层
  10. 微信测试软件 精准用户,怎样找到精准用户微信群?《小码软件技巧篇》