Android Studio 导入frameworks源码

概述

最近发现之前导入到AS中的framework源码各种无法跳转,阅读起来很糟心,之前网上找的的导入方法没有保留,从新找了好几篇文章都是有或多或少的问题,所以打算自己研究完整导入一次并做个记录,后续就不需要再去到处找方法了。

导入步骤

1.编译出ipr和iml文件

  1. 配置编译环境:
source  build/envsetup.sh
lunch
  1. 编译idegen模块
mmm development/tools/idegen/
#### build completed successfully (01:28 (mm:ss)) ####
//看到以上信息说明编译成功
  1. 执行脚本生成ipr和iml文件
development/tools/idegen/idegen.sh
Read excludes: 20ms
Traversed tree: 50800ms
//看到以上信息说明脚本执行成功已生成对应的ipr和iml文件

执行完毕以后可以在根目录看到android.iml和android.ipr文件
ipr和iml文件

2.拷贝

电脑本地新建文件夹framews_new,从服务器上将frameworks文件及里面内容全部拷到framews_new下,这样可以加快AS读文件速度,AS阅读源码时也不会卡顿
再将刚刚生成的ipr和iml文件拷贝到framews_new下,目录结构如下:
目录结构

3.精简iml文件

脚本生成的iml文件中包含Android整个源码的内容路径,我们只是需要阅读framework的源码所以不需要那么多东西,将和frameworks无关的路径全部删除
删除前:
在这里插入图片描述
在这里插入图片描述
删除后:
在这里插入图片描述
在这里插入图片描述
并将module-library 中将和frameworks无关的也全部删除

3.用AS打开ipr

直接用AS打开ipr文件,然后等待AS自动导入,由于有对iml精简,并且将frameworks代码放到本地,这个过程应该只需要几分钟。
打开以后我们就可以阅读framework源码了,但是这个时候并不能进行代码跳转,接下来就是添加代码跳转

4.添加代码跳转

  1. 打开Project Structure->Modules
    Project Structure
    将Dependencies下不需要的删掉,比如我就删掉了:android-28.jar
  2. 添加framework目录当做项目依赖,来支持代码跳转
    点击+号,选择JARs or Directories
    在这里插入图片描述
  3. 选择framework_new下的frameworks目录
    在这里插入图片描述
  4. 在选择sources目录时,先取消全选,接下来只选择frameworks中需要跳转到的目录,如base\core\java,base\service 目录下的内容,并且需要排除掉tests目录
    在这里插入图片描述
  5. 点击确定以后会在Dependencies中生成 framework.jar(可以自己取名字),将生成的framework.jar 优先级调到最高
    在这里插入图片描述
    此处的frameworkjar可以进行编辑,添加或者删除依赖的路径
  6. 添加Android module,并对module进行配置
    在这里插入图片描述
    点击Android module以后将这些目录分别替换为:

Manifest file : xxx\framews_new\frameworks\base\core\res\AndroidManifest.xml
Resources directory : xxx\framews_new\frameworks\base\core\res
Assets directory : xxx\framews_new\frameworks\base\core\res\assets
Native libs directory : xxx\framews_new\frameworks\base\core\jni

  1. 点击Apply并且OK整个配置就完成了
    在这里插入图片描述
    可以看到整个代码基本可以正常跳转,部分无法跳转的一般为 aidl文件 或者其他非java文件

总结

平时不积累,用时跑断腿。
之前配置的时候没有进行总结,导致后面重新配置的时候走了很多弯路,并且配置了好多次都没法正常跳转,影响代码阅读。
此次总结一次,印象深刻,实在不行还算有个记录。
这些步骤是我一步步跑下来的,基本没啥问题,AS版本也是最新的。
这些步骤下来,Attach Debugger打断点也应该是可以用的,还没实验~ 后面实验了再更新结果好了
如有疑问欢迎留言!!!

猜你喜欢

转载自blog.csdn.net/weixin_40774418/article/details/127307979