大神主端/库 AndroidX 迁移记录

目前主端,依赖库,独立游戏助手等众多分支功能稳定,团队开发环境 AS 版本满足,编译打包版本满足。为了把 AndroidX 的债提前换了,决心全面切换到 AndroidX。

官网指南 上看,我们直接开干。

  • 从上一个 develop 分支拉出一个 AndroidX 迁移版本;
  • gradle.properties 添加申明

    1
    2
    android.useAndroidX=true //使用 AndroidX 库
    android.enableJetifier=true //依赖库依赖 AndroidX 库
  • 使用 AS 自带的 Refactor-Magrate to AndroidX 先帮你改一下,包括 dependence,import 等

  • 上面 AS 只是粗略帮你搞搞,build 一下还是一片红海,需要自己处理类引用,xml引用等

    • 可以先 build 一下, AS 会根据编译先给出一些 error 提示。

    • 看到这些 error,如果每次改完再 build 再改则效率会很慢。我们要修改的基本是 support 包,使用 Find in Path 全局修改你记得的所有 support 包,多改几次直到可以完全编译。这个过程十分痛苦 =。=,迁移过的人自然懂,体力活。

  • 解决坑

    1
    2
    3
    Execution failed for task ':compmkey:mergeReleaseJavaResource'.
    > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
    > More than one file was found with OS independent path 'classes.jar'

    原因是使用 gradle 3.5 版本打包编译时,如果 module 包含了本地 aar 且 aar 包含同名的 jar ,则会出现以上异常。这实际上是 gradle 的一个 BUG.j解决方法是 gradle 从 3.5 暂时降级到 3.4 解决。

  • 稳定打包之后测试回归, AndroidX 迁移分支则合并到 develop 即可。这个过程非常中,AndroidX的升级可能会涉及原来业务中使用库的 api 升级,可能会因 api 使用场景差异化导致 crash。比如 LiveData 的观测需要在 MainThread 完成等。需要覆盖每个界面和每个业务逻辑,确保无误。

当然,这个流程暂时只是处理主端。依赖库的多个项目,独立助手分支则按照这个流程处理即可。