如何用Kivy Python创建本地存储?APK部署后崩溃及图片不显示问题
Kivy应用打包APK后:保存崩溃、图片不显示问题修复
一、保存文件崩溃问题修复
1. 错误的文件写入路径
安卓系统中应用无权限写入默认工作目录,必须使用Kivy提供的user_data_dir(应用专属可写目录),同时类级别执行IO操作会导致初始化时出错,需调整:
修改MyFigure类:
class MyFigure(Widget): savefile = ObjectProperty(None) text_input = ObjectProperty(None) def __init__(self, **kwargs): super().__init__(**kwargs) # 获取应用专属可写路径 self.save_file_path = os.path.join(MDApp.get_running_app().user_data_dir, 'save_file.csv') # 初始化CSV文件 with open(self.save_file_path, 'w') as f: f.write("Shot type,X,Y\n") def on_touch_down(self, touch): self.canvas.add(Color(rgb=(46 / 255.0, 172 / 255.0, 88 / 255.0))) d = 10 self.canvas.add(Ellipse(pos=(touch.x - d / 2, touch.y), size=(d, d))) # 使用初始化好的路径写入 with open(self.save_file_path, 'a', newline='') as f: print("Made," + str(touch.x) + "," + str(touch.y), file=f) if touch.is_double_tap: self.canvas.add(Color(rgb=(220 / 255.0, 8 / 255.0, 8 / 255.0))) d = 10 self.canvas.add( Ellipse(pos=(touch.x - d / 2, touch.y), size=(d, d))) print("Missed," + str(touch.x) + "," + str(touch.y), file=f)
2. PlotScreen的save方法路径修正
原代码文件路径错误,且未处理异常,修改后:
def save(self, path, filename): try: # 确保文件名带.csv后缀 if not filename.endswith('.csv'): filename += '.csv' target_path = os.path.join(MDApp.get_running_app().user_data_dir, filename) # 复制文件(避免move后丢失临时文件) shutil.copy(self.save_file_path, target_path) # 重置临时文件 with open(self.save_file_path, 'w') as f: f.write("Shot type,X,Y\n") except Exception as e: # 捕获异常避免崩溃 print(f"保存失败: {str(e)}") self.dismiss_popup()
3. 安卓权限配置
在buildozer.spec中添加文件读写权限:
android.permissions = WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE
二、图片无法显示问题修复
1. 打包时包含图片资源
在buildozer.spec中配置assets目录,确保images文件夹被打包:
android.add_assets = images/
项目结构需保持:
项目根目录/ ├── main.py ├── app.kv └── images/ ├── bball_dude_new.png ├── dataset.png └── ... 其他图片
2. KV文件路径检查
确保图片路径大小写与实际文件一致(安卓路径大小写敏感),比如source: 'images/bball_dude_new.png'需匹配文件名。
3. 底部导航图标适配
MDBottomNavigationItem的icon属性仅支持Material Design图标名称,若用本地图片需替换为Button组件:
MDBottomNavigationItem: name: "btnSave" text: "Save" selected_color_background: 0, 0, 1, .4 Button: size_hint: None, None size: 40,40 background_normal: 'images/save.png' on_release: root.show_save()
三、调试建议
- 使用
adb logcat查看安卓设备上的崩溃日志,定位具体错误。 - 所有文件操作前先确认权限,可借助
plyer库实现权限检查。
内容的提问来源于stack exchange,提问作者scghte
相关产品推荐
相关产品推荐

