由于迟早要迁移到androidx,领导就把这个任务给了我。网上关于Androidx的介绍基本照抄的官方,或是写一个简单的HelloWorld Demo作演示,但是我希望知道的是在庞大或者有很多第三方依赖的项目中如何迁移到Androidx。既然网上没找到想要的,那就只能自己摸索了,最后在大神的帮助下终于迁移成功,感谢坐我旁边的大神。
下面是对我自己项目迁移的经验总结,供参考:
关于Androidx
- Androidx其实就是将Android Support Library中的代码改包名移到了androidx,为了解决support-v4、v7包依赖的混乱问题。
- 关于什么是Androidx可以看下郭神的这篇博客
- 谷歌官方文档提供了support包与Androidx库的对应关系等,这是传送门
迁移总结
-
Android Studio菜单:
Refactor > Migrate to AndroidX
,一路点确定即可,然后运行项目,如果报错就对了。 -
迁移完后
gradle.properties
文件会多出这两句:-
android.useAndroidX=true
,这个不解释 -
android.enableJetifier=true
,这个的官方解释是:Android 插件会通过重写其二进制文件来自动迁移现有的第三方库以使用 AndroidX。意思是如果你的第三方库依赖了support包且其没有升级到Androidx,没关系,AndroidStudio在打包的时候会把这些support包都改为Androidx包。 所以这个值设为ture后那些依赖了support包的第三方依赖可以不用改。但是,那些通过注解等方式在build目录中生成的代码如果依赖support包的话就不行了。那么哪些第三方依赖会有这种问题呢?
-
-
有问题的第三方依赖:
- butterknife
- glide
- deeplinkdispatch,这个依赖主要是用于外部链接跳转指定页面
-
解决方法也很简单,将它们升级到新版本
-
butterknife
插件版本:
classpath 'com.jakewharton:butterknife-gradle-plugin:10.0.0'
依赖版本:
api "com.jakewharton:butterknife:10.0.0" api "com.jakewharton:butterknife-compiler:10.0.0"
-
glide,依赖版本:
api "com.github.bumptech.glide:glide:4.10.0" api "com.github.bumptech.glide:compiler:4.10.0" api "com.github.bumptech.glide:okhttp3-integration:4.10.0"
-
deeplinkdispatch, 依赖版本:
api "com.airbnb:deeplinkdispatch:4.1.0" api "com.airbnb:deeplinkdispatch-processor:4.1.0"
以上升级的版本有些不是最新版,因为最新版可能对gradle插件版本有要求。目前我的gradle版本是
gradle-4.6-all.zip
,插件版本是'com.android.tools.build:gradle:3.2.1'
-
-
改到这里应该就可以运行的,但是还是出现
dontwarn
报错,发现是混淆的问题,这种情况可能是升级的第三方依赖混淆有改动,看官方文档即可。 -
最重要的:全局搜索
support
、v4
、v7
、design
、app:layout_behavior
等,确保都改了。尤其是用到CoordinatorLayout
的地方,他的app:layout_behavior
属性值引用的可能还是support包的。 -
最后,附上我的项目中不需要改动的第三方依赖不完全名单:
项目 | Value |
---|---|
gson | ‘com.google.code.gson:gson:2.7’ |
greendao | ‘org.greenrobot:greendao:3.2.0’ |
joda-time | ‘joda-time:joda-time:2.9.7’ |
SmartRefreshLayout | ‘com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-5’ |
leakcanary-android | ‘com.squareup.leakcanary:leakcanary-android:1.6.3’ |
leakcanary-android-no-op | ‘com.squareup.leakcanary:leakcanary-android-no-op:1.6.3’ |
blockcanary-android | ‘com.github.markzhai:blockcanary-android:1.5.0’ |
blockcanary-no-op | ‘com.github.markzhai:blockcanary-no-op:1.5.0’ |
bugly | ‘com.tencent.bugly:crashreport:latest.release’ |
bugly | ‘com.tencent.bugly:nativecrashreport:latest.release’ |
wechat-sdk-android-without-mta | ‘com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+’ |
tencent tbssdk | ‘com.tencent.tbs.tbssdk:sdk:43697’ |
高德map2d | ‘com.amap.api:map2d:latest.integration’ |
高德地图搜索 | ‘com.amap.api:search:latest.integration’ |
zxing-library | ‘cn.yipianfengye.android:zxing-library:2.1’ |
rxjava | ‘io.reactivex.rxjava2:rxjava:2.2.1’ |
rxandroid | ‘io.reactivex.rxjava2:rxandroid:2.1.0’ |
arouter-api | ‘com.alibaba:arouter-api:1.4.1’ |
arouter-compiler | ‘com.alibaba:arouter-compiler:1.2.2’ |
glide-transformations | ‘jp.wasabeef:glide-transformations:4.1.0’ |
flexbox | ‘com.google.android:flexbox:1.0.0’ |
walle | ‘com.meituan.android.walle:library:1.1.6’ |
multitype | ‘me.drakeet.multitype:multitype:3.4.4’ |
oneapm | ‘com.oneapm.agent.android:agent:5.5.4.0’ |