android api 从13 升级到15过程

699 阅读2分钟

我们的应用还在android 13 版本,决定把工程升级到15 ,结果发现很多东西要修改,下面是升级的过程记录。

1. 现状

android api 33

jdk 版本11

kotlin 版本1.6,用的还是 kotlin-android-extensions 方案

gradle 版本 7.3.0

2. 遇到的问题以及解决方案

主要使用工具 AGP Update Assist 和 Android SDK update。android,gradle,kotlin 相互影响。android api 升级需要gradle 升级,gradle 升级又需要kotlin 升级。

  1. 先把android api 升级到35,会发现需要gradle 升级,就把gradle 版本调整为8.7.0 ,结果发现根本下不来,最后采用腾讯镜像才完成升级,腾讯镜像地址是https://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip。
  2. 随后升级jdk 为17后,会碰到jdk_home 原来设置的是1.8 版本不一致的提示,修改路径到17的位置。
  3. 修改build.gradle 过时的用法compileSdkVersion 更换为 compileSdk,targetSdk 更换为targetSdkVersion,compileOptions {

sourceCompatibility = JavaVersion.VERSION_1_8

targetCompatibility = JavaVersion.VERSION_1_8

}更换为 compileOptions {

sourceCompatibility = JavaVersion.VERSION_17

targetCompatibility = JavaVersion.VERSION_17

}

  1. kotlin 版本由 1.6.20 升级为 1.9.20,kotlin-android-extensions 更换为kotlin-kapt,引入kotlin-parcelize,使用room 框架的原来的 annotationProcessor "androidx.room:room-compiler:roomversion"更换为kapt"androidx.room:roomcompiler:room_version" 更换为 kapt "androidx.room:room-compiler:room_version",另外

buildFeature 增加 viewBinding = true

  1. kotlin 升级后导致报了很多语法错误,主要碰到的问题有:
      1. api 重载不匹配,有ondraw 方法,Animator.AnimatorListener 的重载方法,修改方法都是去掉?
      2. when 没有覆盖所有条件,修改方法是增加else
      3. 无效的引用,删除import kotlinx.android.synthetic.main.usecarselectcity.*
      4. include id 对应的view 找不到熟悉比如visibility,需要给对应的Include 根节点增加id ,用根节点view
      5. 自定义组件中直接使用的控件变量找不到定义,修改方法是需要再重新声明下,如 val tv_filter_time:TextView?=null;
      6. 最复杂的一个问题是编译通过,但是合并mainfeist 报错,就需要用命令gradlew build --debug --info --stacktrace 才看问题后再解决。

以上是升级相关配置遇到的问题,只是api 升级后完成了工程的正确编译,并不包括需要的api 适配。