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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:24:02