Ubuntu 24.04下Kivy+Buildozer部署Android应用遇readline.h缺失错误
Ubuntu 24.04 LTS下用Buildozer部署Kivy应用到Android时readline.h缺失问题
我在Ubuntu 24.04 LTS系统中尝试用Kivy将一个"hola mundo"应用部署到Android平台,被readline.h头文件找不到的问题困扰了好几周。使用buildozer init命令生成标准buildozer.spec配置文件后,仅修改了requirements配置项:
requirements = python3==3.12.3, hostpython3==3.12.3,kivy==2.3.0
以下是日志的最后部分:
/home/pablo/PycharmProjects/androidDeploy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Modules/readline.c -o Modules/readline.o > /home/pablo/PycharmProjects/androidDeploy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Modules/readline.c:39:12: fatal error: 'readline/readline.h' file not found > include <readline/readline.h> > ^~~~~~~~~~~~~~~~~~~~~ > 1 error generated. > make: *** [Makefile:3018: Modules/readline.o] Error 1 STDERR: Command failed: ('/usr/bin/python3', '-m', 'pythonforandroid.toolchain', 'create', '--dist_name=myapp', '--bootstrap=sdl2', '--requirements=python3==3.12.3,hostpython3==3.12.3,kivy==2.3.0', '--arch=arm64-v8a', '--arch=armeabi-v7a', '--copy-libs', '--color=always', '--storage-dir=/home/pablo/PycharmProjects/androidDeploy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a', '--ndk-api=21', '--ignore-setup-py', '--debug') Error code: 1 ENVIRONMENT: SHELL = '/bin/bash' SESSION_MANAGER = 'local/pablo-OptiPlex-3050:@/tmp/.ICE-unix/1622,unix/pablo-OptiPlex-3050:/tmp/.ICE-unix/1622' QT_ACCESSIBILITY = '1' COLORTERM = 'truecolor' XDG_CONFIG_DIRS = '/etc/xdg/xdg-ubuntu:/etc/xdg' XDG_MENU_PREFIX = 'gnome-' GNOME_DESKTOP_SESSION_ID = 'this-is-deprecated' GNOME_SHELL_SESSION_MODE = 'ubuntu' SSH_AUTH_SOCK = '/run/user/1000/keyring/ssh' MEMORY_PRESSURE_WRITE = 'c29tZSAyMDAwMDAgMjAwMDAwMAA=' XMODIFIERS = '@im=ibus' DESKTOP_SESSION = 'ubuntu' GTK_MODULES = 'gail:atk-bridge' PWD = '/home/pablo/PycharmProjects/androidDeploy' LOGNAME = 'pablo' XDG_SESSION_DESKTOP = 'ubuntu' XDG_SESSION_TYPE = 'wayland' SYSTEMD_EXEC_PID = '1663' XAUTHORITY = '/run/user/1000/.mutter-Xwaylandauth.OV0AR2' HOME = '/home/pablo' USERNAME = 'pablo' IM_CONFIG_PHASE = '1' LANG = 'en_US.UTF-8' XDG_CURRENT_DESKTOP = 'ubuntu:GNOME' MEMORY_PRESSURE_WATCH = '/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/session.slice/org.gnome.Shell@wayland.service/memory.pressure' VTE_VERSION = '7600' WAYLAND_DISPLAY = 'wayland-0' GNOME_TERMINAL_SCREEN = '/org/gnome/Terminal/screen/9329102b_46df_4d9d_b9de_7c08e5a177a1' GNOME_SETUP_DISPLAY = ':1' XDG_SESSION_CLASS = 'user' TERM = 'xterm-256color' USER = 'pablo' GNOME_TERMINAL_SERVICE = ':1.121' DISPLAY = ':0' SHLVL = '1' GSM_SKIP_SSH_AGENT_WORKAROUND = 'true' QT_IM_MODULE = 'ibus' XDG_RUNTIME_DIR = '/run/user/1000' DEBUGINFOD_URLS = 'https://debuginfod.ubuntu.com ' XDG_DATA_DIRS = '/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop' PATH = '/home/pablo/.buildozer/android/platform/apache-ant-1.9.4/bin:/home/pablo/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin' GDMSESSION = 'ubuntu' DBUS_SESSION_BUS_ADDRESS = 'unix:path=/run/user/1000/bus' OLDPWD = '/home/pablo/PycharmProjects/androidDeploy/buildozer' _ = '/usr/local/bin/buildozer' PACKAGES_PATH = '/home/pablo/.buildozer/android/packages' ANDROIDSDK = '/home/pablo/.buildozer/android/platform/android-sdk' ANDROIDNDK = '/home/pablo/.buildozer/android/platform/android-ndk-r25b' ANDROIDAPI = '31' ANDROIDMINAPI = '21' Buildozer failed to execute the last command The error might be hidden in the log above this error Please read the full log, and search for it before raising an issue with buildozer itself. In case of a bug report, please add a full log with log_level = 2
解决方向建议
- 安装系统级readline开发库:执行
sudo apt-get install libreadline-dev,补充主机环境的依赖文件。 - 降级Python版本:将
buildozer.spec中的requirements改为python3==3.11.8, hostpython3==3.11.8,kivy==2.3.0,Python 3.12在Buildozer生态中的兼容性尚未完全稳定。 - 清理缓存后重建:执行
buildozer android clean清除旧构建残留,再运行buildozer android debug重新构建。 - 更换NDK版本:修改
buildozer.spec中的android.ndk = 23c,使用更稳定的NDK r23c版本,等待Buildozer自动下载对应版本后重新构建。
内容的提问来源于stack exchange,提问作者Pablo Gonzalez
相关产品推荐
相关产品推荐

