4

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!

这个问题已经在 J​​etifier 工具本身中修复了一段时间,但修复的版本尚未包含在任何 Android Studio 更新中(即使是最新的金丝雀版本)。

我可以确认运行独立的 Jetifier 可以转换有问题的库,但我不知道如何将这些转换后的库放入我们的项目中。在我的脑海中,我可以想到两种不同的方法来让这个迁移到 AndroidX 工作:

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

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

任何帮助获得上述建议的修复工作将不胜感激(或者如果有另一种方式,我很想知道它)。Android Gradle 构建系统的内部结构非常复杂,我真的需要一些专家的帮助来克服这个障碍。

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

谢谢!

4

2 回答 2

3

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

抱歉,jetifier beta01 与 alpha10 二进制不兼容。

请试试:

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

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

在发布之前,我真的应该一直滚动到该线程的底部,但现在希望这种解决方法对人们更加可见。

更新

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

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

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

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

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

将排除/path/to/doNotJetify.jar

于 2018-10-30T18:59:09.813 回答
0

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

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

类路径'com.android.tools.build:gradle:3.3.0-beta02'

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

也许问题会在下一个测试版或金丝雀版本中得到解决,但目前这是对我来说唯一可行的选择。

于 2018-11-23T18:50:42.643 回答