You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:02