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的迁移:
在每个库上运行独立工具,并指示Gradle使用这些版本(我可能需要告诉Gradle任务 not 在它们上运行Jetifier)
指示Gradle任务使用独立工具代替 Android Studio随附的工具。
任何获得上述建议的修复工作的帮助将不胜感激(或者,如果有其他方法,我很想知道)。 Android Gradle构建系统的内部异常复杂,我确实需要一些专家的帮助才能克服这一障碍。
这对我们来说是一个严重的障碍,因为我们希望在开发过程中开始迁移应用程序。在迁移过程中,我们需要解决很多事情,并且准备好在工具最终更新后“翻转开关”将有助于使发布保持正常。
谢谢!
答案 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版本中得到解决,但是现在这是唯一为我解决的选项。