NativeScript中@nativescript/geolocation与nativescript-google-maps-sdk冲突报错如何解决
解决方案
步骤1:统一锁定Google Play服务依赖版本
你之前修改配置不生效是因为before-plugins.gradle的优先级高于app.gradle,插件依赖的版本会在加载阶段就确定,必须在这个文件中指定全局版本:
- 找到
app/App_Resources/Android/before-plugins.gradle,不存在就手动新建,添加如下配置:
ext { // 统一所有插件的谷歌服务基础版本 googlePlayServicesVersion = "18.0.0" // 单独锁定定位服务版本,适配geolocation插件需求 playServicesLocationVersion = "21.0.1" }
步骤2:解决FragmentClass重复生成冲突
报错提示的类冲突是NativeScript 8.x的已知问题:多个依赖AndroidX Fragment的插件会同时触发静态绑定器生成同名类,你可以直接在app/App_Resources/Android/app.gradle中关闭非必要的生成逻辑:
android { // 保留你原有的所有配置,追加以下内容 defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments = [ "generateFragmentClass": "false" ] } } } }
步骤3:全量清理重建
按以下顺序执行操作,避免缓存残留:
- 删除项目根目录下的
platforms、node_modules、hooks文件夹 - 删除系统缓存:
C:\Users\<你的用户名>\.gradle、C:\Users\<你的用户名>\.nativescript\cache - 执行
npm install重新安装依赖 - 执行
ns clean确认清理所有构建残留 - 执行
ns run android重新构建运行
补充:watchLocation崩溃排查
如果构建成功后调用定位接口仍崩溃,先确认动态权限申请逻辑:
- Android 10及以上版本需要先申请
ACCESS_FINE_LOCATION权限,后台定位还需额外申请ACCESS_BACKGROUND_LOCATION - 必须等权限申请通过的回调返回后,再调用
geolocation.watchLocation()方法,无权限直接调用会触发原生崩溃
内容的提问来源于stack exchange,提问作者DV7
相关产品推荐
相关产品推荐

