无法将类转换为dex格式Unity

时间:2017-05-18 18:05:12

标签: unity3d google-play admob unity5

使用谷歌玩游戏服务和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
    ]

enter image description here

3 个答案:

答案 0 :(得分:4)

一些背景

当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并解决问题。

答案 1 :(得分:0)

在我的项目中添加admob之后,我面临着同样的问题,这是两种可能的解决方案:

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

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

就像(支持v4)

答案 2 :(得分:-1)

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