使用Buildozer打包Kivy/Python代码为Android应用后图片无法显示问题求助
问题根因
- 硬编码Windows本地绝对路径:你代码里写的C盘路径仅在你的Windows设备上有效,Android系统不存在该目录结构,打包后应用根本找不到对应文件。
- 资源未纳入打包配置:仅把图片传到Ubuntu编译目录无效,Buildozer打包时默认只会包含配置中指定的资源文件,未在spec文件声明的文件不会被打进APK包内。
- 路径适配逻辑缺失:不同操作系统(Windows、Linux、Android)的文件路径规则完全不同,必须用工具动态获取应用运行目录,不能写死固定路径。
修复步骤
- 先统一整理项目目录结构,把所有图片资源放到项目根目录下的独立文件夹中,示例结构如下:
项目根目录/ ├── main.py ├── 页面kv文件 ├── buildozer.spec └── assets/ └── pics/ └── Meds/ └── Dekalbprotocols (1)-193.jpg
- 修改代码路径逻辑,不要写死绝对路径,用
os.path动态拼接资源路径:
如果你是在Python代码中配置路径,示例如下:
import os from kivy.app import App class MyApp(App): def build(self): # 动态拼接相对路径,适配不同系统 self.img_path = os.path.join("assets", "pics", "Meds", "Dekalbprotocols (1)-193.jpg") # 后续kv文件可直接调用该属性
如果是直接在KV文件中配置,可直接写相对路径(注意和kv文件存放位置的相对关系):
Image: source: "assets/pics/Meds/Dekalbprotocols (1)-193.jpg" allow_stretch: False keep_ratio: False size_hint: 1, 1 GridLayout cols: 2 size_hint: 1, .1 spacing: 180 Button: text: "Home" size_hint_y: .3 on_press: root.manager.current = "HomePage" background_color: 0,0,0,1 Button: text: "Back" size_hint_y: .3 pos_hint: {"right": 1} on_press: root.manager.current = "MedsPage" background_color: 0,0,0,1
- 修改
buildozer.spec配置文件,把资源文件纳入打包范围:
- 找到
source.include_exts配置项,确保包含你用到的图片格式,示例:
source.include_exts = py,png,jpg,kv,atlas
- 找到
source.include_dirs配置项,添加你存放资源的assets目录:
source.include_dirs = assets
- 重新执行打包命令
buildozer android debug即可。
内容的提问来源于stack exchange,提问作者NoTakeOnlyThrow
相关产品推荐
相关产品推荐

