关于安卓编译报错(一)kotlin依赖报错

背景

杂乱的项目依赖,成为了安卓项目的噩梦。版本号的不统一,经常导致一些依赖冲突。所以有了此文。

现象

安卓项目rebuild或者打release包的时候,存在报错情况:

(一)kotlin version编译不一致导致报错

复制代码
compiled with an incompatible version of Kotlin. 
The binary version of its metadata is 1.8.0, expected version is 1.6.0.

细看英文提示,就是说,项目编译的过程中,编译版本,使用的kotlin version和期望的版本不一致,导致无法编译通过。

那不就好办了吗?解决方法大致有以下:

(1)修改gradle版本,使之使用的kotlin版本和期待的kotlin版本一致。

(2)升级依赖,使之和编译的版本一致

(3)强制统一项目的kotlin版本

上述的几种方法,各有优缺点。

对于(1)来说,有些项目的gradle版本,不是说升级就升级的,对内,项目中涉及到的一些sdk依赖,配置文件声明,有众多联系,对外,涉及到一些三方自动打包工具编译环境,也会有众多关联,因此升级会带来很多时间,人力成本。而其优点,则是更新了整体的编译环境,速度,质量,可维护性都有所提高。

对于(2)来说,升级依赖,其影响主要是项目内。有些三方sdk由于设计存在的缺陷,大版本升级,往往会导致api废弃甚至遗失的情况,因此也会耗费极多的人力成本。

对于(3)来说,短期内,就能快速地解决问题。但是要注意,各个依赖关系中存在的版本偏差!不过,一般对于这种官方的版本,维护性都是极高的,所以版本跨度不大的情况下,兼容性都是极好的。

本文,将会以(3)方法,解决冲突引起的问题。

通过整理错误的log,归纳出一共有以下的冲突:

复制代码
kotlin-stdlib
annotation-jvm
androidx.annotation
kotlin-stdlib-jdk7
kotlin-stdlib-jdk8

所以,这里要强制指定上述依赖的版本即可。

首先,通过点击gradle-->app-->help->dependencies即可看到项目的依赖,然后得出统一的版本号即可。

依赖有可能很多,所以建议复制下来对比着看。

而本次实战中,是通过修改项目根build.gradle来实现版本的统一,核心代码如下:

复制代码
/*强制统一版本号*/
subprojects {
    configurations.all {
        resolutionStrategy {
            force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
            force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
            force "androidx.annotation:annotation:1.2.0"
            force "androidx.annotation:annotation-jvm:1.6.0"
            force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
        }
    }
}

上述代码的意思,就是指定了kotlin相关的具体依赖的版本号,实际要指定哪些依赖,要看报错来做,不能一概而论。

最后rebuild,打release包成功,则认为修改成功。

that'a all-------------------------------------------------------------------------------------

相关推荐
点云SLAM1 分钟前
C++ 中的栈(Stack)数据结构与堆的区别与内存布局(Stack vs Heap)
开发语言·数据结构·c++·内存布局·栈数据结构·c++标准算法·heap内存分配
枫子有风6 分钟前
【go.sixue.work】2.2 面向对象:接口与多态
开发语言·后端·golang·xcode
Proud lion7 分钟前
Apipost 脚本高频场景最佳实践:搞定接口签名验证、登录令牌刷新、动态参数生成等
android
介一安全18 分钟前
【Frida Android】实战篇5:SSL Pinning 证书绑定绕过 Hook 教程(二)
android·网络安全·逆向·安全性测试·frida
2501_9371931424 分钟前
PLB-TV 影视!无广告 + 4K 高清
android·源码·源代码管理·机顶盒
阿斌_bingyu7091 小时前
uniapp实现android/IOS消息推送
android·ios·uni-app
Android系统攻城狮1 小时前
Android内核进阶之周期更新PCM状态snd_pcm_period_elapsed:用法实例(九十二)
android·pcm·android内核·音频进阶
qq_401700411 小时前
QT的5种标准对话框
开发语言·qt
Cola可洛2 小时前
修复Flyme移植BUG
android·bug
智者知已应修善业2 小时前
【给定英文字符串统计最多小写最前输出】2023-2-27
c语言·开发语言·c++·经验分享·笔记·算法