Kivy应用Buildozer构建时NDK版本冲突问题求解
解决Kivy Buildozer NDK版本不匹配问题
核心矛盾
你的依赖包含scipy和numpy,这类科学计算库需要gfortran编译支持,但Android NDK r21e之后的版本(如官方推荐的23b)移除了gcc/gfortran工具链,改用clang。而当前python-for-android要求NDK最低版本为23,直接用r21e会触发版本过低的错误,不用又缺失gfortran编译环境。
解决方案:同时配置主NDK和LEGACY_NDK
需要同时指定两个NDK:一个满足python-for-android的最低版本要求(23+),另一个提供gfortran编译支持(r21e),具体步骤如下:
1. 下载对应NDK版本
- 下载NDK r23b(或官方推荐的23及以上版本),解压到本地目录,比如
~/android-ndk-r23b - 下载NDK r21e,解压到本地目录,比如
~/android-ndk-r21e
2. 修改buildozer.spec配置
打开buildozer.spec文件,找到Android相关配置项,取消注释并设置主NDK信息:
android.ndk = r23b android.ndk_path = ~/android-ndk-r23b
3. 设置LEGACY_NDK环境变量
在执行构建命令前,通过终端设置环境变量指向r21e的路径:
export LEGACY_NDK=~/android-ndk-r21e
Windows系统则使用:
set LEGACY_NDK=C:\path\to\android-ndk-r21e
4. 清理缓存并重新构建
先清除旧的构建缓存:
buildozer android clean
再执行构建命令:
buildozer android debug
替代方案:使用兼容的预编译依赖版本
如果配置双NDK过于繁琐,可以尝试指定适配NDK 23+的旧版本科学计算库,修改requirements配置:
requirements = python3,kivy,pillow,plyer,scipy==1.7.3,numpy==1.21.6
这类版本通常已经适配了新版NDK的编译环境,无需额外gfortran支持。
配置生效验证
构建日志中出现以下内容,说明双NDK配置生效:
[INFO]: Found NDK version 23b
[INFO]: Using LEGACY_NDK at ~/android-ndk-r21e for gfortran support
内容的提问来源于stack exchange,提问作者monok
相关产品推荐
相关产品推荐

