一、前言
大概说一下我们项目一些工具版本情况:
- JDK : 11
- gradle:7.3.3
- AGP:7.2.2
- Android Studio 版本:
二、编译报错
这天我高高兴兴的开始编译,点了一下 IDE 的这个按钮:
突然,来了一拨飘红:
完整内容如下:
1 | csharp复制代码OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0 |
同时,我用命令行进行编译 **./gradlew clean assembleDebug**
,发现可以正常编译通过,这就有点神奇了。我也尝试了重启大法,**重启 IDE、重启电脑、invalidate caches & restart**
都不 work
三、冷静分析
首先看到报错的第一时间,肯定是看清楚报的具体是什么错误,是什么东西导致的。
从错误里我们能看到,一个叫 com/android/tools/tracer/agent/TraceAgent
的文件已经被编译成了 61.0 版本的 class 文件,我们配置的 java 编译环境只能够识别 55.0 版本的 class 文件。从下面表格能看出来,一个是 JDK17,一个是 JDK11。
疑惑一:哪里配的 jdk17?
我们检查一下我们 IDE 上的一些配置,包括:
- gradle JDK 配置:
- gradle build tools配置:
并没有看到有任何的 JDK 17的配置。
疑惑二:**com/android/tools/tracer/agent/TraceAgent**
究竟是个啥文件?
顺手google一下,找到了这个文件:/studio-master-dev/tracer/BUILD 这个文件里有个配置就是我们报错的这个文件。
四、摸清问题
摸清问题前,我们汇总一下现有的一些信息:
- AndroidStudio 的编译不通过,但是命令行能编译通过
- 清 IDE 的 cache及一些其他的重启大法都不好使
- 报错是说 TraceAgent 是个 JDK17 的 class,无法被我们的编译环境配置的 JDK11 识别
- 我们项目里、IDE 的配置里都没有 JDK 17 的配置
- gogole 一下 TraceAgent,能在 /studio-master-dev/tracer/BUILD 里找到相关内容
/studio-master-dev/tracer/BUILD 是个啥玩意儿?
看起来是 AndroidStudio 的一个编译期会生效的工具,名叫 tracer,如果真是这样的话:
- 能解释的清为啥 IDE 编不过,但是命令行可以,因为命令行编译的过程中,肯定不会有 tracer 的工具在 work。
- 能解释的清为啥清各种 IDE 和重启大法不好使,以及为啥报错的是个 JDK17 的 class,是Android Studio的工具肯定不会在大家编译 app 的时候现编然后生效的,只可能是工具提前已经编译好了,而且是用 JDK17 编译的。
接着我们去 IDE 的设置里尝试搜一下 trace 关键字看看,找到了一个好像有关系的设置 Trace Gradle import with profile
我们试着把他关闭一下,重新编译下看看:
最后再正反印证下,把 tracer 的开关打开,果然,再次编译失败,而且跟之前错误一毛一样。
再后面的 tracer 工具到底是个啥,怎么 work 的,没啥兴趣去了解了。
五、写在最后
- 遇到问题不要慌,从肉眼可见的线索去发散的多想想
- 大家喜欢周末,大家也喜欢下班,国庆节后的两天 周末+下班 大家应该爽死了。
你可能感兴趣
Android QUIC 实践 - 基于 OKHttp 扩展出 Cronet 拦截器 - 掘金 (juejin.cn)
Android启动优化实践 - 秒开率从17%提升至75% - 掘金 (juejin.cn)
如何科学的进行Android包体积优化 - 掘金 (juejin.cn)
Android稳定性:Looper兜底框架实现线上容灾(二) - 掘金 (juejin.cn)
基于 Booster ASM API的配置化 hook 方案封装 - 掘金 (juejin.cn)
记 AndroidStudio Tracer工具导致的编译失败 - 掘金 (juejin.cn)
Android 启动优化案例-WebView非预期初始化排查 - 掘金 (juejin.cn)
chromium-net - 跟随 Cronet 的脚步探索大致流程(1) - 掘金 (juejin.cn)
Android稳定性:可远程配置化的Looper兜底框架 - 掘金 (juejin.cn)
一类有趣的无限缓存OOM现象 - 掘金 (juejin.cn)
Android - 一种新奇的冷启动速度优化思路(Fragment极度懒加载 + Layout子线程预加载) - 掘金 (juejin.cn)
Android - 彻底消灭OOM的实战经验分享(千分之1.5 -> 万分之0.2) - 掘金 (juejin.cn)
本文转载自: 掘金