最近看github上的项目 十有八九都已经是 androidX的了,一方面感叹之余,另一方面也想把两年的老项目升级一下,说干就干,拉一个分支,一波走起。
gradle.properties 配置一波
#表示当前项目启用 androidx
android.enableJetifier=true
#表示将依赖包也迁移到androidx
android.useAndroidX=true
app 下的gradle
因为随着时间的流逝,我们的compileSdkVersion 实际上是已经升级到28的,项目根目录下的classpath ‘com.android.tools.build:gradle:3.2.1’ 也已经升级到3.2.1 ,就只剩下 targetSdkVersion 还是23,那就先忽悠android studio 一波 ,先升级到28 ,再退回去。说干就干
然后就是点击 refactor --> migrate to androidX
随后就是漫长的等待
完成后,会有很多错误,我遇到到主要如下
butterknife版本太低 ,报 @UIThread 注解找不到的错误
虽然已经 是8.8.1了,但还是不满足 androidX 最低的 9.0的需求,直接去github上查了查,升级到最新的10.2.1
MotionLayout 报 app:layoutDescription 属性找不到的错误
这个问题是我们引入了 constraintlayout:2.0.0-beta3 来使用 MotionLayout 但是AS自动迁移过程中,还是会把你的版本降为稳定的 1.1.3,错误由此而生。
Databinding BR.类报错误
因为项目2017年的时候使用的databinding 还有很多用了BR类 ,升级的时候没有自动识别,改掉旧的引用,直接用新的 import androidx.databinding.library.baseAdapters.BR;
DialogFragment 中获取 Dialog 错误 onDismiss错误
由于项目逐渐使用kotlin开发,突然DialogFragment 中获取的 dialog 现在有可能是 dialog?了 ,不管,直接改为 dialog!! , 还有就是 onDismiss方法 ,会给你转成如下
override fun onDismiss(dialog: DialogInterface?) {
compositeDisposable?.clear()
immersionBar?.destroy()
super.onDismiss(dialog)
}
就是DialogInterface变成了DialogInterface? 不明白是不是kotin的问题,直接改回来就好了
ClearText http 错误
改完这些跑起来,感觉见到了一丝曙光,结果各种网络请求报错,当 targetSdkVersion 改为28的时候是强制要https的访问的,我们的测试版本还是http ,不慌,直接将targetSdkVersion 改为23,一切OK。
xml 中app:layoutManager=“android.support.v7.widget.LinearLayoutManager” 错误
有些伙伴习惯在xml中设置layoutmanager ,这个部分 AS没有自动给转,全局查找替换一下
转换为 app:layoutManager=“androidx.recyclerview.widget.LinearLayoutManager”
目前暂时是这些坑,等发现再填
来源:CSDN
作者:wangyun522
链接:https://blog.csdn.net/wangyun522/article/details/103940690