【问题标题】:Unable to convert classes into dex format Unity无法将类转换为 dex 格式 Unity
【发布时间】:2017-05-18 18:05:11
【问题描述】:

使用 google play 游戏服务和 Admob 插件,我似乎无法恢复构建 APK 并收到以下错误消息。任何帮助都将不胜感激,因为我已经删除了一些重复的文件,但我仍然无法找到我无法构建我的应用程序的原因。

我正在使用 Unity Unity 5.6.1f1(64 位)。

游戏服务:https://github.com/playgameservices/play-games-plugin-for-unity 广告:https://github.com/unity-plugins/Firebase-Admob-Unity

    CommandInvokationFailure: Unable to convert classes into dex format.
C:/Program Files/Java/jdk1.8.0_121\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:/Users/Jack/AppData/Local/Android/sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -

    stderr[
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzbyb;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzbyc;
    2 errors; aborting
    ]

【问题讨论】:

    标签: unity3d google-play admob unity5


    【解决方案1】:

    一些背景

    当 Unity 为 Android 构建项目时,它会调用 Android SDK 中的多个工具。作为该过程的一部分,它会将您用于 Android 的所有本机 (Java) 代码转换为称为 DEX(Dalvik 可执行文件)的文件格式。

    您的所有 Android 插件都使用该工具构建到一个包中。当一些插件在其中包含相同的已编译 Java 代码(类)时,问题就开始了。这将导致 DEX 工具失败,并出现您所看到的错误:

    未捕获的翻译错误:java.lang.IllegalArgumentException: 已添加:Lcom/google/android/gms/internal/zzbyb; 未捕获的翻译错误:java.lang.IllegalArgumentException:已添加:Lcom/google/android/gms/internal/zzbyc;

    这意味着具有这些名称的类已经包含在另一个库中,因此无法再次添加。

    可能的原因

    如上所述,当您的项目中有重复插件时会发生此错误;这可能发生在不同的场景中,以下是一些示例:

    • 同一个插件多次包含在项目的不同文件夹下。
    • 同一个插件多次包含在不同版本中。
    • 插件包含“嵌入”其中的其他依赖项,但这些依赖项已经以某种形式包含在项目中。

    如何修复

    您应该在您的项目中查找重复的 Android 插件并消除它们(仅保留 1 个副本)。从您发布的错误消息来看,这里的问题与 Google Play 服务库有关。您应该研究一下(名为 play-services-xxxx.aar 的库)。

    付费帮助(无耻插件)

    我提供专业服务来解决此类问题。如果您(或其他任何人)自己无法解决此类问题,请随时 contact me 解决。

    【讨论】:

    • 感谢您的回答,我查看了所有以 play-services 开头的插件,但看不到任何重复文件。我已经放了一个链接到我的播放服务文件列表的屏幕截图。谢谢。
    • 您有混合版本的 google play 服务。所有库都应具有相同的版本。
    • 您能否就此提出建议,因为我已经安装了我需要的两个插件,不知道如何进行。谢谢。
    • 是的,根据我的经验,它会导致问题。和你看到的一模一样。
    • 我已经删除了旧的插件文件并构建了我的 apk,但现在应用程序崩溃了。我知道你们提供了修复构建错误的服务,但我可以使用你们的服务来建议我如何让 google play 服务和 admob 协同工作吗?
    【解决方案2】:

    在我的项目中添加 admob 后我遇到了同样的问题,这里有两种可能的解决方案:

    1. 转到文件>>构建设置并将内部选项更改为gradle

    2. 分别打开 Facebook SDK 和 Google Play 服务的 libs 文件夹并删除匹配文件

    可能类似于(支持 v4)

    【讨论】:

      【解决方案3】:

      Google 广告 11.2 存在错误。它重用某些 jar 类。 就其本身而言,这不是问题 一旦你添加了另一个谷歌类,即firebase,你就完成了。 不过有一个修复。 Google 推出了 firebase 4.2 和 ads 11.4

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2023-03-29
        相关资源
        最近更新 更多