当前位置: 首页>后端>正文

Android api升级到31的坑

目前老项目的Android API 是30, 对应的Android系统11,截至2023年4月5日,最高版本为Android 13,想着把compileSdkVersion 改为31,结果~~~~

Android api升级到31的坑,第1张

上百度一搜,大概意思就是android studio配置的 jdk版本 和 gradle版本不对导致的.如果想要把build-tools升级到31,会强制要求升级到gradle7,否则无法编译.
参考来自:https://www.jianshu.com/p/b50a3c160b32
Android api升级到31的坑,第2张

Google play store都要求API 31了,看来很有必要升级一下,目前项目的版本是:
   compileSdkVersion     : 30,
    buildToolsVersion     : '30.0.2', 
    minSdkVersion         : 21, 
    targetSdkVersion      : 29,

Android gradle 插件 (AGP):
classpath 'com.android.tools.build:gradle:4.2.1'
gradle:
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

于是开始升级之路

   compileSdkVersion     : 31,
    buildToolsVersion     : '30.0.2', 
    minSdkVersion         : 21, 
    targetSdkVersion      : 31,

Android gradle 插件 (AGP):
classpath 'com.android.tools.build:gradle:7.2.1'
gradle:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

Android studio 升级到:2021.2.1


Android api升级到31的坑,第3张

结果又出错了,看出错信息大概就是Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

Android api升级到31的坑,第4张

查看官网的Android gradle插件版本说明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn

Android api升级到31的坑,第5张
Android api升级到31的坑,第6张

项目的JDK是1.8的,开始升级到JDK11,下载安装后,配置环境变量,在项目中选择file->project structure....


Android api升级到31的坑,第7张

Android api升级到31的坑,第8张

选择刚刚安装的JDK版本


Android api升级到31的坑,第9张

注意:
在项目中全局搜索配置jvm 从1.8 改为11,如下
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

kotlin指定的jvmTarget 
  kotlinOptions {
        jvmTarget = '11'
    }

结果又有问题,问题如下:

Android api升级到31的坑,第10张

Android api升级到31的坑,第11张

此时新建一个新的项目,按照以上配置,是可以正常运行的:但是setting.gradle有所变化
Android api升级到31的坑,第12张

项目的build.gradle
Android api升级到31的坑,第13张

app中的build.gradle
Android api升级到31的坑,第14张

而我项目用的还是旧的 apply plugin +buildscript的配置
查看官网,AGP 7.0以上,做了很多的修改
https://developer.android.google.cn/studio/past-releases/past-agp-releases/agp-7-0-0-release-notes?hl=zh-cn
于是把自己的项目的gradle配置根据文档改了一遍,参照新建的项目修改.
结果还是不行,百度了一遍,有网友说AGP7.0以上也是向下兼容apply plugin配置的,意识到错误应该不是gradle配置的问题.我的是老项目,涉及到很多模块,而且有些模块也是有很老的代码.
这时候思路已经乱了,百度也查不到有用的资源,大部分就是推荐版本降级等,好吧,重头来一遍,把项目回退到原来的状态,AGP 4.2.1 ,gradle 6.7.1, JDK1.8等配置.这时候项目成功运行起来了.
解决思路:
把老项目其他模块全部屏蔽掉,只留下一个模块来测试,这样修改的工作量减少了,也能快速的定位错误,不会被其他模块干扰.

直接先升级JDK,从JDK1.8升级到JDK,运行结果


Android api升级到31的坑,第15张

Android api升级到31的坑,第16张

这个问题的解决办法就是要升级gradle
那就继续升级gradle ,为了避开AGP7.0以上版本变动太大,先升级到AGP7.0较早的版本,选了一个7.0.3,以下配置

Android gradle 插件 (AGP):
classpath 'com.android.tools.build:gradle:7.0.3'
gradle:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip

build~~~竟然SUCCESSFUL(太惊喜了)


Android api升级到31的坑,第17张

虽然编译通过了,但是这个提示估计是刚刚更新了 AGP,导致其不再与当前 Gradle 版本兼容或者是与Android studio的版本不兼容,但不影响运行,也没提示其他错误了.
修改gradle配置(这个版本就是最开始的升级版本)

   compileSdkVersion     : 31,
    buildToolsVersion     : '30.0.2', 
    minSdkVersion         : 21, 
    targetSdkVersion      : 31,

Android gradle 插件 (AGP):
classpath 'com.android.tools.build:gradle:7.2.1'
gradle:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

build~~编译成功,到此为止,总算升级到Android api31了.在升级之路也遇到了很多问题,非常感谢百度资源提供的帮助,于是自己也进行总结,把遇到的问题贴出来,给需要的朋友提供一些参考.
gradle7还有许多修改的地方,请参考官网 插件版本说明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn

有个疑问?同样的配置第一次不行,第二次就可以了,那是因为我第二次屏蔽了部分的模块,其中有一个商城模块,我是用纯kotlin写的,其他模块用java写的.现在把商城kotlin模块引入,错误又出来了


Android api升级到31的坑,第18张

这个错误指在android{}是因为我把apply plugin: 'kotlin-android-extensions'给注释掉了,所以才报这个错误


Android api升级到31的坑,第19张

现在把插件kotlin-android-extensions打开,并把kotlin版本改为:
    ext.kotlin_version = '1.5.31'
    ext.ktx_version='1.3.1'
    ext.anko_version='0.10.8'
    ext.koin_version='2.1.5'

Gradle 版本还和 Kotlin 版本有关系,根据你使用的 Gradle 版本也需要配置对应的 kotlin-gradle-plugin 版本:


Android api升级到31的坑,第20张

现在又可以正常运行了.


Android api升级到31的坑,第21张

感觉刚升级到AGP7,最新的已经是AGP8了,这技术更新的太快,也没必要用最新的了


Android api升级到31的坑,第22张

目前的Android studio版本是2021.2.1 是花栗鼠版本,个人喜好火烈鸟这个封面,单纯喜好封面而已,于是在下载一个2022.2.1火烈鸟版本
Android api升级到31的坑,第23张

Android Studio Flamingo 自带 JDK17, 默认gradle最低的版本是7.3,AGP7.2以上.看来下次就要从JDK11升级JDK17,再搭配AGP8了.

参考文章:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn
https://zhuanlan.zhihu.com/p/569633238
https://www.jianshu.com/p/b50a3c160b32


https://www.xamrdz.com/backend/3uc1936495.html

相关文章: