迁移 到AndroidX 的一些坑

℡╲_俬逩灬. 提交于 2020-01-11 22:36:52

最近看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”

目前暂时是这些坑,等发现再填

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!