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

Kivy开发Android应用黑屏报错:根目录访问权限被拒

解决Kivy+Buildozer APK启动黑屏及权限错误问题

核心问题分析

你的应用启动黑屏的根源是:

  • Android 11+ 限制了普通应用对根目录/的访问权限,代码尝试访问/触发PermissionError: [Errno 13] Permission denied
  • 异常处理逻辑中尝试序列化(pickle)traceback对象,而traceback无法被pickle,导致二次TypeError,最终应用启动失败

具体解决方案

1. 替换根目录访问为合法路径

直接访问/在Android高版本系统中完全被禁止,必须替换为应用允许访问的目录:

  • 优先使用Kivy提供的跨平台私有目录user_data_dir,这是应用专属的存储目录,无需额外权限:
    from kivy.app import App
    
    # 获取应用私有目录
    app_storage_dir = App.get_running_app().user_data_dir
    # 用这个目录替代原代码中的`/`进行文件/目录操作
    
  • 如果需要访问外部存储(如图片、文档),使用Android官方允许的外部存储路径,或通过Kivy的platform模块判断后调用对应API:
    from kivy.utils import platform
    
    if platform == 'android':
        from android.storage import primary_external_storage_path
        external_dir = primary_external_storage_path()
        # 仅在已申请存储权限的前提下使用
    

2. 修复traceback序列化错误

异常处理中不要尝试pickle traceback对象,改为提取错误字符串信息:

try:
    # 原目录访问代码
except PermissionError as e:
    # 提取错误信息,避免操作traceback对象
    error_detail = f"权限错误:{str(e)},路径:{你的路径变量}"
    # 可将错误信息写入应用日志或显示给用户
    print(error_detail)

3. 配置必要的Android权限(若需外部存储)

如果应用需要访问外部存储,在buildozer.spec中添加对应权限:

# Android权限配置
android.permissions = READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
# Android 13+ 需额外添加媒体权限(如访问图片)
android.permissions = READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, READ_MEDIA_IMAGES

4. 重新打包验证

修改完成后,使用Buildozer重新打包并测试:

buildozer android debug deploy run logcat -s python

通过实时日志确认权限错误和pickle错误是否消失,应用能否正常启动。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:45:30