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

创建SDKNativeEngine实例报错且自定义地图存储路径不生效问题

问题1:Failed to lock cache directory 报错解决

  • 替换实例释放方法:停止使用内部方法internaldispose,改为调用官方公开的dispose()方法,internaldispose不会主动释放目录文件锁、清理实例持有引用,只有dispose()会完整执行释放逻辑,且需要等待方法异步执行完成后再创建新实例。
  • 排查多进程占用:如果你的App存在多个独立进程(比如后台下载服务、推送进程),需要保证所有进程中已创建的SDKNativeEngine实例都执行过dispose()释放,再在主进程创建新实例。
  • 增加释放后延时:部分Android设备的文件系统锁释放存在100~200ms的延迟,可在dispose()执行完成后增加对应时长的延时,再执行实例创建逻辑,避免未释放的锁冲突。

问题2:自定义存储路径不生效解决

  • 修正路径格式:你当前使用的路径存在两处错误,一是/Android/data//files中间多了多余的斜杠,二是/Android/data/后缺失了你的应用包名,非法路径会被SDK判定为不可用,自动回退到内部私有存储。修正后参考格式为:/storage/<FB39-1114(SdCard)>/Android/data/你的应用包名/files/MyMaps。
  • 校验参数顺序:确认你当前使用的SDK版本中,withAccessKeySecretAndCachePathCacheSizeAndPersistentMapPath方法的参数顺序是否为(accessKeyId, accessKeySecret, 缓存路径, 缓存大小, 持久化地图路径),避免参数传反导致自定义路径不生效。
  • 提前验证路径权限:创建实例前先尝试在目标路径下读写测试文件,确认应用对该路径有完整的读写权限,无权限的情况下SDK会默认使用内部存储。

修正后参考代码

// 先释放原有实例
await SDKNativeEngine.sharedInstance.dispose();
// 增加延时等待锁释放
await Future.delayed(const Duration(milliseconds: 150));

SDKOptions sdkOptions = 
    SDKOptions.withAccessKeySecretAndCachePathCacheSizeAndPersistentMapPath(
        accessKeyId, 
        accessKeySecret, 
        externalPath, // 缓存路径
        cacheSizeBytes, 
        externalPath // 持久化地图路径,确认参数顺序匹配SDK版本要求
    );

SDKNativeEngine sdkNativeEngine;
try {
  sdkNativeEngine = SDKNativeEngine(sdkOptions);
} on InstantiationException catch (e) {
  print('实例创建失败: $e');
}
SDKNativeEngine.sharedInstance = sdkNativeEngine;
isLoaded = true;

MapDownloadService mapDownloadService = ServiceProvider.of<MapDownloadService>();
await mapDownloadService?.fetchListRegions(forceRefresh: true);

内容的提问来源于stack exchange,提问作者Benjamin Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:06:10