小答
小答
  • 发布:2026-08-19 11:16
  • 更新:2026-08-19 11:17
  • 阅读:35

【报Bug】Uniapp 安卓 0- 选择相册uni.chooseImage 裁剪crop崩溃

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.1.1

HBuilderX类型: 正式

HBuilderX版本号: 5.24

手机系统: Android

手机系统版本号: Android 14

手机厂商: 小米

手机机型: 小米10PRO

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop: {
quality: 100,
width: 100,
height: 100
},
success: (res) => onOk(res.tempFilePaths && res.tempFilePaths[0]),
fail: onFail
});

操作步骤:

uni.chooseImage({
count: 1,
sizeType: ['compressed'],
crop: {
quality: 100,
width: 100,
height: 100
},
success: (res) => onOk(res.tempFilePaths && res.tempFilePaths[0]),
fail: onFail
});

预期结果:

不崩溃

实际结果:

崩溃:日志
08-19 10:49:08.958 5869 5869 E AndroidRuntime: FATAL EXCEPTION: main
08-19 10:49:08.958 5869 5869 E AndroidRuntime: Process: com.lx.lushuo, PID: 5869
08-19 10:49:08.958 5869 5869 E AndroidRuntime: java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@23408a2
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:117)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:263)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:148)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.widget.ImageView.onDraw(ImageView.java:1438)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23845)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22682)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23850)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22682)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at io.dcloud.common.core.ui.k.drawChild(r8-map-id-65d21641d0d191f8643ae4150812f2deec7d8d028d4e013df3abac578da38f0a:2)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at io.dcloud.common.core.ui.a$l.dispatchDraw(r8-map-id-65d21641d0d191f8643ae4150812f2deec7d8d028d4e013df3abac578da38f0a:1)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23850)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22682)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22671)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23559)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.drawChild(ViewGroup.java:4586)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4344)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.draw(View.java:23850)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at com.android.internal.policy.DecorView.draw(DecorView.java:915)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.View.updateDisplayListIfDirty(View.java:22682)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:685)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:693)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:801)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewRootImpl.draw(ViewRootImpl.java:5198)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4899)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4047)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2725)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9812)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1505)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1513)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:1128)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:1042)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1481)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:211)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.os.Looper.loop(Looper.java:300)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8503)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
08-19 10:49:08.958 5869 5869 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)

bug描述:

选择相册uni.chooseImage( 只要设置crop就崩溃;

2026-08-19 11:16 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug,官方评审意见如下:

一、 Bug 反馈内容完整性评审

  1. 描述与代码示例:描述清晰,代码示例可直接运行,复现步骤明确,无需补充。
  2. 预期与实际结果:预期“不崩溃”合理,实际崩溃日志完整,属于正常 Bug 反馈,非误报。
  3. 分类信息:已包含 PC 环境、HBuilderX 版本、手机系统、机型与 Vue 版本,信息完整。
  4. 附件说明:系统限制无法识别附件,请确保所有关键信息以文本或代码块形式提供。

二、 Bug 是否成立分析

  1. 崩溃原因:日志显示 java.lang.RuntimeException: Canvas: trying to use a recycled bitmap,表明底层在裁剪界面尝试绘制已被回收的 Bitmap 对象导致崩溃。结合历史反馈,此异常在特定机型与系统上偶发,属于底层渲染缺陷,Bug 现象成立。
  2. 支持状态uni.chooseImagecrop 裁剪参数在 App 平台属于已支持能力,当前崩溃属于特定条件下的缺陷,并非功能本身不支持。
  3. 替代方案:由于该底层问题受设备与系统差异影响,若当前严重影响业务,建议暂不使用内置 crop 参数,改为选择图片后调用前端裁剪组件处理。可前往插件市场搜索图片裁剪组件,例如:支持多种操作的图片裁剪组件

官方会持续跟进此底层问题,感谢您的反馈。

内容为 AI 生成,仅供参考

要回复问题请先登录注册