一步一步教你如何在AndroidStudio查看Android源码(AOSP源码)_如何用android studio 查看android源码-程序员宅基地

技术标签: AOSP 专栏  AOSP  android  android studio  IDE  源码  

一步一步教你如何在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 专栏》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011578734/article/details/108339776

智能推荐

IDG资本投资列表_idg 被投企业清单-程序员宅基地

文章浏览阅读8.1k次。2016.12.20 乐刻运动 体育运动 B轮 亿元及以上人民币2016.12.14 SenseTime商汤科技 企业服务 B轮 1.2亿美元2016.12.13 OL里昂 体育运动 战略投资 1亿欧元2016.12.13 High Fidelity _idg 被投企业清单

VR全景云端看车,让你享受不一样的购车体验_vr看车-程序员宅基地

文章浏览阅读127次。此外,VR全景看车还可以提供个性化选车服务,根据消费者的喜好和需求来匹配合适的车型,消费者自定义汽车的外观和配置,以此来挑选更符合心意的车辆。消费者通过VR全景技术,身临其境云端看车,720度多角度缩放查看,同传统的图文视频的看车模式相比,VR看车展现的更加详细,3D可视化说明书、热点标注、一键更换外观等,帮助消费者解决了不少的看车难题。除此之外,在VR虚拟车展中,我们还可以适当的添加一些营销活动,例如签到有礼、分享转发、砸金蛋等趣味化游戏,让消费者得到一些购车优惠,这样能更有效提升意向客户的购买率。_vr看车

vue购物车案例,v-model 之 lazy、number、trim,与后端交互_input v-modal原生并实现lazy-程序员宅基地

文章浏览阅读460次,点赞5次,收藏8次。3 axios 第三方ajax,只有ajax,没有别的,小--》底层还是基于XMLHttpRequest。提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分。# 1 使用jq的ajax ===》不好---》引入了jq框架,好多功能用不到。number:数字开头,只保留数字,后面的字母不保留;lazy:等待input框的数据绑定时区焦点之后再变化。# 2 原生js fetch。trim:去除首位的空格。_input v-modal原生并实现lazy

Python+Tkinter实现RGB数值转换为16进制码_python_tkinter 颜色16进制代码大全-程序员宅基地

文章浏览阅读158次。设置控件,这里用rVar,gVar,bVar来储存rgb数值,用Scale制作滑块。_tkinter 颜色16进制代码大全

全角半角互相转换_r如何切换全角半角-程序员宅基地

文章浏览阅读185次。【代码】全角半角互相转换。_r如何切换全角半角

02架构管理之研发管理-程序员宅基地

文章浏览阅读178次。研发管理(Research and Development Management,R&D Management)是一种系统性的管理活动,是以产品开发流程为基础的项目管理体系,旨在规划、组织、协调和监督研发项目,对研发项目的人员、计划、质量、成本等进行综合管理,从而打造高效能的研发团队,更好更快地实现项目目标。研发管理的本质是从流程化,标准化,制度化等维度建立管理机制。最终的核心目标是通过管理的法治建立标准化的操作规范,再通过标准化的规范提升人员的协作效率、监督机制、系统稳定性/安全性等。

随便推点

TLS_server_method() / TLS_client_method()-程序员宅基地

文章浏览阅读5k次。https://github.com/guanzhi/GmSSL/blob/master/include/openssl/ssl.h#L1673-L1720#define SSLv23_method TLS_method#define SSLv23_server_method TLS_server_method#defi..._tls_server_method

EduSoho开源版 播放几分钟就 您的浏览器不能播放此视频_edusoho 视频加载遇到问题-程序员宅基地

文章浏览阅读666次。EduSoho开源版 播放几分钟就 您的浏览器不能播放此视频,快进也会出现相同的问题。本地视频出现当前浏览器不能播放的原因:1、服务器 php 是否安装 fileinfo组件。2、视频格式编码不是MP4,H264编码,如果不清楚格式编码,用格式工厂重新转码输出MP4,H264编码;3、视频太大或者网络太慢,本地视频没有切片播放功能,加载完全时才能播放,如果在固定时间内没有加载完全,就会出现不能播放提示。处理建议:可以对接第三方云视频,例如阿里云点播、腾讯云点播、七牛云点播、保利威视点播等等._edusoho 视频加载遇到问题

AS入门第三课:AS基本语法-程序员宅基地

文章浏览阅读74次。在第一课中我们己经介绍过,ActionScript是一部语言,即然是语言它就有它自己的语法[color="#993300"][1b]一、ActionScript语句是区分大小写的:[/1b][/color]在ActionScript中英语字母的大小写具有不同的意义的.我们来看一个例子:打开时间轴第一帧的动作面板,输入: Name="Sanbos"; name="假博士"; ..._前端as语法

mqtt环境搭建(ubuntu)_mtuptty搭建-程序员宅基地

文章浏览阅读468次。安装sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppasudo apt-get updatesudo apt-get install mosquittosudo apt-get updatesudo apt-get install mosquitto-devsudo apt-get install mosquitto-clients查看状态sudo service mosquitto status 本地测试#.._mtuptty搭建

STM32F4——TFT-LCD原理及FSMC_stm32f4 lcd控制器-程序员宅基地

文章浏览阅读4k次。TFT-LCD一、简介: TFT-LCD即薄膜晶体管液晶显示器,依据其尺寸、分辨率和驱动芯片的不同有很多分类,下边会依据2.8寸320X240分辨率以ILI9341芯片驱动的TFT-LCD做相关介绍。二、接口: 模块采用16位并方式与外部连接,其相关接口图及信号线功能如下: CS:TFTLCD片选信号。WR:向TFTLCD写数据。R_stm32f4 lcd控制器

基于加权人工鱼群算法的深空天线定位PID控制器优化设计附matlab代码_鱼群算法 pid 代码-程序员宅基地

文章浏览阅读117次。在分析数控机床进给伺服系统数学模型的基础上,采用一种基于人工鱼群算法优化PID控制器参数,并与传统的Ziegler-Nichols法进行比较.仿真实验结果表明:人工鱼群PID控制方法的效果明显优于传统的PID控制,具有良好的动态和稳态性能._鱼群算法 pid 代码

推荐文章

热门文章

相关标签