使用Buildozer打包Kivy项目为APK时Pyjnius编译失败求助
解决Buildozer打包APK时的Pyjnius编译错误
1. 修复jnius/jnius.c文件缺失问题
- 清理Buildozer缓存与旧构建文件,在Colab终端执行:
buildozer android clean rm -rf .buildozer - 在
buildozer.spec的requirements字段中强制指定兼容版本的pyjnius:requirements = python3,kivy==2.1.0,pyjnius==1.4.0,pytube - 更新Colab中的Buildozer版本:
pip install --upgrade buildozer
2. 解决Py_REFCNT表达式无法赋值问题
该错误源于Python版本与pyjnius版本不兼容,Python 3.10+中Py_REFCNT改为宏定义,无法直接赋值,按以下步骤处理:
- 在
buildozer.spec中指定适配的Python版本:android.python_version = 3.9 - 匹配对应NDK版本,避免编译冲突:
android.ndk = 25b - 若仍报错,可手动修改
.buildozer/android/platform/build-arm64-v8a/build/other_builds/pyjnius/armeabi-v7a__ndk_target_21/jnius/jnius.c文件,将所有Py_REFCNT(obj) = ...的代码替换为:Py_SET_REFCNT(obj, ...);
3. Colab环境前置配置
在执行构建前,先安装必要的系统依赖:
sudo apt-get update sudo apt-get install -y git zip unzip openjdk-17-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev
4. 关键配置示例(buildozer.spec)
确保核心配置项如下:
[app] title = YouTube Downloader package.name = ytdownloader package.domain = org.test source.dir = . version = 0.1 requirements = python3,kivy==2.1.0,pyjnius==1.4.0,pytube android.api = 33 android.ndk = 25b android.python_version = 3.9 android.permissions = INTERNET,WRITE_EXTERNAL_STORAGE
5. 重新执行构建
完成上述配置后,重新运行构建命令:
buildozer android debug
内容的提问来源于stack exchange,提问作者Ajay Banstola
相关产品推荐
相关产品推荐

