使用Buildozer将Python转为APK后崩溃,疑依赖配置有误
APK崩溃问题排查与修复(聚焦依赖配置)
一、依赖配置的坑点和修正方案
- psutil适配问题:Android上psutil部分功能受限,打包时需指定兼容版本,直接把requirements里的
psutil改成psutil>=5.8.0。同时要在buildozer.spec里添加必要权限,比如ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE,避免psutil读取系统信息失败。 - speedtest包名错误:PyPI上的
speedtest和常用的speedtest-cli不是同一包,你当前配置的speedtest大概率不对,换成speedtest-cli试试。如果仍崩溃,可改用兼容性更好的speedtest-cli2。 - Kivy与KivyMD版本必须匹配:版本不匹配必然导致崩溃,比如Kivy用2.1.0的话,KivyMD对应0.104.2,直接在requirements里写死版本:
kivy==2.1.0,kivymd==0.104.2。 - 自定义模块打包遗漏:你代码里导入了
get_size和get_size_bits两个自定义模块,需确保这两个文件和主脚本在同一目录,同时确认buildozer.spec里的source.include_exts包含.py,避免打包时遗漏导致运行时找不到模块崩溃。
二、Buildozer配置补全
- 补全必要权限:在buildozer.spec的
android.permissions里添加:
测速需要网络权限,psutil读取系统状态也需要对应权限,缺失会引发崩溃。android.permissions = INTERNET, ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE, READ_PHONE_STATE - 开启调试日志:将
android.debug = True加入spec配置,打包后用adb logcat | grep python查看崩溃日志,能精准定位具体错误(如模块缺失、权限不足、函数调用失败等)。
三、代码层面的兼容处理
- psutil调用加异常捕获:Android上psutil部分函数不支持,直接调用会崩溃,添加try-except块处理:
try: cpu_usage = psutil.cpu_percent() except NotImplementedError: cpu_usage = 0 # 给个默认值即可 - 测速逻辑放在子线程:你代码已使用threading,需确保speedtest的测试全程在子线程执行,避免阻塞UI线程触发应用无响应崩溃。
内容的提问来源于stack exchange,提问作者Esra Issam
相关产品推荐
相关产品推荐

