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

Kivy打包APK运行报FileNotFoundError找不到users.json如何解决

问题核心原因

你代码中硬编码了本地开发环境的绝对路径/home/mrpravin21/Documents/Python3/Application6/users.json,安卓设备不存在该目录结构,读写时直接触发文件不存在异常导致闪退。

修复步骤
  • 替换所有写死的绝对路径,使用Kivy提供的动态应用私有存储路径
    安卓系统会为每个已安装应用分配专属的私有存储目录,该目录默认有读写权限,无需额外申请权限,可通过App.get_running_app().user_data_dir获取,示例代码如下:

    from kivy.app import App
    import os
    import json
    
    # 动态获取当前应用的私有存储路径
    app_data_path = App.get_running_app().user_data_dir
    # 拼接得到users.json的完整路径
    users_json_path = os.path.join(app_data_path, "users.json")
    
    # 初始化逻辑:首次运行文件不存在时创建
    if not os.path.exists(users_json_path):
        # 无预设初始文件的场景:写入空的用户数据结构
        with open(users_json_path, "w", encoding="utf-8") as f:
            json.dump({"users": []}, f)
        
        # 有预设初始users.json的场景:先读取打包进APK的初始文件再写入私有目录
        # from kivy.resources import resource_find
        # init_file = resource_find("users.json")
        # if init_file:
        #     with open(init_file, "r", encoding="utf-8") as src_f, open(users_json_path, "w", encoding="utf-8") as dst_f:
        #         dst_f.write(src_f.read())
    

    后续所有读写用户数据的操作都使用users_json_path变量即可,不要保留任何本地开发环境的绝对路径。

  • 若需要将预设的初始users.json打包进APK,修改buildozer.spec配置
    找到spec文件中的source.include_exts配置项,添加json扩展名,确保项目根目录下的json文件会被打包:

    source.include_exts = py,png,jpg,kv,atlas,json
    

    也可以通过source.include_files单独指定要打包的文件:

    source.include_files = users.json
    
  • 修改完成后重新用buildozer打包APK,安装测试即可修复闪退问题。

注意事项

不要尝试在安卓高版本(Android 10+)中读写公共存储目录,不仅需要额外申请权限,还极容易被系统权限拦截导致异常,应用私有目录足够存储普通的用户配置、凭证类数据。

内容的提问来源于stack exchange,提问作者mrpravin21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:27:00