存储管理与 SAF 权限 —— Cxxdroid 在手机上的文件读写
内部存储 vs 外部存储
Android 上每个应用有自己的存储空间:
| 类型 | 路径示例 | 特点 |
|---|---|---|
| 内部存储 | /data/data/ru.iiec.cxxdroid/ | 只有本应用能读,其他 App 看不到 |
| 外部存储(公共) | /sdcard/ 或 /storage/emulated/0/ | 所有应用都能访问,但需要申请权限 |
Cxxdroid 默认在内部存储里放:
- 项目目录(源码文件)
- 编译产物(build/ 目录下的可执行文件)
- 安装的库文件(Boost、SQLite、SDL2 的 .a 文件)
- 应用设置和缓存
默认存储路径
项目默认保存在内部存储的某个子目录下,具体路径取决于 Cxxdroid 版本。新版 Cxxdroid 通常允许用户选择项目保存位置。
从电脑传输文件到手机的常见路径:
- 通过 USB 拷贝到
/sdcard/Download/然后在 Cxxdroid 里打开 - 通过云盘下载到手机后,Cxxdroid 授权读取 Download 目录
- 2026 版支持 SAF,可以选择任意目录授权
Android 11+ 的分区存储
从 Android 11 开始,系统强制分区存储(Scoped Storage):
- 应用不能再随便访问整个
/sdcard/ - 只能访问自己创建的文件或通过 SAF 授权的目录
- Download、Documents 等公共目录有特殊规则
Cxxdroid 2026 更新版本已适配分区存储,使用 SAF 机制让用户手动选择目录授权。
Storage Access Framework(SAF)
SAF 是 Android 提供的一个「系统文件选择器」。应用请求访问某个目录时:
- 系统弹出文件选择器
- 用户浏览目录结构、选中目标目录
- 系统返回一个访问 token,后续通过这个 token 读写该目录
Cxxdroid 里触发 SAF 的时机:
- 第一次尝试访问外部存储时
- 手动选择「设置项目保存位置」
- 打开已有的外部存储项目时
手动检查存储占用
系统设置 → 应用 → Cxxdroid → 存储 → 点击「存储」选项卡,可以看到:
- 应用本体大小(约 70-100MB)
- 用户数据(项目文件、安装的库,可能几百 MB)
- 缓存(编译缓存,几十 MB)
如果空间紧张:
- 清除缓存:安全操作,不影响项目和库
- 清除用户数据:会删除所有项目和安装的库,谨慎操作
存储空间建议
| 使用场景 | 推荐预留 |
|---|---|
| 只跑 Hello World 和算法练习 | 150MB |
| 用 Boost、SQLite、SDL2 | 300MB+ |
| 多个项目 + 大量安装库 | 500MB+ |
如果手机内部存储真的不够,可以考虑:
- 把编译缓存放外部存储(部分版本支持设置)
- 用 Termux + 手动装 clang 作为替代方案
- 某些品牌手机支持「应用移到 SD 卡」(仅限部分 ROM)