【问题标题】:How do I use the standalone Jetifier to migrate to AndroidX?如何使用独立的 Jetifier 迁移到 AndroidX?
【发布时间】:2019-04-03 21:08:22
【问题描述】:

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 更新中(即使是最新的金丝雀版本)。

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

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

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

非常感谢任何帮助使上述建议的修复工作正常工作(或者如果有其他方法,我很想知道)。 Android Gradle 构建系统的内部结构非常复杂,我真的需要一些专家的帮助来克服这个障碍。

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

谢谢!

【问题讨论】:

  • 您好 nkotula,我确信每个问题都不同,但我发现在 Android Studio 3.1 中的迁移过程中,当我手动完成迁移时遇到了很多问题。所以我最终恢复了我的更改,并在内置迁移工具的 3.2 Android Studio 中打开。这个工具让我完成了 95% 的工作。一些调整和更改,我构建得很好。它甚至会生成包含 useJetifier 的 gradle.properties。我有很多依赖项,Jetifier 没有任何问题。所以希望它是迁移中的东西,而不是工具,但不能肯定地说。
  • 如果确实是命名空间问题,作为临时解决方案的最坏情况是,您实际上可以获取该库的源代码并将其作为子模块包含,直到问题稍后解决。

标签: android gradle androidx android-jetifier


【解决方案1】:

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

抱歉,jetifier 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”失败 使用喷射器。原因:给定的工件包含字符串文字 带有无法安全的包引用“android/support/v4” 重写。使用反射的库,例如注释处理器 需要手动更新以添加对 androidx 的支持。

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

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

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

不包括/path/to/doNotJetify.jar

【讨论】:

  • 我遇到了同样的事情。你找到解决办法了吗?
  • 跟踪了一个新问题以解决 DataBinding 问题:https://issuetracker.google.com/issues/119135578。显然原始问题已在 AGP 3.3.0-beta3 (noted here) 中修复,但遗憾的是,此修复对 DataBinding 问题没有帮助,所以我仍然卡住了。
  • 由于某些原因,本地构建运行良好(ubuntu),但由于某些库上的 JetifyTransform 问题,在 docker 映像(bitbucket 管道 + ubuntu)中构建失败。 android.jetifier.blacklist 帮助排除了这些库。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2020-01-27
    相关资源
    最近更新 更多