如何将使用Scipy的Kivy应用转为Android APK?Buildozer报错求解决方案
解决Buildozer打包Scipy依赖的问题
1. 调整buildozer.spec配置是核心
- 别直接写
scipy,指定稳定版本scipy==1.7.3,这个版本对Android编译支持最成熟,高版本常因底层依赖冲突报错 - 在
android.add_libs中添加libopenblas.so,Scipy依赖BLAS/LAPACK计算库,Android环境需要预编译的该文件 - 把
android.ndk_api设为21,过高的NDK版本和旧版Scipy兼容性差,容易触发编译失败 - 关闭
android.use_aapt2,设置为False,部分环境下该工具会导致依赖打包异常
2. 清理编译缓存重试
- 先执行
buildozer android clean清理缓存,若仍报错,直接删除.buildozer目录,彻底清除旧编译残留后重新打包
3. 精简依赖(可行的话)
- 若仅用到Scipy的小部分功能(比如简单统计、拟合),可以用
numpy手动实现,或替换为轻量Python库,避免和Scipy的编译问题死磕
替代Buildozer的打包方案
1. 直接用Python for Android(P4A)手动打包
Buildozer基于P4A开发,手动操作更灵活:
- 先安装P4A:
pip install python-for-android - 执行打包命令:
p4a apk --private ./你的项目目录 --package=com.你的包名 --name="你的APP名称" --version=0.1 --bootstrap=sdl2 --requirements=kivy,scipy==1.7.3,pyjnius - 还可自行添加预编译的Scipy二进制包,跳过耗时的编译步骤
2. 用Chaquopy集成到Android Studio
适合有基础Android开发经验的用户:
- 在Android Studio中创建新项目,引入Chaquopy插件
- 在
build.gradle中配置Python依赖:pip { install "kivy" "scipy==1.7.3" } - 将Kivy代码放入指定目录,配置启动入口后直接编译APK,Chaquopy会自动处理Scipy的编译与打包
3. 尝试BeeWare(需迁移UI框架)
若项目规模较小,可将Kivy代码迁移到BeeWare的Toga框架后打包:
- 安装BeeWare:
pip install beeware - 用
toga init创建项目,迁移原有业务逻辑 - 执行
briefcase build android和briefcase package android生成APK - 缺点是需要适配Toga的API,适合小项目尝试
内容的提问来源于stack exchange,提问作者Mahfoud B.
相关产品推荐
相关产品推荐

