老项目androidx升级可行性验证

首先声明,老项目升级androidx存在一定的风险和不确定性,即使调整后也需要相当长的一段时间进行测试,所以在自己的项目中本次只是简单的验证了一下可行性。

关于Androidx

  • Androidx其实就是将Android Support Library中的代码改包名移到了androidx,为了解决support-v4、v7包依赖的混乱问题。
  • 关于什么是Androidx可以看下郭神的这篇博客
  • 谷歌官方文档提供了support包与Androidx库的对应关系等,这是传送门

 

迁移的前提

  • compileSdkVersion改为28(因为AnroidX 1.0.0版本是与Support Library 28.0.0一致的二进制文件,support最新的是28,所以可以直接迁移)
  • buildToolsVersion改为28.0.2以上(笔者使用的是 28.0.3 ,仅供参考)
  • gradle插件版本4.6及以上(gradle-wrapper.properties中修改distributionUrl)
  • Android Studio版本升级到3.2及以上,建议直接改为最新(笔者目前使用的是Android 4.0,可以通过Help -> About 查看当前AS版本)。其实gradle为4.6对应的AS版本就是3.2.0-3.2.1,因此只要AS版本大于3.2,gradle就相应的大于4.6

 

迁移总结

  1. Android Studio菜单:Refactor > Migrate to AndroidX,一路点确定即可,然后运行项目,如果报错就对了。

  2. 迁移完后gradle.properties文件会多出这两句:

    • android.useAndroidX=true,这个不解释

    • android.enableJetifier=true,这个的官方解释是:Android 插件会通过重写其二进制文件来自动迁移现有的第三方库以使用 AndroidX。意思是如果你的第三方库依赖了support包且其没有升级到Androidx,没关系,AndroidStudio在打包的时候会把这些support包都改为Androidx包。 所以这个值设为ture后那些依赖了support包的第三方依赖可以不用改。

      但是,那些通过注解等方式在build目录中生成的代码如果依赖support包的话就不行了。那么哪些第三方依赖会有这种问题呢?

  3. 有问题的第三方依赖:

    • butterknife
    • glide
    • deeplinkdispatch,这个依赖主要是用于外部链接跳转指定页面
  4. 解决方法也很简单,将它们升级到新版本

    • butterknife

      插件版本:classpath 'com.jakewharton:butterknife-gradle-plugin:10.0.0'

      依赖版本:

      api "com.jakewharton:butterknife:10.0.0"
      annotationProcessor "com.jakewharton:butterknife-compiler:10.0.0"
      
    • glide,依赖版本:

      api "com.github.bumptech.glide:glide:4.10.0"
      annotationProcessor "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"
      annotationProcessor "com.airbnb:deeplinkdispatch-processor:4.1.0"
      

      以上升级的版本有些不是最新版,因为最新版可能对gradle插件版本有要求。目前我的gradle版本是gradle-4.6-all.zip,插件版本是'com.android.tools.build:gradle:3.2.1'

  5. 改到这里应该就可以运行的,但是还是出现dontwarn报错,发现是混淆的问题,这种情况可能是升级的第三方依赖混淆有改动,看官方文档即可。

  6. 最重要的:全局搜索supportv4v7designapp:layout_behavior等,确保都改了。尤其是用到CoordinatorLayout的地方,他的app:layout_behavior属性值引用的可能还是support包的。

  7. 最后,附上我的项目中不需要改动的第三方依赖不完全名单:

项目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’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值