Google.JarResolver.ResolutionException: 无法解析 com.google.firebase:firebase-analytics-unity:1.0.0()
Google.JarResolver.ResolutionException: Cannot resolve com.google.firebase:firebase-analytics-unity:1.0.0()
在我的 Unity 项目中,我使用了一些资产,如 FacebookSDK、OneSignal 等。每当我导入 OneSignal 时,都会显示此错误。
Google.JarResolver.ResolutionException: Cannot resolve com.google.firebase:firebase-analytics-unity:1.0.0()
我试过很多东西,这些是我记得的:
- 使用'Play Service Resolver'并不能解决问题。
- 正在导入 Unity Firebase。
当我导入 Firebase 时,错误变成了另一个错误,即与 Firebase 相关的名为 CommandInvokationFailure
的构建错误。
我花了好几天时间修好,还是不行。如果您需要更多信息,请告诉我。
编辑:@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 构建中删除 play-services-ads-9.0.1(如果删除其他广告文件,CommandInvokationFailure
错误继续。)。我真的不知道这是解决问题的正确方法,但它以某种方式起作用。但是当我尝试在我的 phone:
上玩 运行 游戏时,它又导致了另一个错误
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.access00(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)
来自您日志中的以下两行:
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 播放服务库错误 (gms)
我建议删除 Unity 项目中的重复 play-services-[library]-[version].aar
文件。会有不同的 [libraries]
但是所有 play-services-*.aar
文件应该只有一个版本。这应该可以修复 already added: Lcom/google/android/gms
错误。
如果您遇到困难,请使用带有版本号的完整插件列表更新您的问题。同时列出项目中的所有 .aar
和 .jar
文件。另外,您可以创建一个新项目并一次添加一个插件,直到出现错误以指出导致问题的插件组合。
这个问题提到了几个不同的错误。所有这些最终都与 Unity 项目中的原生 Android 库(.jar 或 .aar)有关。
我会尽力解决您提到的所有问题:
无法解析(库名)
Google.JarResolver.ResolutionException: Cannot resolve
com.google.firebase:firebase-analytics-unity:1.0.0()
很多 Android 插件使用 Play Services Resolver - 这是帮助程序代码,它试图通过自动解析所需的 Google 播放服务库(位于 Android SDK 文件夹).
它的工作原理是将所需的依赖项设置为 class 的静态实例,然后尝试解析所需的库。
有时,解析器的操作可能会失败,因为它的持久化数据可能会变成 "out of sync"。
在这种情况下,可能发生的情况是静态对象仍在尝试解析 "firebase-analytics-unity" 库,但此文件夹已从项目中删除,因此无法查找。
已添加Lxxx/xxx/xxx
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;
正如@jkasten 已经回答的那样,您的项目包含多个插件,这些插件包含相同的已编译 Java classes。可以通过 class 名称找到关于哪个库被复制的提示(尽管并不总是有用)。在这种情况下,您可以看到它与 com.google.android.gms(google 播放服务)和 Android 支持库(android.support.v4.xxx)有关。
没有静态方法zzb
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.access00(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)
这是一个更微妙和棘手的问题。该游戏内置于 .apk 中,但由于未找到 class 而在 运行 时崩溃。
从方法名称 (zzb) 判断 - 这是 Google 播放服务中的内部 "obfuscated" 方法。如果您将 google 播放服务的多个版本混合在一起(例如 - 9.8.0 版的 Firebase 与不同版本的 Google 播放服务),就会发生这种情况。
保持所有这些版本彼此一致至关重要,有时使用自动执行此操作的解析器可能会有点棘手。
最后的注释:
我提供 a professional service 帮助解决此类问题。如果您以后 运行 遇到类似问题,请随时与我联系。
在我的 Unity 项目中,我使用了一些资产,如 FacebookSDK、OneSignal 等。每当我导入 OneSignal 时,都会显示此错误。
Google.JarResolver.ResolutionException: Cannot resolve com.google.firebase:firebase-analytics-unity:1.0.0()
我试过很多东西,这些是我记得的:
- 使用'Play Service Resolver'并不能解决问题。
- 正在导入 Unity Firebase。
当我导入 Firebase 时,错误变成了另一个错误,即与 Firebase 相关的名为 CommandInvokationFailure
的构建错误。
我花了好几天时间修好,还是不行。如果您需要更多信息,请告诉我。
编辑:@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 构建中删除 play-services-ads-9.0.1(如果删除其他广告文件,CommandInvokationFailure
错误继续。)。我真的不知道这是解决问题的正确方法,但它以某种方式起作用。但是当我尝试在我的 phone:
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.access00(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)
来自您日志中的以下两行:
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 播放服务库错误 (gms)
我建议删除 Unity 项目中的重复 play-services-[library]-[version].aar
文件。会有不同的 [libraries]
但是所有 play-services-*.aar
文件应该只有一个版本。这应该可以修复 already added: Lcom/google/android/gms
错误。
如果您遇到困难,请使用带有版本号的完整插件列表更新您的问题。同时列出项目中的所有 .aar
和 .jar
文件。另外,您可以创建一个新项目并一次添加一个插件,直到出现错误以指出导致问题的插件组合。
这个问题提到了几个不同的错误。所有这些最终都与 Unity 项目中的原生 Android 库(.jar 或 .aar)有关。
我会尽力解决您提到的所有问题:
无法解析(库名)
Google.JarResolver.ResolutionException: Cannot resolve com.google.firebase:firebase-analytics-unity:1.0.0()
很多 Android 插件使用 Play Services Resolver - 这是帮助程序代码,它试图通过自动解析所需的 Google 播放服务库(位于 Android SDK 文件夹).
它的工作原理是将所需的依赖项设置为 class 的静态实例,然后尝试解析所需的库。 有时,解析器的操作可能会失败,因为它的持久化数据可能会变成 "out of sync"。
在这种情况下,可能发生的情况是静态对象仍在尝试解析 "firebase-analytics-unity" 库,但此文件夹已从项目中删除,因此无法查找。
已添加Lxxx/xxx/xxx
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;
正如@jkasten 已经回答的那样,您的项目包含多个插件,这些插件包含相同的已编译 Java classes。可以通过 class 名称找到关于哪个库被复制的提示(尽管并不总是有用)。在这种情况下,您可以看到它与 com.google.android.gms(google 播放服务)和 Android 支持库(android.support.v4.xxx)有关。
没有静态方法zzb
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.access00(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)
这是一个更微妙和棘手的问题。该游戏内置于 .apk 中,但由于未找到 class 而在 运行 时崩溃。 从方法名称 (zzb) 判断 - 这是 Google 播放服务中的内部 "obfuscated" 方法。如果您将 google 播放服务的多个版本混合在一起(例如 - 9.8.0 版的 Firebase 与不同版本的 Google 播放服务),就会发生这种情况。
保持所有这些版本彼此一致至关重要,有时使用自动执行此操作的解析器可能会有点棘手。
最后的注释:
我提供 a professional service 帮助解决此类问题。如果您以后 运行 遇到类似问题,请随时与我联系。