切换到Androidx或激动人心的耙子冒险

过渡到Androidx的主题现已浮出水面。 Daniel Lew已经有一篇英文短篇文章 ,有一篇报告 。 但是他们所有人都只是从表面上考虑了Google文档中介绍的过渡方案。

我想分享我的经验。 我的项目使用Moxy和Cicerone,我发现我的经验很有趣,因为在这些库的官方电报频道中,何时将它们转移到Androidx时会定期出现此问题。

只需迁移到AndroidX ...


为了将项目转移到Androidx,您需要执行一些简单的步骤:

1.安装compileSdkVersion 28targetSdkVersion 28 ,将所有支持库更新为最新版本。

2.在gradle.properties文件中添加以下行:

android.useAndroidX=true android.enableJetifier=true 

3.如果您已经在使用Android Studio 3.2,请使用重构:


他将为您完成大部分(或更少)工作。

如果由于某种原因您没有使用Git或其他版本控制系统,那么在此阶段,您将有机会创建项目档案:


单击“迁移”按钮,选择保存档案的位置,过一会儿,我们得到在重构之前检查项目的结果:


在这里,我们看到将替换build.gradle和import指令中的哪些依赖项。 在上面的屏幕快照中可以看到的MainActivity类的示例中,将替换一个依赖项: android.support.v4.view.GravityCompat ,但是如果我们打开此类,我们将看到实际上还有三个需要替换的依赖项:


我不了解这种选择性行为的原因,但是这些依赖关系必须手动修复。 单击“执行重构”。

如果您未使用Android Studio 3.2,则将手动更正所有依赖项
必须更改build.gradle中的依赖 (为清楚起见,我注释掉了旧的依赖项):



完整的替换清单可在此处找到。

然后与Gradle同步项目,并得到一堆错误。 这些是您类中的import指令,它们引用旧软件包,您需要根据此表进行更改。

因此,由于工作室无法替换所有依赖项(也许可以,那么可以恭喜),因此当您尝试构建项目时,会看到类似的错误列表:


打开带有错误的类,我们将看到类似以下内容:


我们删除过时的依赖项,并通过热键Alt + Enter从androidx包中导入类


因此,我们修复了所有类。 如果错误与“导入”无关,则不要关注它,这很可能是由于另一个类中的相同问题所致。

例如:


这里的错误与以下事实有关:在TimelineView类中,您还需要消除导入问题。 当所有错误均已修复后,我们将再次执行项目构建,也许我们会再次获得错误列表,仅在其他类中,我们才能继续迭代过程。

对于所生成类的错误(Dagger或DataBinding),在此阶段不要关注。 如果您的班级中没有错误,并且工作室只对生成的代码发誓,那么您需要运行“清理项目”和“重建项目”。


如果这样做没有帮助,您可以尝试清除工作室缓存:


您将必须至少清除一次缓存,以便正确创建生成DataBinding或Room的类。

外部图书馆


通常,我们将android.enableJetifier = true标志设置为仅在项目构建阶段将外部库的依赖项自动替换为相应的AndroidX依赖项,但是由于某种原因不会发生这种情况。

无论如何,在执行下面描述的操作之前,请确保您有此问题,并且所使用的库的最新版本尚未转换为AndroidX。

莫西


我项目中的MainActivity是从MvpAppCompatActivity继承的,是Moxy类,在撰写本文时,该类尚未转换为AndroidX。 为了解决这个问题,我将该类复制到了一个单独的androidx包中的项目中,并修复了其中的依赖项。 最好不要更改类名,这样将更容易更新依赖关系。

对于MvpAppCompatFragment类,需要对片段执行相同的过程。

请注意,这些类中有一个通用类,在mMvpDelegate字段中,不要忘记修复其中的依赖项,因为它是Moxy类而不是支持库类的依赖项,因此很容易注意到它。

西塞龙


为了解决Cicerone的问题,我必须在项目中创建SupportAppScreenSupportAppNavigator类的副本。 请注意,SupportAppNavigator类依赖于SupportAppScreen。 请记住要在副本上解决此依赖性。

结论


切换到AndroidX是一种令人兴奋的体验,也许如果您没有紧急需求,则应该稍等片刻。 毕竟,当将大部分耙从路径中移除时,这样做会更加轻松快捷。 但就我个人而言,我很高兴这条路已经过去,额头上的颠簸将he愈,有用的经验将继续存在。

Source: https://habr.com/ru/post/zh-CN430660/


All Articles