分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.

前言

当打包项目时会出现标题错误,有时候会弹出此错误但不影响打包,有时候会导致直接打包失败但可以直接在AS中安装,很是头大。

以我报错内容为例:【android其元数据的二进制版本为1.8.0,预期版本为1.5.1 】,刚开始以为项目中有使用了 Kotlin 1.5.1 的版本呢,结果一顿搜索下来并未发现 此版本的任何信息?心里一万个草泥马狂奔。开始百度~

百度遇见很多版本的解决方案,大多不适用,具体分为以下几种:

情况1:

由于新版gradle 和 旧版gradle 文件格式并不相同,搜索到的大多是旧版gradle格式,例如存在 ext.kotlin_version = "1.5.31"代码行,结构大致如下:

bash 复制代码
buildscript {
    ext.kotlin_version = "1.5.31" // 设置你希望使用的Kotlin版本
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.2" // Android插件
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // Kotlin插件
    }
}

//..

WTF,我项目中都没有这种结构,在相同位置的文件,新的文件内容是:

bash 复制代码
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '8.3.0' apply false
    id 'com.android.library' version '8.3.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.10' apply false
}

我尝试将 buildscript {}结构添加进该文件,但并未解决问题,需要注意的是这里仍然可以使用老的 buildscript,来配置需要的插件,但要写在plugins 上面,不然会报错。既然不行,也没做深究,遂继续找方法~

然后又在项目根目录下查找依赖树,看能不能找到些线索,在AS 命令行执行./gradlew :app:dependencies,看的眼花缭乱,最终也没发现有用信息。

情况2:

修改kotlin的依赖版本和插件版本,如下:

根项目build.gradle中插件版本:

bash 复制代码
  id 'org.jetbrains.kotlin.android' version '1.9.10' apply false

奥,是ktx的拓展版本(这是目前在项目中能找到与Kotlin相关的两个地方了):

bash 复制代码
  implementation 'androidx.core:core-ktx:1.10.1'

修改完毕,开始打包,咔!又弹出此错误。我这版本号都改了,竟然报错的内容还一样,连报错的版本号都没变,彻底红温。

情况3:

继续搜索,转向stackoverflow,于是在这篇文章中得到灵感: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15

之前一直没注意到,gradle 版本号 和 gradle 插件版本,对Kotlin有什么影响,于是就照着别人版本号修改了一下,继续打包,咔!不出意外,又报错了,但报错内容不一样了,这不就好起来了吗。开始分析...

简单改了两个插件版本对比了一下,gradle版本没有变仍是7.5

bash 复制代码
gradle-7.5-bin.zip  +   
id 'com.android.application' version '7.4.2' +  
id 'com.android.library' version '7.4.2' +
id 'org.jetbrains.kotlin.android' version '1.8.10' = 
报错:The binary version of its metadata is 1.9.0, expected version is 1.7.1.

gradle-7.5-bin.zip  +   
id 'com.android.application' version '7.2.1' +  
id 'com.android.library' version '7.2.1' +
id 'org.jetbrains.kotlin.android' version '1.8.10' = 
报错:The binary version of its metadata is 1.8.0, expected version is 1.6.0.

好嘛!这... 虽然看不出来具体原因,但起码知道了和gradle版本相关,开始修改这两个版本,不急不急,继续 探索~

于是乎,就找到了以下这两个地址:Android Gradle 插件版本说明Gradle版本和Kotlin版本对应关系,才发现原来他们两个还有着这么紧密的关系啊。

你可以根据项目所需的gradle版本 ,并选择相应的插件版本,并且要对照好你需要的Kotlin版本。

OK,知道问题所在之后,那就改吧,继续打包,不出意外还是出意外了,我项目选择的组合是

  • Kotlin 版本1.9.10
  • Gradle 版本8.4
  • Android Gradle Plugin 版本8.3.0

打包报错没有BuildConfig,在此不做叙述了,可以参考这篇文章:Android BuildConfig不生成的解决办法,没有此问题忽略。

顺利的话,修改完gradle相关版本,就能顺利打包而不报错了,但!也不在乎你依赖的三方库不会报错,例如我项目中使用了 RxHttp,而它的版本也与Kotlin版本有着一定关系:

Kotlin版本不对应也可能会报错,所以尽量修改为一个合适的版本,保持项目健壮性。

最后

之前遇到这种问题,大都是咔咔一顿复制粘贴,又是强制使用某个Kotlin版本又是不影响打包就忽略报错,想解决又心有余而力不足,事实证明,只要慢慢分析,就没有解决不了的问题,哈哈,再会!

相关推荐
xvch28 分钟前
Kotlin 2.1.0 入门教程(七)
android·kotlin
望风的懒蜗牛43 分钟前
编译Android平台使用的FFmpeg库
android
浩宇软件开发1 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er88882 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php
苏金标3 小时前
The maximum compatible Gradle JVM version is 17.
android
zhangphil3 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin
iofomo7 小时前
Android平台从上到下,无需ROOT/解锁/刷机,应用级拦截框架的最后一环,SVC系统调用拦截。
android
我叫特踏实8 小时前
SensorManager开发参考
android·sensormanager
五味香10 小时前
Java学习,查找List最大最小值
android·java·开发语言·python·学习·golang·kotlin
graceyun15 小时前
C语言进阶习题【1】指针和数组(4)——指针笔试题3
android·java·c语言