如何使用独立的Jetifier迁移到AndroidX?

时间:2018-10-30 18:38:20

标签: android gradle androidx android-jetifier

Jetifier工具用作与Android Studio捆绑在一起的AndroidX迁移工具的一部分。但是,该工具存在一个问题,概述如下:https://issuetracker.google.com/issues/113224601

在某些库上运行Jetifier时,错误消息如下所示(一个特定的库不断弹出供多个用户使用:org.eclipse.jdt.core):

Failed to transform '/path/to/library/org.eclipse.jdt.core-3.10.0.jar' using Jetifier.
Reason: The type does not support '.' as package separator!

这个问题已经在Jetifier工具本身中修复了一段时间,但是该修复版本尚未包含在任何Android Studio更新中(甚至是最新的canary版本)。

我可以确认运行独立的Jetifier可以转换有问题的库,但是我不知道如何将这些转换后的库添加到我们的项目中。我不由自主地想到了两种方法来实现向AndroidX的迁移:

  1. 在每个库上运行独立工具,并指示Gradle使用这些版本(我可能需要告诉Gradle任务 not 在它们上运行Jetifier)

  2. 指示Gradle任务使用独立工具代替 Android Studio随附的工具。

任何获得上述建议的修复工作的帮助将不胜感激(或者,如果有其他方法,我很想知道)。 Android Gradle构建系统的内部异常复杂,我确实需要一些专家的帮助才能克服这一障碍。

这对我们来说是一个严重的障碍,因为我们希望在开发过程中开始迁移应用程序。在迁移过程中,我们需要解决很多事情,并且准备好在工具最终更新后“翻转开关”将有助于使发布保持正常。

谢谢!

2 个答案:

答案 0 :(得分:2)

实际上,在我链接的同一线程中,有一个workaround

  

抱歉,喷射器beta01与alpha10不二进制兼容。

     

请尝试:

buildscript {
    dependencies {
        classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
    }
}

所以,我想现在您可以在构建脚本中指定Jetifier的最新版本。

在发布此消息之前,我确实应该一直滚动到该线程的底部,但现在希望人们可以更清楚地看到此解决方法。

更新

在启用DataBinding的情况下,此解决方法似乎不起作用。看来新的Jetifier工具正在尝试在旧版本上运行:

  

无法转换'/path/to/library/jetifier-core-1.0.0-alpha10.jar'   使用Jetifier。原因:给定的工件包含字符串文字   带有不能安全地使用的包引用“ android / support / v4”   改写。使用反射的库,例如注释处理器   需要手动更新以添加对androidx的支持。

更新2(2018年11月20日):

有一个针对Jetifier的问题的解决方法,该问题试图自己进行being released in AGP 3.3.0-rc01 and 3.4.0-alpha04的Jetify。开发人员正在添加将JetJet列入黑名单的功能。在您的gradle.properties文件中,添加一个以逗号分隔的正则表达式列表,以匹配您不希望Jetifier接触的文件。例如:

android.jetifier.blacklist = doNot.*\\.jar

将排除/path/to/doNotJetify.jar

答案 1 :(得分:0)

我晚会很晚,但是我认为只有一个快速的解决方案可以解决这个问题:

转到Google Archives,同意保存和条款并下载 Android Studio 3.3 Beta 2 -这是问题发生之前的最新版本。您还必须将build.gradle降级为

classpath'com.android.tools.build:gradle:3.3.0-beta02'

使用gradle-4.10.2-all应该没问题。

也许该问题将在下一个beta或canary版本中得到解决,但是现在这是唯一为我解决的选项。