使用Buildozer构建Kivy APK时遇两类错误求助
嘿,这两个问题我打包Kivy APK的时候都踩过坑,给你分享下我当时解决的办法:
解决Buildozer打包Kivy APK的两类常见问题
一、先确认Java环境配置彻底生效
你切换到OpenJDK8后解决了java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema错误,但得确保Buildozer真的在使用这个版本:
- 先检查系统默认Java版本:运行
java -version和javac -version,确认输出都是OpenJDK 1.8.x系列。 - 如果系统装了多个Java版本,用
update-alternatives --config java和update-alternatives --config javac手动切换到OpenJDK8。 - 嫌麻烦的话,直接在
buildozer.spec里强制指定Java路径:
(路径根据你实际的OpenJDK安装位置调整)android.ndk_java_home = /usr/lib/jvm/java-8-openjdk-amd64
二、解决SDL2_image解压时的符号链接错误
这个错误几乎都是Windows环境(原生或WSL1)导致的,因为Windows文件系统对Linux符号链接支持有限。给你几个可行的解决思路:
方法1:替换为修复过的SDL2_image版本(最省事)
旧版SDL2_image-2.0.4确实存在符号链接问题,直接在buildozer.spec里指定更新的版本:
- 找到
android.add_aars这一行,替换成:android.add_aars = https://github.com/libsdl-org/SDL_image/releases/download/release-2.6.3/SDL2_image-2.6.3.aar - 同时注释掉或删除配置里和SDL2_image相关的
android.add_jars、android.libs_src项,避免版本冲突。
方法2:升级到支持符号链接的环境
如果你用的是WSL1,赶紧升级到WSL2:
- 以管理员身份打开PowerShell,运行:
比如wsl --set-version <你的WSL发行版名称> 2wsl --set-version Ubuntu 2 - 在WSL中创建
/etc/wsl.conf文件(没有的话直接新建),添加以下内容:[automount] options = "metadata,umask=0022,fmask=0133" [interop] enabled = true appendWindowsPath = true [user] default = <你的WSL用户名> - 重启WSL:
wsl --shutdown,再重新打开即可。
方法3:手动修改SDL2_image压缩包(备选)
如果不想换版本,就手动处理符号链接:
- 下载SDL2_image-2.0.4.tar.gz,解压后找到所有符号链接文件,把它们替换成实际的文件副本(复制符号链接指向的原文件,替换掉符号链接)。
- 将修改后的文件夹重新打包成tar.gz,然后在
buildozer.spec里修改android.libs_src_sdl_image指向这个自定义压缩包的地址。
三、Python版本的额外确认
你已经尝试了Python3.7和3.8,记得在buildozer.spec里明确指定版本,避免Buildozer自动选择出错:
android.python_version = 3.7
另外,打包前一定要删除Buildozer的缓存目录~/.buildozer,旧缓存很容易导致各种奇怪问题,然后重新运行buildozer android debug即可。
内容的提问来源于stack exchange,提问作者Ciro García
相关产品推荐
相关产品推荐

