Buildozer构建APK时PyAudio安装报错:bits/libc-header-start.h未找到
GitHub Actions构建Android APK时PyAudio编译失败解决方案
问题描述
开发的PaadasML应用依赖SpeechRecognition包,而SpeechRecognition需要PyAudio支持,因此在buildozer.spec的requirements中添加了PyAudio。但通过GitHub Actions构建APK时出现编译报错,核心错误信息如下:
/usr/include/limits.h:26:10: fatal error: 'bits/libc-header-start.h' file not found 34939 #include <bits/libc-header-start.h> 34940 ^~~~~~~~~~~~~~~~~~~~~~~~~~ 34941 1 error generated. 34942 error: command '/usr/bin/ccache' failed with exit code 1 34943 error: subprocess-exited-with-error 34945 × Building wheel for pyaudio (pyproject.toml) did not run successfully. 34946 │ exit code: 1 ERROR: Failed building wheel for pyaudio 34954Failed to build pyaudio 34955ERROR: Could not build wheels for pyaudio, which is required to install pyproject.toml-based projects
现有困惑
- 已知
apt install gcc-multilib可解决类似头文件缺失问题,但不清楚如何将该命令整合进Buildozer的构建流程 - 未找到可添加到requirements列表的Python包来规避编译问题
- 怀疑32/64位架构不兼容,但不知道如何在GitHub Actions中控制编译架构
- 本地尝试多种修复方案均未解决问题
可行修复方案
1. 在GitHub Actions中提前安装系统依赖
在GitHub Actions的工作流文件中,执行Buildozer命令前添加系统依赖安装步骤,确保gcc-multilib已安装:
- name: Install required system packages run: sudo apt-get update && sudo apt-get install -y gcc-multilib
2. 强制使用32位架构编译
配置Buildozer指定32位Android架构
修改buildozer.spec文件,添加或修改以下配置项:
# 指定Android 32位架构 android.arch = armeabi-v7a
在GitHub Actions中指定32位编译命令
执行Buildozer时显式指定架构:
buildozer android debug --arch armeabi-v7a
3. 绕过PyAudio依赖(替代方案)
由于PyAudio在Android环境下编译难度较高,可改用SpeechRecognition支持的其他音频输入方式:
- 使用Kivy的
AudioRecorder组件捕获音频流,将音频数据转换为SpeechRecognition可处理的格式 - 替换为Android原生音频API实现音频捕获,再传递给SpeechRecognition进行识别
内容的提问来源于stack exchange,提问作者Sameer Mahajan
相关产品推荐
相关产品推荐

