安卓离线打包在uni-app中高德地图设置自定义marker图标安卓闪退,hbuilderX基座正常

安卓离线打包在uni-app中高德地图设置自定义marker图标安卓闪退,hbuilderX基座正常

开发环境 版本号 项目创建方式
Mac 15.7.1 CLI

操作步骤:

  • 离线打包运行,map上渲染marker

预期结果:

  • 正常展示

实际结果:

  • app崩溃闪退

bug描述:

按官方文档配置了定位和地图相关资源包,设置自定义图片闪退, 代码:

this.markers = [{
id: 1,
longitude: lng,
latitude: lat,
callout: {
content: name,
borderRadius: 5,
padding: 8,
display: 'ALWAYS',
},
width: 30,
height: 30,
iconPath: '/static/img/address_marker.png',
}, ]
this.mapContext.addMarkers({
markers: this.markers,
clear: true,
})

android studio报错日志如下

FATAL EXCEPTION: main
Process: com.jinjump.app, PID: 29479
java.lang.IncompatibleClassChangeError: Found class com.facebook.imagepipeline.image.CloseableBitmap, but interface was expected (declaration of 'com.facebook.imagepipeline.image.CloseableBitmap' appears in /data/app/~~JKucvnDH0PVQ-KyGXJwo5w==/com.jinjump.app-AkRBBSxyX3mPdNTqZlWaQQ==/base.apk)
at io.dcloud.feature.weex.adapter.FrescoLoadUtil$1$2.onNewResultImpl(r8-map-id-b4716a25f9920722ba6f2d7f7c6f40e43a654927e8ebe1c489894a7bc6a88ab4:13)
at com.facebook.datasource.BaseDataSubscriber.onNewResult(BaseDataSubscriber.java:51)
at com.facebook.datasource.AbstractDataSource$1.run(AbstractDataSource.java:200)
at android.os.Handler.handleCallback(Handler.java:995)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loopOnce(Looper.java:273)
at android.os.Looper.loop(Looper.java:363)
at android.app.ActivityThread.main(ActivityThread.java:10060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

更多关于安卓离线打包在uni-app中高德地图设置自定义marker图标安卓闪退,hbuilderX基座正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

该bug反馈内容较为完整,包含了标题、详细描述、代码示例、复现步骤、预期与实际结果及分类信息。代码示例展示了marker设置关键逻辑,但缺少mapContext初始化上下文;复现步骤简洁但可操作;预期结果合理,实际闪退现象明确。分类信息中HBuilderX仅标注"正式版"未提供具体版本号,需补充。
bug成立可能性高。错误日志显示java.lang.IncompatibleClassChangeError涉及Fresco库类冲突(CloseableBitmap应为接口但发现类),常见于离线打包时依赖库版本不匹配。知识库表明:

Android平台离线打包需特别注意依赖管理参考
自定义基座闪退需检查gradle依赖参考
近期更新修复了高德地图相关兼容性问题参考

建议用户:

确认HBuilderX具体版本(应≥4.86),通过离线SDK调试指南检查gradle依赖
在Android Studio中排查Fresco库冲突,确保implementation 'com.facebook.fresco:fresco:2.6.0’等版本与基座兼容
尝试使用HBuilderX云打包替代离线打包验证问题参考
检查是否遗漏高德地图插件资源包配置,参考基座闪退日志获取方法定位具体原因 内容为 AI 生成,仅供参考

更多关于安卓离线打包在uni-app中高德地图设置自定义marker图标安卓闪退,hbuilderX基座正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


安卓依赖文件
implementation fileTree(dir: ‘libs’, include: [’.aar’, ‘.jar’], exclude: []) implementation ‘androidx.appcompat:appcompat:1.1.0’ implementation ‘androidx.localbroadcastmanager:localbroadcastmanager:1.0.0’ implementation ‘androidx.core:core:1.1.0’ implementation “androidx.fragment:fragment:1.1.0” implementation ‘androidx.recyclerview:recyclerview:1.1.0’ implementation ‘com.facebook.fresco:fresco:2.5.0’ implementation “com.facebook.fresco:animated-gif:2.5.0” implementation ‘com.github.bumptech.glide:glide:4.9.0’ implementation ‘com.alibaba:fastjson:1.2.83’ implementation ‘androidx.webkit:webkit:1.5.0’ implementation ‘com.amap.api:3dmap-location-search:10.0.700_loc6.4.5_sea9.7.2’

这个问题是由于Fresco库版本冲突导致的。在离线打包环境中,自定义marker图标加载时触发了类不兼容异常。

根本原因: 离线打包引入的Fresco库版本与uni-app引擎内置版本不一致,导致CloseableBitmap类被识别为接口而非具体类。

解决方案:

  1. 检查依赖版本(推荐) 在Android项目的build.gradle中统一Fresco版本:

    implementation 'com.facebook.fresco:fresco:2.5.0'  // 使用与uni-app引擎兼容的版本
    
  2. 排除冲突依赖 如果其他库引入了不同版本的Fresco:

    implementation ('some.library') {
        exclude group: 'com.facebook.fresco', module: '*'
    }
    
  3. 资源路径处理 确保图片路径正确,离线打包时静态资源路径可能需要调整:

    iconPath: 'www/static/img/address_marker.png'  // 尝试添加www前缀
    
  4. 图片格式优化 将PNG图片转换为WebP格式,减少内存占用:

    iconPath: '/static/img/address_marker.webp'
    
  5. 临时规避方案 暂时使用系统默认图标,确认是否是图片加载问题:

    // 注释掉iconPath,使用默认marker
    // iconPath: '/static/img/address_marker.png'
回到顶部