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



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任务而不是在它们上运行Jetifier(

  2. 指示Gradle任务使用独立工具代替AndroidStudio附带的

如果能为上述任何一个建议的修复程序提供帮助,我们将不胜感激(或者如果有其他方法,我很想知道(。Android Gradle构建系统的内部非常复杂,我真的需要一些大师的帮助来克服这个障碍。

这对我们来说是一个严重的障碍,因为我们希望在开发的同时开始迁移我们的应用程序。通过这次迁移,我们需要解决很多问题,当工具最终更新时,准备好"切换开关"将有助于保持我们的发布进度。

谢谢!

实际上,从我链接的同一个线程中,有一个解决方法:

很抱歉,jetifier beta01与alpha10不兼容。

请尝试:

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

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

在发布这篇文章之前,我真的应该一直滚动到那个帖子的底部,但现在希望人们能更清楚地看到这个解决方法。

更新

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

无法将"/path/转换为/library/jetifier-core-1.00-alpha10.jar"使用Jetifier。原因:给定的工件包含字符串文字带有无法安全使用的包引用"android/support/v4"重写。使用反射(如注释处理器(的库需要手动更新以添加对androidx的支持。

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

对于在AGP 3.3.0-rc01和3.4.0-alpha04中发布的Jetifier试图Jetify自身的问题,有一个变通方法。开发人员增加了将库列入黑名单以避免Jetify的功能。在gradle.properties文件中,添加一个逗号分隔的正则表达式列表,以匹配您不希望Jetifier接触的文件。例如:

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

将排除/path/to/doNotJetify.jar

我参加聚会迟到了一点,但我认为只有一个快速的选择可以解决这个问题:

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

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

使用-4.10.2级应该没有问题。

也许这个问题会在下一个测试版或canary版本中得到解决,但目前这是我唯一的选择

最新更新