Kivy+ffpyplayer应用经Buildozer打包安卓后无法找到音频加载器
一、buildozer.spec 配置修改
- 补充安卓权限配置,找到对应配置项修改为:
android.permissions = READ_EXTERNAL_STORAGE, READ_MEDIA_AUDIO, MODIFY_AUDIO_SETTINGS
适配不同安卓版本的音频文件读取权限。
- 新增ffmpeg编译参数,确保mp3解码支持被编译进打包的ffmpeg库中,添加如下配置项:
android.build_ffmpeg_args = --enable-demuxer=mp3 --enable-decoder=mp3 --enable-parser=mpegaudio --enable-protocol=file
- 修正资源引入配置,把原来的
source.include_patterns修改为以下内容,避免多余符号导致资源打包异常:
source.include_patterns = music/*.mp3
- 锁定依赖版本,避免版本兼容问题,修改requirements配置为:
requirements = python3,kivy==2.0.0,ffpyplayer==4.3.2,android
二、代码调整(可选,解决路径解析问题)
修改音频文件加载逻辑,使用安卓官方提供的应用存储路径拼接绝对路径,避免相对路径解析异常:
import os os.environ["KIVY_AUDIO"] = "ffpyplayer" from kivy.lang import Builder from kivy.core.audio import SoundLoader from kivy.app import App from kivy.utils import platform class MainApp(App): def __init__(self, **kwargs): super(MainApp, self).__init__(**kwargs) # 适配安卓路径 if platform == "android": from android.storage import app_storage_path base_dir = app_storage_path() song_path = os.path.join(base_dir, "music", "10_poker_face.mp3") else: song_path = os.path.join("music", "10_poker_face.mp3") self.song = SoundLoader.load(song_path) # 其余原有代码保持不变
三、打包注意事项
每次修改配置后,先执行清理缓存命令再重新打包,避免旧缓存导致配置不生效:buildozer android clean && buildozer android debug deploy run
内容的提问来源于stack exchange,提问作者Omid Ketabollahi
相关产品推荐
相关产品推荐

