为什么迁移
现在来说,那就又是去年的事情了。到目前为止,androidx 库很多版本已经推出了正式稳定版,版本详情戳这里。对比以前 support 包, androidx 将各个 library 分开设立单独的版本管理,这样的好处显而易见。第一没有了之前 v4 v7 的繁琐依赖。第二可以精确指定需要导入 library ,避免不必要的导入,从而减少代码体积。关键新的 library 版本完全遵循 Semantic Versioning,而不是跟着 Android API 版本走。这样让我们通过版本号就能明确和当前代码是否兼容。
还有一点,现在很多开源项目已经陆续完成 androidx 迁移,并且基本不再对 support 提供最新支持。如果你不跟上这个节奏,那么今后你就没法升级相关依赖,老版本 bug 修复你也得不到任何支持。
怎么迁移
迁移已经超级超级简单。Google 已经考虑到我们的迁移成本,在 Android Studio 中已经支持一键迁移。
这个的前提是你得更新你的 Android Studio 版本和 gradle 的版本。请注意,这两个的版本都要更新。Android Studio 最低要求是 3.2 的版本,现在正式稳定版本是 3.4.1 ,gradle 支持 androidx 的最低版本是 3.2.1 ,请注意,一定要升级对应的 gradle 版本。
接着就在顶部菜单栏中选择 Refactor > Migrate to AndroidX 就可以完成相关迁移啦,这时候会出现一个提示框。
备份那个勾选可以去掉,然后点击 Migrate 。接下来 Android Studio 会遍历你的工程文件,进行相关包名和导包替换,并且会在你的 gradle.propertier 文件中增加两个属性。
android.useAndroidX=true
android.enableJetifier=true
复制代码
上面说了,项目导包啥的都会自动替换,你自己确定就行。那么依赖的库呢,enableJetifier 这个属性设置为 true 时就会将你依赖的库在打包时自动替换为对应的 androidx ,是不是很流弊。详情请看官方文档
迁移完成,build.gradle 中的相关依赖也会自动更换,不过它更换的版本可能不是对应的稳定版本,而是最新的 beta 版本,咱们得手动更新到对应的稳定版本。那么这个稳定版本是多少呢,去查看相关文档是不是很纠结。已经有人帮我做了对应插件,超帅。
还有 @NonNull ,在新版本中非空可空都已添加明确注解,这些细节地方可能也需要手动去更新下。
怎么验证
傻瓜式迁移搞定后,一切来得太快太顺利都让自己开始怀疑迁移是否完成,项目是否还 OK 。
验证其实也很简单,首先,你得验证项目能编译过,没有 error ,lint 没有额外的警告。我的经验是迁移之后,导包更换成功,但是使用该类时又会带上全路径,这个时候 lint 是能刷出来的,需要手动改一改。接着,你得确定 support 包是否已经被完全替换,不应该出现两者共存的情况。这里就有很多方法,我提供三种方案:直接查看工程文件最下方的 External Libraries 是否还有 support 依赖;使用 ./gradlew -q :app:dependencies > dependencies.txt'
看看对应依赖关系中是否还有 support 依赖;反编译自己的包,看看里面还有没有 support 相关的类。