Android file system API for Tauri.
npm install tauri-plugin-android-fs-apiNote: I’m using a translation tool, so there may be some inappropriate expressions.
src-tauri/Cargo.toml
``toml`
[dependencies]
tauri-plugin-android-fs = { version = "=25.1.2", features = ["legacy_storage_permission"] }
Next, register this plugin in your Tauri project:
src-tauri/src/lib.rs
`rust`
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_android_fs::init()) // This
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
Then, set the APIs that can be called from the Javascript:
src-tauri/capabilities/*.json`json`
{
"permissions": [
"android-fs:default"
]
}
Finally, install the JavaScript Guest bindings using whichever JavaScript package manager you prefer:
`bash`
pnpm add tauri-plugin-android-fs-api@25.1.2 -Eor
npm install tauri-plugin-android-fs-api@25.1.2 --save-exactor
yarn add tauri-plugin-android-fs-api@25.1.2 --exact
NOTE: Please make sure that the Rust-side tauri-plugin-android-fs and the JavaScript-side tauri-plugin-android-fs-api versions match exactly.
`typescript
import { AndroidFs, AndroidPublicGeneralPurposeDir } from 'tauri-plugin-android-fs-api';
/**
* Save the text to '~/Download/MyApp/{fileName}'
*/
async function saveText(fileName: string, data: string): Promise
const baseDir = AndroidPublicGeneralPurposeDir.Download;
const relativePath = MyApp/${fileName};
const mimeType = "text/plain";
const uri = await AndroidFs.createNewPublicFile(baseDir, relativePath, mimeType);
try {
await AndroidFs.writeTextFile(uri, data);
await AndroidFs.scanPublicFile(uri);
}
catch (e) {
await AndroidFs.removeFile(uri).catch(() => {});
throw e;
}
}
`
When passing URIs to this plugin's functions, no scope configuration is required.
Some functions accept not only URIs but also absolute paths. In this case, you need to set the scope configuration, like in plugin-fs.
src-tauri/capabilities/*.json`json`
{
"permissions": [
{
"identifier": "android-fs:scope",
"allow": [
"$APPDATA/my-data/*/"
],
"deny": [
"$APPDATA/my-data/secret.txt"
]
}
]
}
And you can also assign a specific scope to a particular command.
src-tauri/capabilities/*.json`json`
{
"permissions": [
{
"identifier": "android-fs:allow-copy-file",
"allow": [
"$APPDATA/my-data/*/"
],
"deny": [
"$APPDATA/my-data/secret.txt"
]
}
]
}
Note: A dedicated my-data subdirectory is used because resolved directories may already contain files created by the WebView system or other Tauri plugins. This helps prevent file name collisions and unintended access.
- AndroidFs.showOpenDirPicker
- AndroidFs.showSaveFilePicker
- AndroidFs.readDir
- AndroidFs.createNewFile
- AndroidFs.createDirAll
- AndroidFs.createNewPublicFile
- AndroidFs.createNewPublicImageFile
- AndroidFs.createNewPublicVideoFile
- AndroidFs.createNewPublicAudioFile $3
- AndroidFs.getFsPath
- AndroidFs.getMetadata
- AndroidFs.getName
- AndroidFs.getType
- AndroidFs.getMimeType
- AndroidFs.getByteLength
- AndroidFs.getThumbnail
- AndroidFs.getThumbnailBase64
- AndroidFs.getThumbnailDataUrl $3
- AndroidFs.openReadFileStream
- AndroidFs.openReadTextFileLinesStream
- AndroidFs.openWriteFileStream
- AndroidFs.readFile
- AndroidFs.readTextFile
- AndroidFs.writeFile
- AndroidFs.writeTextFile$3
- AndroidFs.copyFile
- AndroidFs.truncateFile
- AndroidFs.renameFile
- AndroidFs.renameDir
- AndroidFs.removeFile
- AndroidFs.removeEmptyDir
- AndroidFs.removeDirAll
- AndroidFs.scanPublicFile
- AndroidFs.setPublicFilePending$3
- AndroidFs.checkPickerUriPermission
- AndroidFs.persistPickerUriPermission
- AndroidFs.checkPersistedPickerUriPermission
- AndroidFs.releasePersistedPickerUriPermission
- AndroidFs.releaseAllPersistedPickerUriPermissions
- AndroidFs.hasPublicFilesPermission
- AndroidFs.requestPublicFilesPermission$3
- AndroidFs.showViewFileDialog
- AndroidFs.showViewDirDialog
- AndroidFs.showShareFileDialog$3
- isAndroid
- getAndroidApiLevel
For simplicity, some features and detailed options of the API have been omitted. If you need them, please consider using the
tauri-plugin-android-fs` on the Rust side. * MIT license
* Apache License (Version 2.0)
at your option.