【问题标题】:How to resolve conflict between Android support library and AndroidX?如何解决 Android 支持库和 AndroidX 之间的冲突?
【发布时间】:2019-12-11 14:22:36
【问题描述】:

我是一名统一开发人员,为了解决冲突尝试将我的项目导出到 android studio。

我同时使用 firebase 和 vungle 库。 firebase 依赖于 android-core 而 vungle 依赖于 support-compat。如果我同时编译它们,我会收到编译错误:

Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (:androidx.core.core-1.0.0:) and support-compat-27.1.1.jar (support-compat-27.1.1.jar)

如果我评论其中一个,我会在游戏开始时收到运行时错误。我真的能做什么?

谢谢

【问题讨论】:

  • 答案已经给出here
  • @kfir88 在 gradle.properies 中添加使用 androidx 仍然无法在 build.gradle 和冲突中使用 bowth 库
  • 您是否尝试了他们在正确答案中所说的所有内容?
  • @kfir88 是的,我做到了

标签: android android-studio androidx


【解决方案1】:

here 给出的答案指出,最好的方法是坚持使用 AndroidX,因为它是替换 Android 支持的新库,但是在 gradle.properties 中使用 androidx 仅意味着您的项目将使用 AndroidX,但如果您在项目中的类仍在导入 Android 支持库,同样的错误将会弹出。

如果您访问 vungle 支持网站here,有一个部分讨论了 AndroidX 兼容性并说:

AndroidX 兼容性 Vungle Android SDK 6.4.11 或更早版本不正式支持 AndroidX。发布者必须使用 Android Studio 提供的迁移工具来转换 SDK 及其依赖项(第三方库)以实现 AndroidX 兼容性。对 AndroidX 的官方支持将在目前处于早期访问阶段的 6.5.0 中提供,并且该版本不需要任何进一步的转换即可与 AndroidX 兼容。如果需要,请通过您的客户经理与您联系,以便提前使用 6.5.0。

因此,您需要将 vungle 库导入 Android Studio 并按照指南 (this one) 将整个项目迁移到 AndroidX,然后编译该库并在您的 Unity 项目中使用它。但是,我必须警告您,这很棘手,有时 Android Studio 的迁移工具不会更改 Android 支持的所有用例,甚至有时它不会将它们更新为当前的 AndroidX 类,您可能必须浏览库的每个文件,更改对 AndroidX 的每个 android 支持引用,这可能需要几天时间,具体取决于库的大小。

OR,这是一个很大的或,您必须等待与 AndroidX 兼容的 Vungle Android SDK 6.5.0。

PD:正如 Vungle 支持网站所述,您还可以获得 Vungle 6.5.0 当前的早期访问 SDK,但它可能包含错误,因为它仍处于开发阶段。

【讨论】:

  • 所以在我们的项目中同时拥有 vungle 和 firebase 意味着我们必须等待吗?
  • 那种,你必须等待 6.5.0 版本,更新你的 vungle 到那个版本然后它会工作,否则你可以自己迁移 vungle 库到 AndroidX
【解决方案2】:

Vungle SDK 从 6.5 开始支持 androidx,目前处于早期访问阶段。如果您想使用 6.4.11,最好使用 Android Studio Gradle 工具进行迁移,正如其他答案所述。然后应该使用 SDK 6.4.11 修复该问题。 但是万一有人不想导出Android Studio项目,还想使用SDK 6.4.11。您可以按照文档here在没有Android Studio的情况下自行迁移Vungle SDK。 你需要做的是:

  1. 下载jetifier并解压
  2. 使用终端和 cd 到文件夹(mac)
  3. 下载SDK 6.4.11并将SDK 6.4.11 jar/aar拖到jetifier-standalone/bin文件夹中

最后一步运行以下命令:

./jetifier-standalone -i publisher-sdk-android-6.4.11.aar -o publisher-sdk-android-6.4.11-androidx.aar

./jetifier-standalone -i vungle-android-sdk-6.4.11.jar -o vungle-android-sdk-6.4.11-androidx.jar
./jetifier-standalone -i vng-moat-mobile-app-kit-2.5.1.jar -o vng-moat-mobile-app-kit-2.5.1-androidx.jar

如果使用jar文件集成,请务必转换两个lib。

请使用JD-GUI 检查jar/aar 并确保已完成迁移。我遇到了一次失败的迁移,没有任何错误。所以检查它会很棒。 您可以检查以下文件:

最后,如果您不想自己做,请随时从我的保管箱下载迁移后的aar 文件。我相信它会在一段时间内可用。 如果有人需要罐子,请告诉我。

【讨论】:

    【解决方案3】:

    将这些添加到您的 gradle 属性中,然后单击 android studio 中的文件使缓存失效,重新启动您的工作室

    android.useAndroidX=true
    android.enableJetifier=true
    

    【讨论】:

      【解决方案4】:

      你可以试试

      Refactor -> Migrate to AndroidX...
      

      然后重建项目

      【讨论】:

        【解决方案5】:

        试试这个

        Refactor -> Migrate to AndroidX
        and rebuild the project after that
        

        或者在 gradle-Module-app 中替换

         'com.android.support:appcompat-v7:28.+'
         'com.android.support.constraint:constraint-layout:1.0.2'
        

        'androidx.appcompat:appcompat:1.1.0'
        'androidx.constraintlayout:constraintlayout:1.1.3'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-27
          • 1970-01-01
          • 2014-10-24
          • 2017-11-09
          • 2017-08-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多