使用 Rust 在 Android 应用中写入文件

Writing to files in Android Apps with Rust

提问人:Rory L. 提问时间:11/17/2023 最后编辑:Rory L. 更新时间:11/18/2023 访问量:48

问:

我有一个用 Rust 编写的游戏,并通过 ADB 在我的 Android 手机上运行。这是一个简单的游戏,我不想创建一个完整的身份验证系统,所以我只是尝试使用本地 .txt 文件来存储用户 ID。据我所知,写入应用的本地目录不需要任何特殊权限。cargo-apk apk run --target=armv7-linux-androideabi

我一直在疯狂地谷歌搜索,但我没有找到任何关于使用 Rust 写入 Android 文件系统的具体信息。从各方面来看,它应该“正常工作”。

我得到一个错误。Read-only file system (os error 30)

match std::fs::write("id.txt", "123456") {
    Ok(_) => { Log::warn("SUCCESS WRITING ID"); } 
    Err(e) => { Log::warn(format!("ERROR WRITING ID: {}", e)); }
}

Java/Kotlin 应用程序中,这似乎非常简单:

FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
outputWriter.write(textmsg.getText().toString());
outputWriter.close();

编辑:用于复制的存储库

安卓 Rust ADB

评论

0赞 MeetTitan 11/17/2023
你有没有确认Java代码可以触及本地文件,这确实不是权限问题?
0赞 Gabe Sechan 11/17/2023
你要写到哪个目录?Android 对文件系统的访问权限有限,以防止应用编辑彼此的文件。您只能访问应用的私有目录
0赞 Rory L. 11/18/2023
@MeetTitan我没有写过任何Java代码,因为我不懂Java。我刚刚链接了该片段,因为 Java/Kotlin 中有数千个示例。
0赞 Rory L. 11/18/2023
@GabeSechan我尝试过(只读文件系统)、(文件或目录不存在)、(文件或目录不存在)、(文件或目录不存在)id.txtassets/id.txtrust.executor_android/id.txtfiles/id.txt
1赞 blackapps 11/18/2023
openFileOutput() 将写入 getFilesDir(),因此目录是已知的。认为 std::fs::write() 需要一个完整的路径,而不仅仅是一个文件名。

答:

0赞 Rory L. 11/18/2023 #1

必须使用完整的文件路径。这条路对我有用:/data/data/rust.executor_android/files/id.txt

有效的格式,这要归功于@blackapps

  1. /data/data/<packagename>/files/id.txt
  2. /storage/emulated/0/Documents/id.txt
  3. /storage/emulated/0/Android/data/<packagename>/files/id.txt