目录
(1) gradle是什么
(2) 工程的jdk版本,及引用包的编译版本的关系
实践
问题与解决
编译成功与运行成功
编译成功
运行成功
(1) gradle是什么
Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译、打包等过程。我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建app;
什么是AGP, android studio这个版本用来管理 gradle的插件,AGP越新,则随之可支持的gradle版本越高。
gradle我理解也要依赖jdk ,这一块gradle下依赖的jdk版本,取决 于gradle本身。如果两者不兼容,会造成gradle的功能异常,比如打包失败等问题。
这一块就讲明白了。与工程里代码本身的jdk版本没有任何关系 !
(2) 工程的jdk版本,及引用包的编译版本的关系
工程里的编译jdk版本,与引用的jar包的关系 ?
比如 :
低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0
https://blog.csdn.net/weixin_42668169/article/details/134777681
由上可以说明,我可以正常编译我的当前 版本,用低的jdk;然后在运行的时候,我选择正确的运行环境,高的jdk版本,如下链接所示,高版本的android sdk对应 高jdk版本。
这样即保证了编译的成功,又可以在运行的时候以高版本jdk来运行整个工作,jdk可以向下兼容,这样就不会报错。
工程本身的jdk编译版本:
那么在android studio环境里, 我们调节运行环境,其实也就是调节的
Android版本与SDK/API版本、JDK对应关系。---以确定运行环境的jdk版本
https://blog.csdn.net/qq_42690281/article/details/131640670
实践
按以上的思想,我们成功把
源码 (1.8) + aar (jdk11)的+ android23 一起重新构建打包成功,只是在运行的时候,报错,应该是具体的业务关系;将aar恢复 成原 google-webrtc.32006也可以正常地运行。说明这种兼容关系搞清楚 了
问题与解决
源码 (1.8) + aar (jdk17)的+ android24 编译成功的例子
(1) duplicate class
> Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules jetified-kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and jetified-kotlin-stdlib-jdk8-1.7.20 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.20)
android studio非业务代码报错 Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules。-CSDN博客
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
(2) superclass access check
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (...
Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (... - 简书 (jianshu.com)
(3) webrtc版本变更引起的不兼容,注释掉
(4)自己手动加的类的功能 ,先注释掉
(5)莫名其妙的不兼容 去掉
编译成功与运行成功
编译成功
运行成功
源码 (1.8) + aar (jdk17)的+ android34
我的天,运行也成功了!!
可以授权 进入 ,点播拉流与录相; 但还存在 太多兼容问题,毕竟是新包,且我无脑删除了那么多的不兼容,先不管了,毕竟只是为了验证如果去兼容一个最新包。