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

Android平台Rust应用写入本地文件遇只读文件系统问题求助

解决Rust Android应用写入文件时的"Read-only file system"错误

问题原因

直接调用std::fs::write("id.txt", ...)时,Rust会尝试写入当前工作目录,而Android应用的当前工作目录属于系统只读路径。Java/Kotlin的openFileOutput方法默认将文件写入应用私有内部存储目录(/data/data/<你的包名>/files/),该目录是应用拥有读写权限的专属路径,因此不会出现权限问题。

解决方案

必须先获取Android应用的私有文件目录路径,再拼接目标文件名进行写入。可以借助ndk或ndk-glue库实现,这两个库是Rust开发Android应用的常用工具。

1. 添加依赖

在Cargo.toml中引入所需依赖:

[dependencies]
ndk = "0.8"
ndk-glue = "0.8"
log = "0.4"

2. 编写文件写入代码

通过ndk-glue获取应用上下文,进而拿到私有文件目录,再完成写入操作:

use ndk_glue::android_context;
use std::path::PathBuf;

fn write_user_id() {
    // 获取Android应用上下文
    let ctx = android_context();
    // 获取私有文件目录路径
    let files_dir = ctx.files_dir().expect("无法获取文件目录");
    // 拼接目标文件的完整路径
    let file_path = PathBuf::from(files_dir).join("id.txt");

    match std::fs::write(file_path, "123456") {
        Ok(_) => { log::warn!("写入ID成功"); }
        Err(e) => { log::warn!("写入ID失败: {}", e); }
    }
}

原理说明

  • ctx.files_dir()对应Java中的getFilesDir()方法,返回的路径是应用专属的可写目录,无需额外申请权限。
  • 只有将文件写入这个目录,才能避开Android的文件系统权限限制,解决只读错误。

验证方式

通过ADB命令确认文件是否写入成功:

# 切换到应用的私有文件目录
adb shell run-as <你的应用包名> cd /data/data/<你的应用包名>/files
# 查看文件内容
cat id.txt

内容的提问来源于stack exchange,提问作者Rory L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:42:40