You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity集成Facebook登录APK崩溃:NoSuchMethodError问题求助

Unity打包APK后Facebook登录崩溃:registerForActivityResult方法缺失解决办法

问题描述

Unity编辑器内Facebook登录操作正常,但打包为APK后调用登录流程时应用崩溃,Google Crashlytics上报错误:

No virtual method registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; in class Lcom/facebook/login/LoginFragment; or its super classes (declaration of 'com.facebook.login.LoginFragment' appears in /data/app/~~5Q7U56IhDJWLs7NgiW1kzA==/com.DefaultCompany.ARTestApp-qBfXPRYlcXThBFc53JFwvA==/base.apk)

调用栈信息:

androidx.fragment.app.Fragment.performCreate (Fragment.java:2414)
androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManager.java:1418)
androidx.fragment.app.FragmentTransition.addToFirstInLastOut (FragmentTransition.java:1195)
androidx.fragment.app.FragmentTransition.calculateFragments (FragmentTransition.java:1078)
androidx.fragment.app.FragmentTransition.startTransitions (FragmentTransition.java:117)
androidx.fragment.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2408)
androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManager.java:2366)
androidx.fragment.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:2273)
androidx.fragment.app.FragmentManagerImpl.dispatchStateChange (FragmentManager.java:3273)
androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:3229)
androidx.fragment.app.FragmentController.dispatchActivityCreated (FragmentController.java:201)
androidx.fragment.app.FragmentActivity.onStart (FragmentActivity.java:620)
android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1485)
android.app.Activity.performStart (Activity.java:8143)
android.app.ActivityThread.handleStartActivity (ActivityThread.java:3797)
android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:221)
android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:201)
android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:173)
android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:2336)
android.os.Handler.dispatchMessage (Handler.java:106)
android.os.Looper.loop (Looper.java:257)
android.app.ActivityThread.main (ActivityThread.java:8246)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:626)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1016)

问题根源

Facebook登录SDK依赖的AndroidX Fragment版本过低,或项目中AndroidX组件版本不统一,导致LoginFragment无法找到AndroidX Fragment新增的registerForActivityResult方法。编辑器内环境的AndroidX组件版本符合要求,但打包APK时出现版本降级或冲突。

解决办法

1. 强制统一AndroidX组件版本

在Unity项目的Assets/Plugins/Android目录下创建或修改mainTemplate.gradle文件,添加配置强制指定兼容的AndroidX版本(建议用1.4.0及以上,确保包含目标API):

android {
    // 保留原有配置
}

dependencies {
    // 强制指定AndroidX Fragment和Activity版本
    implementation 'androidx.fragment:fragment:1.4.0'
    implementation 'androidx.activity:activity:1.4.0'
    // 保留原有依赖
}

2. 更新Facebook SDK到最新兼容版

检查并升级Unity的Facebook SDK至最新稳定版本,新版本通常已适配更高版本的AndroidX组件,避免API不兼容问题。

3. 配置Unity Android Player设置

  • 打开Edit > Project Settings > Player > Android > Publishing Settings,勾选Custom Main Gradle Template,确保自定义的gradle配置生效。
  • 将Minimum API Level设置为Android 21(Android 5.0)及以上,满足AndroidX组件的最低版本要求。

4. 清理缓存后重新打包

  • 删除项目根目录下的Library和Temp文件夹,重新导入资源。
  • 执行Build > Clean Build清理Android构建缓存,再重新打包APK。

验证方法

打包完成后,用Android Studio的APK Analyzer查看base.apk中的androidx.fragment版本,确认已更新至指定的高版本,再测试登录流程是否正常。

内容的提问来源于stack exchange,提问作者BLACK GOKU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:00:14