Unity Android构建遇Facebook SDK setIsUnityInit方法缺失错误求助
问题:Unity Android构建中Facebook SDK的setIsUnityInit方法缺失错误
错误日志
AndroidJavaException: java.lang.NoSuchMethodError: no static method with name='setIsUnityInit' signature='(Z)V' in class Ljava.lang.Object; java.lang.NoSuchMethodError: no static method with name='setIsUnityInit' signature='(Z)V' in class Ljava.lang.Object; com.unity3d.player.ReflectionHelper.getMethodID(Unknown Source:165) com.unity3d.player.UnityPlayer.nativeRender(Native Method) com.unity3d.player.UnityPlayer.-$$Nest$mnativeRender(Unknown Source:0) com.unity3d.player.UnityPlayer$F$a.handleMessage(Unknown Source:122) android.os.Handler.dispatchMessage(Handler.java:102) android.os.Looper.loopOnce(Looper.java:226) android.os.Looper.loop(Looper.java:313) com.unity3d.player.UnityPlayer$F.run(Unknown Source:24) UnityEngine._AndroidJNIHelper.GetMethodID (System.IntPtr jclass, System.String methodName, System.String signature, System.Boolean isStatic) (at <00000000000000000000000000000000>:0) UnityEngine.AndroidJavaObject._CallStatic (System.String methodName, System.Object[] args) (at <00000000000000000000000000000000>:0) Facebook.Unity.CodelessUIInteractEvent.SetLoggerInitAndroid () (at <00000000000000000000000000000000>:0) UnityEngine.GameObject.AddComponent[T] () (at <00000000000000000000000000000000>:0) Facebook.Unity.FB.Init (Facebook.Unity.InitDelegate onInitComplete, Facebook.Unity.HideUnityDelegate onHideUnity, System.String authResponse) (at <00000000000000000000000000000000>:0) UnityEngine.GameObject:AddComponent() Facebook.Unity.FB:Init(InitDelegate, HideUnityDelegate, String)
背景信息
此前已通过在ProGuard文件中添加-keep class com.facebook.unity.* {*;}解决了AndroidJavaException: java.lang.NoSuchMethodError: no static method with name='SetUserAgentSuffix'错误,但当前setIsUnityInit方法缺失的错误仍未解决。
使用环境:
- Unity版本:2022.3.15
- Facebook SDK版本:16.0.2
当前ProGuard配置
-keep class com.google.unity.** { *; } -keep public class com.google.android.gms.ads.{ public *; } -keep public class com.google.ads.{ public ; } -keepattributes Annotation -dontobfuscate -keep class com.gameanalytics.sdk { ; } -keep class com.gameanalytics.sdk. { *; } -keep class com.gameanalytics.sdk.GAPlatform { ; } -keep class com.gameanalytics.sdk.GAPlatform.* { ; } -keep class android.net.ConnectivityManager.* { ; } -keep class com.google.android.instantapps.InstantApps { ; } -keepclassmembers class com.google.android.instantapps.InstantApps{; } -keep class com.facebook.unity. {*;}
解决建议
- 修正ProGuard规则语法错误:当前配置存在多处语法问题,会导致规则失效:
- 将
-keep public class com.google.android.gms.ads.{改为-keep public class com.google.android.gms.ads.** { - 将
-keep public class com.google.ads.{改为-keep public class com.google.ads.** { - 移除无效的空声明,比如
public ;、{ ; }这类错误写法,改为正确的{ *; }
- 将
- 补充Facebook SDK完整ProGuard规则:仅保留
com.facebook.unity包不足以覆盖所有需要的类,添加以下规则:-keep class com.facebook.** { *; } -keep interface com.facebook.** { *; } -keep enum com.facebook.** { *; } -keepclassmembers class * implements com.facebook.FacebookCallback { <methods>; } - 检查SDK集成完整性:确认Facebook SDK的所有依赖库(如
facebook-android-sdk-*.aar、facebook-core-*.aar等)都已正确放置在Unity项目的Plugins/Android目录下,没有缺失或版本不匹配的情况。 - 清理缓存并重新构建:删除Unity项目的
Library、Temp、Obj文件夹,关闭Unity后重新打开项目,执行Clean Build操作,避免缓存导致的代码不一致。 - 验证构建设置:在Unity的Android构建设置中,确保“Minify”选项设置为“ProGuard”,并且正确指定了ProGuard配置文件的路径,避免规则未被应用。
- 检查方法归属类:
setIsUnityInit方法实际属于Facebook SDK的某个核心类(而非java.lang.Object),确认反射调用时的目标类是否正确,避免因类名错误导致找不到方法。
内容的提问来源于stack exchange,提问作者Burak
相关产品推荐
相关产品推荐

