当前位置: 首页 > article >正文

Android Studio 查看Framework源码

1、背景

安卓系统源码量很庞大,选择好的开发工具和方式去开发可以提升开发效率,常用的开发工具有Source Insight 、Visual Studio Code、Android Studio,vscode适合C和C++代码开发,java层代码无法跳转和提示,因此,涉及到java层的代码还是用as开发方便些,本文将介绍as集成Framework源码开发方式

2、编译出ipr

2.1 配置编译环境
//在源码根目录执行以下
source build/envsetup.sh
lunch kona-userdebug  //这里可能不一样,例如 lunch 40 也可以,根据场景选择
2.2 编译idegen模块
mmm development/tools/idegen/  //生成文件 out/host/linux-x86/framework/idegen.jar
2.3 执行脚本生成ipr和iml文件
./development/tools/idegen/idegen.sh

//博主这边执行上面命令后,生成的ipr文件在该目录:/development/tools/idegen/templates/android.ipr
//注:有可能每个人的不一样,可以在源码根目录通过以下命令搜索:find . -name android.ipr

 将生成的android.ipr文件拷贝到源码根目录

3、将导入AndroidStudio

打开AS,点击File -> Open,选中前面拷贝到源码根目录下的android.ipr文件即可,该过程比较耗时。

android.iml文件

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

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

sourceFolder:表示包含的文件目录,通常我们只需要留下framewrok即可。

excludeFolder:exclude顾名思义就是不包含的意思。我们有很多目录直接就不想让Studio去管它,不管是索引还是什么等等,所以只需要将这些目录配置到中就好了。

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

选择左边的文件目录右击选择 Exclueded即可,如果加载的目录太大,将消耗很长时间去加载,建议用不上的目录直接屏蔽掉

4、open android.ipr加载缓慢和卡顿问题处理

4.1 取消加载git,采取手动同步代码的方式sync代码,如下图:

4.2 2.加大AS运行内存

5、linux中安装Android Studio,Window中访问编辑

如果window电脑配置不高,导入源码打开as后,电脑出现很卡现象,针对这种问题,博主介绍另外一种方法 

5.1 寻找一台配置高的linux服务器

在服务器中安装linux版本的Android studio以及配置jdk环境

5.2 window中安装Xmanager ,博主安装的是Xmanager 7,用的是xshell7
5.3 windows 电脑上用xshell 连接访问服务器,然后在Android Studio 中,cd到android-studio/bin目录,执行 studio.sh脚本,即可打开Android Studio,然后导入android.ipr即可

注意:一般导入编译的iml文件和android.ipr文件即可源码跳转和提示,博主遇到了无法实现跳转的问题,就把之前生成的可跳转的iml文件和android.ipr文件拷贝到源码目录,就可以了,前提是源码和目录是一样的才行。iml文件中包含Android整个源码的内容路径,一般有一万多行以上,如果几十行,一般是有问题,没办法跳转和访问。


http://www.kler.cn/news/107323.html

相关文章:

  • 基于LCC的Buck谐振变换器研究
  • arcgis js api FeatureLayer加载时返回数据带*问题
  • 针对多分类问题,使用深度学习--Keras进行微调提升性能
  • MySQL数据库#6
  • Redis 主从复制和哨兵监控,实现Redis高可用配置
  • 革新技术,释放创意 :Luminar NeoforMac/win超强AI图像编辑器
  • 浅谈UI自动化测试
  • KDChart3.0编译过程-使用QT5.15及QT6.x编译
  • 深度学习——图像分类(CIFAR-10)
  • Centos系统使用yum安装Java jdk
  • OpenCV学习(一)——图像读取
  • Mysql 数据库
  • 数据分析和互联网医院小程序:提高医疗决策的准确性和效率
  • 网络协议--TCP:传输控制协议
  • 「网络编程」数据链路层协议_ 以太网协议学习
  • LeetCode 1465. 切割后面积最大的蛋糕
  • Elasticsearch7.8.1集群安装手册
  • vscode 保存 “index.tsx“失败: 权限不足。选择 “以超级用户身份重试“ 以超级用户身份重试。
  • Java NIO 高并发开发
  • 列表自动向上滚动
  • 【Android内存优化】内存泄露优化之强引用变弱引用完全详解
  • ElasticSearch快速入门实战
  • ConcurrentHashMap 的 size()方法是线程安全的吗?为什么
  • 程序生活 - 减肥小记
  • C复习-指针
  • WPF:自定义按钮模板
  • xxl-job-架构及原理
  • 【24种设计模式】单例模式(Singleton Pattern)
  • 基于MATLAB的电流、电压互感器特性的仿真分析
  • 数据库MySQL(六):事务