目前老项目的Android API 是30, 对应的Android系统11,截至2023年4月5日,最高版本为Android 13,想着把compileSdkVersion 改为31,结果~~~~
上百度一搜,大概意思就是android studio配置的 jdk版本 和 gradle版本不对导致的.如果想要把build-tools升级到31,会强制要求升级到gradle7,否则无法编译.
参考来自:https://www.jianshu.com/p/b50a3c160b32
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 Gradle plugin requires Java 11 to run. You are currently using Java 1.8
查看官网的Android gradle插件版本说明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn
项目的JDK是1.8的,开始升级到JDK11,下载安装后,配置环境变量,在项目中选择file->project structure....
选择刚刚安装的JDK版本
注意:
在项目中全局搜索配置jvm 从1.8 改为11,如下
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlin指定的jvmTarget
kotlinOptions {
jvmTarget = '11'
}
结果又有问题,问题如下:
此时新建一个新的项目,按照以上配置,是可以正常运行的:但是setting.gradle有所变化
项目的build.gradle
app中的build.gradle
而我项目用的还是旧的 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,运行结果
这个问题的解决办法就是要升级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(太惊喜了)
虽然编译通过了,但是这个提示估计是刚刚更新了 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{}是因为我把apply plugin: 'kotlin-android-extensions'给注释掉了,所以才报这个错误
现在把插件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 版本:
现在又可以正常运行了.
感觉刚升级到AGP7,最新的已经是AGP8了,这技术更新的太快,也没必要用最新的了
目前的Android studio版本是2021.2.1 是花栗鼠版本,个人喜好火烈鸟这个封面,单纯喜好封面而已,于是在下载一个2022.2.1火烈鸟版本
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