1、什么是AndroidX?
官方文档上说
AndroidX是对原始Android 支持库的重大改进 。与支持库不同,AndroidX软件包是单独维护和更新的。从版本1.0.0开始。您可以单独更新项目中的AndroidX库。
也就是说,以前的话,如果appcompat这个库使用的是27这个版本,那么其他的库比如recyclerview也要使用27这个版本;使用AndroidX,就可以使用不同版本的库,可以单独更新项目中使用的库。很多老的项目如果继续维护,建议升级到 Android X
2.升级步骤:Android Studio 提供了非常方便的升级Android X的方法:Refactor ------>Migrate to AndroidX... -------->Migrate
3.遇到的坑
坑1:本以为一键升级到了AndroidX 就大功告成了呢,迫不及待的运行下,结果一片红😭,接下来排查原因,发现是注解的问题,目前项目中的注解一方面是support包中的 一方面是butterknife用到了注解 ,分析下问题毫无疑问就是butterknife 的事情了,目前项目中使用的butterknife的版本是8.81 去GitHub 看下butterknife :https://github.com/JakeWharton/butterknife 的最新版本是10.2.1 果断升级到最新,然后在测试环境运行了下,真的运行起来了
这里提醒下:升级Android X 一定要把 ButterKnife升级到10.0以上
implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
坑2:debug 环境可以跑起来了 切换到Release再测试下 运行了一会,项目可以运行起来 但是运行起来直接Crash,看下日志,class not found,毫无疑问就是混淆的问题了,仔细分析下确实有问题 之前混淆文件keep 了support类 但是没有加AndroidX 的类 ,然后就去Android Developer :https://developer.android.com/jetpack/androidx 看了下文档,加上混淆就可以了:
#------------------AndroidX start------------- -keep class com.google.android.material.** {*;} -keep class androidx.** {*;} -keep public class * extends androidx.** -keep interface androidx.** {*;} -dontwarn com.google.android.material.** -dontnote com.google.android.material.** -dontwarn androidx.** #------------------AndroidX End-------------
坑3:还有一些之前的三方库 比如:Utilcode库 ,Lottie库等 要升级到最新的AndroidX的版本 一些方法使用上也可能会有差别
欢迎留言 撩,一起探讨 个人GitHub:https://github.com/HuaDanJson