如何解决Kivy应用在Android设备上启动即崩溃的问题
问题修复方案
核心错误原因及修复
- App类多重继承逻辑错误
你定义的MoneyManagerApp同时继承了MDApp、ThemableBehavior、Screen三个类,MDApp本身已内置ThemableBehavior能力,额外继承Screen会导致初始化参数冲突,是启动崩溃的核心原因之一。
修复:
# 原代码 class MoneyManagerApp(MDApp, ThemableBehavior, Screen): # 修改为 class MoneyManagerApp(MDApp):
- 根控件返回逻辑缺失、KV文件未显式加载
build方法为空没有返回根布局,且未显式加载KV文件,打包后安卓环境不会自动识别同目录KV文件,导致加载失败崩溃。
修复:
class MoneyManagerApp(MDApp): def __init__(self, **kwargs): super().__init__(**kwargs) def build(self): # 此处替换为你的KV文件实际名称,比如命名为main.kv就填"main.kv" return Builder.load_file("main.kv")
- 固定窗口大小适配错误
硬编码Window.size = (360, 640)仅适用于桌面端调试,安卓设备无固定窗口概念,会触发窗口管理异常崩溃。
修复:
# 删掉原有的Window.size = (360, 640),替换为仅桌面端生效的逻辑 import platform if platform.system() in ("Windows", "Darwin", "Linux"): Window.size = (360, 640)
- 冗余代码冲突
你在Python代码全局定义了未使用的smScreenManager实例,和KV文件中定义的ScreenManager重复,可直接删除以下冗余代码:
sm = ScreenManager() sm.add_widget(DashboardScreen(name='screen-dash')) sm.add_widget(DigitalGoldScreen(name='screen-dgld')) sm.add_widget(AddInvestmentScreen(name='screen-addinvestments'))
打包配置修复
Kivy 2.0.0和最新版KivyMD不兼容,需指定匹配的依赖版本:
- 若使用Buildozer打包,在buildozer.spec的requirements行修改为:
requirements = python3,kivy==2.0.0,kivymd==0.104.2
- 若使用p4a打包,命令中也需指定上述对应版本,禁止使用latest拉取最新版本。
调试方法
如果修复后仍存在崩溃,可通过ADB查看运行日志定位问题:
adb logcat -s python
可直接输出Python运行时的报错信息,快速定位剩余问题。
内容的提问来源于stack exchange,提问作者Anshuman Sharma
相关产品推荐
相关产品推荐

