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

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.lryc.cn/news/209455.html

相关文章:

  • FileInputStream文件字节输入流
  • 【Qt】窗口和对话框区别、主窗口和二级窗口区别、QMainWindow和QDialog区别
  • Python参数种类介绍
  • react事件机制
  • JAVA删除excel指定列
  • Netty编码器和解码器
  • 大语言模型(LLM)综述(三):大语言模型预训练的进展
  • 如何在Node.js中使用环境变量或命令行参数来设置HTTP爬虫ip?
  • VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools
  • pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现
  • 【QT开发(14)】QT P2P chat 聊天
  • 解决adb root命令时错误 adbd cannot run as root in production builds
  • 操作系统中套接字和设备独立性软件的关系
  • C++ Qt/VTK装配体组成联动连接杆
  • File文件查找
  • 小程序 wxml2canvas开发文档
  • SpringCloud微服务 【实用篇】| 认识微服务
  • Csdn文章编写参考案例
  • Jmeter性能测试:高并发分布式性能测试
  • 2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序
  • CCF CSP认证历年题目自练 Day40
  • 闲聊一下写技术博客的一些感想
  • 单片机为什么一直用C语言,不用其他编程语言?
  • 利用HTTP2,新型DDoS攻击峰值破纪录
  • android鼠标滚轮事件监听方法
  • 【C语言|关键字】C语言32个关键字详解(4)——其他(typedef、sizeof)
  • Hafnium简介和构建
  • 2023年香水行业数据分析:国人用香需求升级,高端香水高速增长
  • 这可能是最简单的Page Object库
  • 论文阅读——BERT