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

Xamarin Android集成Google ARCore Sceneform SDK遇方法缺失错误求助

解决Xamarin Android中ARCore Sceneform的Java.Lang.NoSuchMethodError问题

这个Java.Lang.NoSuchMethodError错误通常是因为Sceneform绑定库与ARCore SDK版本不匹配,或者是你调用SetSource的方式不符合Xamarin绑定库的方法签名导致的。下面是具体的解决步骤:

1. 检查NuGet包版本兼容性

Sceneform和ARCore的版本必须严格匹配,否则会出现方法签名不兼容的问题。比如如果你用的是Xamarin.Google.Sceneform 1.17.1,就必须搭配Xamarin.Google.ARCore 1.17.x的版本:

  • 打开NuGet包管理器,卸载现有的Sceneform和ARCore包
  • 重新安装同一大版本号的兼容包

2. 修正ModelRenderable的加载代码

在Xamarin的Sceneform绑定中,直接传入资源ID的SetSource重载可能没有正确映射,建议通过Android.Net.Uri来加载Raw目录下的模型资源,修改你的代码如下:

// 替换原来的ModelRenderable构建代码
var modelUri = Android.Net.Uri.Parse($"android.resource://{PackageName}/{Resource.Raw.andy}");
ModelRenderable.InvokeBuilder()
               .SetSource(this, modelUri)
               .Build((renderable, error) => {
                   if (error != null) {
                       // 增加错误处理,方便排查问题
                       System.Diagnostics.Debug.WriteLine($"模型加载失败: {error.Message}");
                       return;
                   }
                   andyRenderable = renderable;
               });

另外注意,Build方法的回调其实包含两个参数:成功的renderable和失败的throwable,加上错误处理能帮你快速定位加载时的问题,比如模型文件损坏或者资源路径错误。

3. 确认资源文件配置正确

确保你的模型文件(比如andy.sfb)确实放在Resources/Raw目录下,并且在文件属性中把Build Action设置为AndroidResource——只有这样Xamarin才能正确生成对应的资源ID供代码调用。

4. 清理重建项目

有时候项目的编译缓存会导致绑定库的方法签名不生效,执行以下步骤:

  • 右键解决方案 → 选择Clean Solution
  • 然后右键解决方案 → 选择Rebuild Solution

修改后的完整OnCreate示例代码

protected override void OnCreate(Bundle savedInstanceState) {
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    if (!CheckIsSupportedDeviceOrFinish(this)) {
        return;
    }
    SetContentView(Resource.Layout.activity_main);

    // 请求相机权限
    string cameraPermission = Android.Manifest.Permission.Camera;
    if (ContextCompat.CheckSelfPermission(this, cameraPermission) != (int)Permission.Granted) {
        ActivityCompat.RequestPermissions(this, new[] { cameraPermission }, 0);
    }

    arFragment = (ArFragment)SupportFragmentManager.FindFragmentById(Resource.Id.ux_fragment);

    // 修正后的ModelRenderable加载逻辑
    var modelUri = Android.Net.Uri.Parse($"android.resource://{PackageName}/{Resource.Raw.andy}");
    ModelRenderable.InvokeBuilder()
                   .SetSource(this, modelUri)
                   .Build((renderable, error) => {
                       if (error != null) {
                           System.Diagnostics.Debug.WriteLine($"加载模型出错: {error.Message}");
                           return;
                       }
                       andyRenderable = renderable;
                   });

    arFragment.TapArPlane += OnTapArPlane;
}

内容的提问来源于stack exchange,提问作者Suresh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:42:37