Kivy应用通过Buildozer打包到Android后无法加载存在的静态图片求助
解决方案
1. 修正跨平台路径适配逻辑
你当前使用的resource_path仅适配PyInstaller打包的桌面端环境,_MEIPASS是PyInstaller的专属运行时属性,安卓端Buildozer打包环境完全不识别该属性,需要补充安卓端路径逻辑:
import os import sys from kivy.utils import platform def resource_path(self, relative_path): if platform == 'android': # 安卓端APP资源根路径从环境变量获取 base_path = os.environ.get('ANDROID_APP_PATH', '/') else: # 桌面端兼容PyInstaller和本地运行 base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path)
2. 补充Buildozer配置
你仅配置了允许的文件后缀,没有显式声明要打包的资源目录,需要在buildozer.spec中添加资源目录包含规则:
source.include_dirs = assets/
同时需要在依赖中补充安卓端的音视频解码库,原生Kivy安卓包默认不包含jpeg、wav的解码支持:
requirements = python3,kivy,pillow,sdl2_image,sdl2_mixer
3. 检查文件名大小写
Windows系统对文件名大小写不敏感,但安卓基于Linux内核,大小写完全敏感。请确认代码中引用的文件名(比如bg1.jpg)和实际文件的命名大小写完全一致,包括后缀名的大小写(避免.JPG和.jpg不匹配的问题)。
4. 验证路径输出
在调用resource_path后添加打印逻辑,通过adb logcat查看实际拼接出的路径是否和你在模拟器中看到的路径完全一致,排查路径拼接时出现多余斜杠、层级错误的问题。
内容的提问来源于stack exchange,提问作者Joshua Abbott
相关产品推荐
相关产品推荐

