【问题标题】:Google.JarResolver.ResolutionException: Cannot resolve com.google.firebase:firebase-analytics-unity:1.0.0()Google.JarResolver.ResolutionException:无法解析 com.google.firebase:firebase-analytics-unity:1.0.0()
【发布时间】:2016-12-05 22:15:00
【问题描述】:

在我的 Unity 项目中,我使用了一些资产,如 FacebookSDK、OneSignal 等。每当我导入 OneSignal 时,都会显示此错误。

Google.JarResolver.ResolutionException:无法解析 com.google.firebase:firebase-analytics-unity:1.0.0()

我尝试了很多东西,这些都是我记得的:

  • 使用“播放服务解析器”并不能解决问题。
  • 正在导入 Unity Firebase。

当我导入 Firebase 时,错误变成了另一个错误,即构建错误,称为 CommandInvokationFailure,与 Firebase 相关。

我花了几天时间来修复它,但仍然无法修复。如果您需要更多信息,请告诉我。

编辑:@nika 感谢您的回复。我尝试了 API 23-24-25 的所有组合并构建了从 23 到 25 的工具。但是,我还不能修复“CommandInvokationFailure”。我认为分享错误的完整日志会更好:

CommandInvokationFailure: Unable to convert classes into dex format.
/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/emre/Desktop/AndroidSDK/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -

stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzah;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzcn;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/BuildConfig;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoJellyBeanMr2;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/animation/AnimatorCompatHelper;

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Translation has been interrupted
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:608)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
    at com.android.dx.command.dexer.Main.run(Main.java:277)
    at com.android.dx.command.dexer.Main.main(Main.java:245)
    at com.android.dx.command.Main.main(Main.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at SDKMain.main(SDKMain.java:129)
Caused by: java.lang.InterruptedException: Too many errors
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:600)
    ... 9 more
]

编辑 2:@jkasten 感谢您的回复。我可以修复 Android 支持库 v4 错误,但是,由于解析器,第二个问题并不容易。

没有重复的播放服务文件。这一次,我即兴解决了这个问题:通过更改导入设置从 android build 中删除 play-services-ads-9.0.1(如果其他广告文件被删除,CommandInvokationFailure 错误仍在继续。)。我真的不知道这是解决问题的正确方法,但它以某种方式起作用。但是当我尝试在手机上运行游戏时,它又导致了另一个错误:

FATAL EXCEPTION: main
E/AndroidRuntime(18680): java.lang.NoSuchMethodError: No static method zzb(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; in class Lcom/google/android/gms/common/internal/zzaa; or its super classes (declaration of 'com.google.android.gms.common.internal.zzaa' appears in /data/app/***/base.apk)
E/AndroidRuntime(18680):    at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
E/AndroidRuntime(18680):    at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
E/AndroidRuntime(18680):    at android.app.ActivityThread.installProvider(ActivityThread.java:5159)
E/AndroidRuntime(18680):    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4754)
E/AndroidRuntime(18680):    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4694)
E/AndroidRuntime(18680):    at android.app.ActivityThread.access$1600(ActivityThread.java:150)
E/AndroidRuntime(18680):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
E/AndroidRuntime(18680):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(18680):    at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime(18680):    at android.app.ActivityThread.main(ActivityThread.java:5423)
E/AndroidRuntime(18680):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(18680):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime(18680):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • Cannot resolve 错误意味着项目中缺少库。 CommandInvocationFailure 错误意味着无法调用命令,这通常意味着您的 android 目标 SDK 对于该特定 jar 文件来说太低,或者 SDK 是最新的,因此 Unity 还不支持它,在这种情况下下载以前的 SDK,特别是 - 构建工具可以解决您的问题。无论如何,我很确定导入 Firebase 是继续挖掘的方向。

标签: unity3d firebase onesignal


【解决方案1】:

来自日志中以下两个独特的行:

Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzcn;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/BuildConfig;

这意味着您的项目中有 2 个或更多 Google Play services library 和 Android Support Library v4 副本。


修复 Android 支持库 v4 错误 (support/v4)

为了在同一个 Unity 项目中同时使用 OneSignal 和 Facebook SDK,您需要删除OneSignal troubleshooting guide 中提到的以下重复库。

FacebookSDK/plugins/android/libs/support-v4-23.4.0.aar
FacebookSDK/plugins/android/libs/support-annotations-23.4.0.aar

这将修复 already added: Landroid/support/v4 错误,除非它们是该库的第三个插件以及您的项目中。


修复 Google Play 服务库错误 (gms)

我建议删除 Unity 项目中重复的 play-services-[library]-[version].aar 文件。会有不同的[libraries],但是所有play-services-*.aar 文件应该只有一个版本。这应该可以修复 already added: Lcom/google/android/gms 错误。

如果您遇到问题,请使用带有版本号的完整插件列表更新您的问题。还要列出项目中的所有.aar 和.jar 文件。此外,您可以创建一个新项目并一次添加一个插件,直到您收到错误以指出导致问题的插件组合。

【讨论】:

  • 我编辑了我的问题。如果您需要更多信息,我可以分享插件等的完整列表。
【解决方案2】:

这个问题提到了几个不同的错误。所有这些最终都与 Unity 项目中的原生 Android 库(.jar 或 .aar)相关。

我会尽力解决你提到的所有问题:

无法解析(库名称)

Google.JarResolver.ResolutionException:无法解析 com.google.firebase:firebase-analytics-unity:1.0.0()

许多 Android 插件使用 Play Services Resolver - 这是帮助程序代码,它试图通过自动解析所需的 Google Play 服务库(位于 Android SDK 文件夹下)来简化事情。

它通过将所需的依赖项设置为类的静态实例来工作,然后尝试解析所需的库。 有时,解析器的操作可能会失败,因为它可能与其持久化数据“不同步”。

在这种情况下,可能发生的情况是静态对象仍在尝试解析“firebase-analytics-unity”库,但该文件夹已从项目中删除,因此无法查找。

已添加 Lxxx/xxx/xxx

未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Lcom/google/android/gms/internal/zzah;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: lcom/google/android/gms/internal/zzcn;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Landroid/support/v4/BuildConfig;未捕获的翻译错误: java.lang.IllegalArgumentException:已添加: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; 未捕获的翻译错误:java.lang.IllegalArgumentException: 已经加入: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl; 未捕获的翻译错误:java.lang.IllegalArgumentException: 已经加入: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoJellyBeanMr2; 未捕获的翻译错误:java.lang.IllegalArgumentException: 已经加入: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl; 未捕获的翻译错误:java.lang.IllegalArgumentException: 已经加入: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl; 未捕获的翻译错误:java.lang.IllegalArgumentException: 已添加:Landroid/support/v4/animation/AnimatorCompatHelper;

正如@jkasten 已经回答的那样,您的项目包含多个插件,这些插件包含相同的已编译 Java 类。可以通过类名找到关于哪个库被复制的提示(尽管并不总是有用)。在这种情况下,您可以看到它与com.google.android.gms(google play服务)和Android支持库(android.support.v4.xxx)有关。

无静态方法zzb

致命异常:主 E/AndroidRuntime(18680): java.lang.NoSuchMethodError:没有静态方法 zzb(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;在班上 Lcom/google/android/gms/common/internal/zzaa;或其超类 (“com.google.android.gms.common.internal.zzaa”的声明出现 在 /data/app/***/base.apk) E/AndroidRuntime(18680): 在 com.google.firebase.provider.FirebaseInitProvider.zza(未知来源) E/AndroidRuntime(18680):在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知 来源)E/AndroidRuntime(18680):在 android.app.ActivityThread.installProvider(ActivityThread.java:5159) E/AndroidRuntime(18680):在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4754) E/AndroidRuntime(18680):在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4694) E/AndroidRuntime(18680):在 android.app.ActivityThread.access$1600(ActivityThread.java:150) E/AndroidRuntime(18680):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) E/AndroidRuntime(18680):在 android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime(18680): 在 android.os.Looper.loop(Looper.java:148) E/AndroidRuntime(18680):在 android.app.ActivityThread.main(ActivityThread.java:5423) E/AndroidRuntime(18680): 在 java.lang.reflect.Method.invoke(Native 方法)E/AndroidRuntime(18680):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)

这是一个更微妙和棘手的问题。该游戏内置于 .apk 中,但由于未找到类而在运行时崩溃。 从方法名称 (zzb) 来看 - 这是 Google Play 服务内部的一种内部“混淆”方法。如果您将多个版本的 google play 服务混合在一起(例如 - 9.8.0 版的 Firebase 与不同版本的 Google play 服务),则可能会发生这种情况。

让所有这些版本相互保持一致至关重要,对于自动执行此操作的解析器,这项任务有时会变得有些棘手。

最后说明:

我提供a professional service 来帮助解决此类问题。如果您以后遇到类似问题,请随时与我联系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-15
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多