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

buildozer构建的KivyMD安卓APK启动崩溃,报BoundedNumericProperty类型转换错误

构建崩溃问题排查指南

核心根因

本次崩溃属于Kivy与KivyMD版本不兼容触发的内部类型校验错误

  • buildozer配置中指定kivy==master拉取的最新Kivy源码,重构了数值类属性的内部存储结构,拆分了NumericPropertyStorage和BoundedNumericPropertyStorage的实现逻辑。
  • 你当前打包使用的KivyMD版本(0.104.2.dev0,2021年发布)未适配这一内部改动,在KV规则中给带边界限制的width属性赋值时,会触发内部存储结构的类型转换失败,直接抛出TypeError。
  • 之前应用能正常运行,是因为此前构建时拉取的Kivy master代码尚未包含这部分重构;Ubuntu系统升级后重新拉取源码编译时,刚好获取到了包含存储结构改动的最新提交,旧版本KivyMD无法适配,因此出现即使还原spec配置也无法解决问题的现象。

报错对应关系

直接匹配logcat中的关键信息:

触发报错:TypeError: Cannot convert kivy.properties.NumericPropertyStorage to kivy.properties.BoundedNumericPropertyStorage
触发位置:KV规则第15行对组件width属性的赋值逻辑,属于KivyMD内置组件的标准实现

修复操作步骤

  • 锁定Kivy兼容版本:将requirements中的kivy==master替换为和当前KivyMD版本匹配的稳定发布版kivy==2.0.0,该版本与2021年发布的0.104.2版本KivyMD完全兼容,不存在内部存储结构的改动。
  • 锁定KivyMD版本:将requirements中的https://github.com/kivymd/KivyMD/archive/master.zip替换为固定版本kivymd==0.104.2,避免拉取动态更新的master分支代码引入未知不兼容改动。
  • 清理构建残留:执行buildozer android clean,删除项目目录下的.buildozer文件夹,避免旧编译缓存中残留不兼容的库文件。
  • 重新执行buildozer android debug deploy run完成构建、部署与运行验证。

冗余依赖清理提醒

当前requirements列表中存在不适配Android环境的冗余依赖,建议移除:

  • xclip、xsel为Linux桌面端的剪贴板功能依赖,在Android运行环境下无实际作用,还会提升构建失败的概率。
  • 日常打包构建尽量固定依赖的发布版本号,避免直接使用master分支作为依赖来源,这类分支处于持续迭代状态,随时可能出现不兼容的 breaking change,是打包随机崩溃的高发诱因。

内容的提问来源于stack exchange,提问作者Paolo Laurenti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 02:36:06