使用Buildozer编译Kivy APK时bcrypt报错:找不到setuptools_rust
Kivy Buildozer 编译问题解决方案
1. 解决 ModuleNotFoundError: No module named 'setuptools_rust'
- 不要仅在系统环境安装
setuptools_rust,Buildozer使用独立构建虚拟环境,必须在buildozer.spec中明确声明依赖:
在requirements行添加setuptools_rust,示例:requirements = python3,kivy==2.3.0,setuptools_rust - 清理Buildozer缓存,避免旧环境干扰:
buildozer android clean - 强制Buildozer升级构建环境的pip及相关工具,在
buildozer.spec中添加:android.pip_install_args = --upgrade pip setuptools setuptools_rust - 重新执行编译:
buildozer -v android debug
2. 解决Python 3.12下bcrypt的distutils错误
Python 3.12移除了distutils模块,旧版bcrypt依赖该模块,解决方法:
- 在
buildozer.spec的requirements中指定不依赖distutils的bcrypt版本,示例:requirements = python3,kivy==2.3.0,bcrypt>=4.0.1 - 同时添加
setuptools到依赖(替代distutils的功能):requirements = python3,kivy==2.3.0,bcrypt>=4.0.1,setuptools
3. 解决APK生成后无法在手机运行的问题
排查步骤:
- 检查
buildozer.spec核心配置:- 确认
android.entrypoint正确,默认值应为:android.entrypoint = org.kivy.android.PythonActivity - 确认添加了APP所需权限,比如需要网络则添加:
android.permissions = INTERNET - 确认
android.api设置合理,建议用33(Android 13)或更高,同时android.ndk = 25b(适配Python 3.10/3.12的稳定版本)
- 确认
- 查看手机端错误日志(定位问题的核心手段):
运行命令后在手机上启动APP,终端会输出详细报错信息,比如缺失依赖、权限不足、入口错误等。buildozer android logcat
常见修复:
- 若日志显示
Permission denied,补全android.permissions中的所需权限 - 若日志显示
No module named xxx,确认该依赖已添加到requirements,且版本兼容Android构建环境 - 若启动崩溃,检查
android.entrypoint是否正确,或主入口脚本(如main.py)是否存在Android环境特有的路径/语法问题
内容的提问来源于stack exchange,提问作者Chazpanzee
相关产品推荐
相关产品推荐

