进一步了解android studio 里 AGP,gradle等关系

发布于:2024-04-28 ⋅ 阅读:(53) ⋅ 点赞:(0)

目录

(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

   我的天,运行也成功了!!

可以授权 进入 ,点播拉流与录相; 但还存在 太多兼容问题,毕竟是新包,且我无脑删除了那么多的不兼容,先不管了,毕竟只是为了验证如果去兼容一个最新包。