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

使用Kivy在手机指定存储路径创建文件夹失败,求解决方案

解决Android创建App专属外部存储文件夹失败的问题

可能的原因及修复方案

1. 路径拼接错误

先检查primary_external_storage_path()的返回值是否正确,比如是否多了或漏了斜杠。如果它已经返回/storage/emulate/0,那拼接后的路径是对的,但如果返回值带结尾斜杠(比如/storage/emulate/0/),就会出现//Android/data...的无效路径。可以先打印路径确认:

target_path = str(primary_external_storage_path() + "/Android/data/org.app.test/folder")
print(target_path)

2. 未递归创建目录

os.mkdir只能创建单级目录,如果父目录(比如org.app.test)不存在,就会创建失败。改用os.makedirs并设置exist_ok=True,它会递归创建所有需要的父目录,且目录已存在时不会报错:

import os
target_path = str(primary_external_storage_path() + "/Android/data/org.app.test/folder")
os.makedirs(target_path, exist_ok=True)

3. Android权限与版本适配

Android 10+(API 29及以上)

Scoped Storage机制下,App访问自己的Android/data/[包名]/目录不需要申请外部存储权限,但不建议硬编码路径,应该通过Context的API获取正确路径,避免路径适配问题:

# 假设你有Context实例(比如Activity或Application)
external_files_dir = context.getExternalFilesDir(null)
target_path = os.path.join(external_files_dir, "folder")
os.makedirs(target_path, exist_ok=True)

getExternalFilesDir(null)会直接返回你的App专属存储目录(对应/storage/emulate/0/Android/data/org.app.test/files),在这个目录下创建子文件夹完全不需要权限,系统会自动保证访问权限。

Android 9及以下(API 28及以下)

需要在Manifest中声明权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

如果是API 23+(Android 6.0+),还需要在运行时动态请求这些权限,用户授权后才能创建目录。

4. 其他排查点

  • 检查App是否被授予存储权限(在系统设置-应用-你的App-权限中查看)
  • 确认存储设备有足够的空间
  • 检查路径是否有特殊字符或权限限制(比如系统目录无法写入)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:10:51