无法将类转换为dex格式Unity

Jac*_*kes 2 unity-game-engine admob google-play unity5

使用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
    ]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

lys*_*cid 5

一些背景

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的库)。

付费帮助(无耻插件)

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