Android api升級到31的坑

目前老項目的Android API 是30, 對應(yīng)的Android系統(tǒng)11,截至2023年4月5日,最高版本為Android 13,想著把compileSdkVersion 改為31,結(jié)果~~~~

image.png

上百度一搜,大概意思就是android studio配置的 jdk版本 和 gradle版本不對導(dǎo)致的.如果想要把build-tools升級到31,會強(qiáng)制要求升級到gradle7,否則無法編譯.
參考來自:http://www.itdecent.cn/p/b50a3c160b32
image.png

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


image.png

結(jié)果又出錯了,看出錯信息大概就是Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

image.png

查看官網(wǎng)的Android gradle插件版本說明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn

image.png
image.png

項目的JDK是1.8的,開始升級到JDK11,下載安裝后,配置環(huán)境變量,在項目中選擇file->project structure....


image.png

image.png

選擇剛剛安裝的JDK版本


image.png

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

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

結(jié)果又有問題,問題如下:

image.png

image.png

此時新建一個新的項目,按照以上配置,是可以正常運行的:但是setting.gradle有所變化
image.png

項目的build.gradle
image.png

app中的build.gradle
image.png

而我項目用的還是舊的 apply plugin +buildscript的配置
查看官網(wǎng),AGP 7.0以上,做了很多的修改
https://developer.android.google.cn/studio/past-releases/past-agp-releases/agp-7-0-0-release-notes?hl=zh-cn
于是把自己的項目的gradle配置根據(jù)文檔改了一遍,參照新建的項目修改.
結(jié)果還是不行,百度了一遍,有網(wǎng)友說AGP7.0以上也是向下兼容apply plugin配置的,意識到錯誤應(yīng)該不是gradle配置的問題.我的是老項目,涉及到很多模塊,而且有些模塊也是有很老的代碼.
這時候思路已經(jīng)亂了,百度也查不到有用的資源,大部分就是推薦版本降級等,好吧,重頭來一遍,把項目回退到原來的狀態(tài),AGP 4.2.1 ,gradle 6.7.1, JDK1.8等配置.這時候項目成功運行起來了.
解決思路:
把老項目其他模塊全部屏蔽掉,只留下一個模塊來測試,這樣修改的工作量減少了,也能快速的定位錯誤,不會被其他模塊干擾.

直接先升級JDK,從JDK1.8升級到JDK,運行結(jié)果


image.png

image.png

這個問題的解決辦法就是要升級gradle
那就繼續(xù)升級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(太驚喜了)


image.png

雖然編譯通過了,但是這個提示估計是剛剛更新了 AGP,導(dǎo)致其不再與當(dāng)前 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了.在升級之路也遇到了很多問題,非常感謝百度資源提供的幫助,于是自己也進(jìn)行總結(jié),把遇到的問題貼出來,給需要的朋友提供一些參考.
gradle7還有許多修改的地方,請參考官網(wǎng) 插件版本說明:
https://developer.android.google.cn/studio/releases/gradle-plugin?hl=zh-cn

有個疑問?同樣的配置第一次不行,第二次就可以了,那是因為我第二次屏蔽了部分的模塊,其中有一個商城模塊,我是用純kotlin寫的,其他模塊用java寫的.現(xiàn)在把商城kotlin模塊引入,錯誤又出來了


image.png

這個錯誤指在android{}是因為我把apply plugin: 'kotlin-android-extensions'給注釋掉了,所以才報這個錯誤


image.png

現(xiàn)在把插件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 版本有關(guān)系,根據(jù)你使用的 Gradle 版本也需要配置對應(yīng)的 kotlin-gradle-plugin 版本:


image.png

現(xiàn)在又可以正常運行了.


image.png

感覺剛升級到AGP7,最新的已經(jīng)是AGP8了,這技術(shù)更新的太快,也沒必要用最新的了


image.png

目前的Android studio版本是2021.2.1 是花栗鼠版本,個人喜好火烈鳥這個封面,單純喜好封面而已,于是在下載一個2022.2.1火烈鳥版本
image.png

Android Studio Flamingo 自帶 JDK17, 默認(rèn)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
http://www.itdecent.cn/p/b50a3c160b32

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容