docs.rs failed to build tauri-plugin-android-fs-15.1.1
Please check the
build logs for more information.
See
Builds for ideas on how to fix a failed build,
or
Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault,
open an issue.
Note: I’m using a translation tool, so there may be some inappropriate expressions.
Overview
The Android file system is strict and complex. This plugin was created to provide practical file operations. You don’t need to set special permissions or configurations.
And this does not use any options that require additional permissions or review, so you can submit your app for Google Play review with peace of mind.
Setup
Register this plugin in your Tauri project:
src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_android_fs::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
Usage
This plugin only provides a Rust-side API.
If you need to use file data on frontend, consider using Tauri’s custom protocols for efficient transmission. Or convert tauri_plugin_android_fs::FileUri
to tauri_plugin_fs::FilePath
and use tauri_plugin_fs functions on frontend.
1. Dialog
Opens the file/folder picker to read and write user-selected entries.
use tauri_plugin_android_fs::{AndroidFsExt, ImageFormat, Size};
fn file_picker_example(app: tauri::AppHandle) -> tauri_plugin_android_fs::Result<()> {
let api = app.android_fs();
let selected_files = api.file_picker().pick_files(
None, &["*/*"], )?;
if selected_files.is_empty() {
}
else {
for uri in selected_files {
let file_path: tauri_plugin_fs::FilePath = uri.clone().into();
let file_type = api.get_mime_type(&uri)?;
let file_name = api.get_name(&uri)?;
let file_thumbnail = api.get_thumbnail(
&uri,
Size { width: 200, height: 200},
ImageFormat::Jpeg
)?;
{
let file: std::fs::File = api.open_file_readable(&uri)?;
}
{
let file: std::fs::File = api.open_file_writable(&uri)?;
use std::io::{BufWriter, Write as _};
let mut stream = api.open_writable_stream(&uri)?;
stream.write_all(&[])?;
stream.reflect()?;
let mut stream = BufWriter::new(api.open_writable_stream(&uri)?);
stream.write_all(&[])?;
stream.into_inner()?.reflect()?;
}
}
}
Ok(())
}
use tauri_plugin_android_fs::{AndroidFsExt, Entry};
fn dir_picker_example(app: tauri::AppHandle) -> tauri_plugin_android_fs::Result<()> {
let api = app.android_fs();
let selected = api.file_picker().pick_dir(
None, )?;
if let Some(dir_uri) = selected {
api.take_persistable_uri_permission(&dir_uri)?;
for entry in api.read_dir(&dir_uri)? {
match entry {
Entry::File { name, uri, last_modified, len, mime_type, .. } => {
},
Entry::Dir { name, uri, last_modified, .. } => {
},
}
}
let file_uri = api.create_new_file(
&dir_uri,
"MyApp/file.txt",
Some("text/plain")
)?;
}
else {
}
Ok(())
}
2. Public Storage
File storage that is available to other applications and users.
This is for Android 10 (API level 29) or higher.
use tauri_plugin_android_fs::{AndroidFsExt, PublicGeneralPurposeDir, PublicImageDir};
fn example(app: tauri::AppHandle) -> tauri_plugin_android_fs::Result<()> {
let api = app.android_fs();
let storage = api.public_storage();
let contents = &[];
let uri = storage.create_new_file(
None, PublicImageDir::Pictures, "MyApp/my-image.png", Some("image/png") )?;
if let Err(e) = api.write(&uri, contents) {
let _ = api.remove_file(&uri);
return Err(e)
}
let volume = storage.get_volumes()?
.into_iter()
.find(|v| !v.is_primary);
let uri = storage.create_new_file(
volume.as_ref().map(|v| &v.id), PublicGeneralPurposeDir::Documents, "MyApp/2025-9-14/data.txt", Some("text/plain") )?;
let mut file: std::fs::File = api.open_file_writable(&uri)?;
Ok(())
}
3. Private Storage
File storage intended for the app’s use only.
use tauri_plugin_android_fs::{AndroidFsExt, PrivateDir};
fn example(app: tauri::AppHandle) -> tauri_plugin_android_fs::Result<()> {
let storage = app.android_fs().private_storage();
let cache_dir_path: std::path::PathBuf = storage.resolve_path(PrivateDir::Cache)?;
let data_dir_path: std::path::PathBuf = storage.resolve_path(PrivateDir::Data)?;
let cache_dir_path = cache_dir_path.join("01K6049FVCD4SAGMAB6X20SA5S");
let data_dir_path = data_dir_path.join("01K6049FVCD4SAGMAB6X20SA5S");
Ok(())
}
Link
License
MIT OR Apache-2.0