UnscopeMyData
0.14.0 · GitHub
More about this app
Moves app data in and out of scoped storage folders using Shizuku for elevated file access.
UnscopeMyData
UnscopeMyData is an Android utility designed to help users bypass "Scoped Storage" limitations for specific app data folders. It uses Shizuku to perform elevated filesystem operations, allowing you to sync data between protected /Android/data/ directories and a public "Unscoped" directory on your internal storage.
Why?
I use emulators on my devices and it is a pain to sync the data between all of them. I use syncthing fork, which allows me to sync data across devices, but not in any data folder. This app allows me to quickly move all data that I care about into a folder that syncthing can access, then on my other device allows me to write that same data where it belongs.
Features
- Scoped Storage Bypass: Access and sync folders usually restricted by Android.
- Shizuku Integration: Uses a system-level privileged process for file operations.
- Visual Status: Real-time Shizuku connectivity status in Settings.
- Bare Bones UI: Very simple UI with little customization.
- Portable Folder: Allowing for syncthing, manual copy and paste, or other syncing services to quickly transfer many different folders at once without having to navigate individual apps menus.
Prerequisites
- Shizuku: The Shizuku app must be installed and running on your device.
- All Files Access: The app requires the "All Files Access" permission to manage your public "Unscoped" directory.
How it Works
- Add a Folder: Pick a folder on your device (defaults to
storage/emulated/0/android/data/but it can be any folder). - Assign a Name: Give it a unique identifier for the unscoped directory.
- Sync:
data -> unscoped: Copies the protected app data to your public unscoped folder.unscoped -> data: Pushes your modified unscoped data back into the protected app folder.
Technical Details
- Built with Jetpack Compose.
- Uses AIDL for IPC with the privileged Shizuku process.
- Implements a local fallback for public storage operations to ensure reliability.
Releases & F-Droid
- GitHub Releases: Automated builds are available on the Releases page.
- F-Droid: This project includes Fastlane metadata (located in
fastlane/metadata) to be compatible with F-Droid's build system.
How Shizuku is used
Can move app data between scoped and unscoped storage and browse restricted folders via `cp -rf`, `mkdir -p`, `rm -rf` and file reads through Shizuku.
This is an AI-assisted analysis of Shizuku-related usages in the app's public source code. It is best effort, so it may not catch every single usage.
How this app uses Shizuku
UnscopeMyData uses Shizuku to access scoped storage folders that the normal app process cannot reach, moving app data in and out of an unscoped sync directory.
- Browse restricted folders: the folder picker lists contents of paths like Android/data and checks whether entries are directories through Shizuku.
- Move data to unscoped storage: a configured folder is copied from its scoped location to the unscoped sync directory with privileged
mkdir -pandcp -rfshell commands. - Restore data to scoped storage: the unscoped copy is copied back into its original scoped location with privileged
mkdir -pandcp -rfshell commands. - Manage sync manifest: the app reads, writes and checks the modification time of its manifest file in shared storage through Shizuku.
- Delete unscoped copy: removing a synced folder deletes its unscoped directory through Shizuku.
Android APIs or commands used
cp -rfmkdir -prm -rfls -1catcat >[ -d ]sh -cRuntime.getRuntime().execjava.io.File.existsjava.io.File.isDirectoryjava.io.File.readTextjava.io.File.writeTextjava.io.File.deleteRecursivelyjava.io.File.lastModifiedjava.io.File.mkdirsandroid.os.Environment.getExternalStorageDirectory
Notable details
The manifest file and unscoped sync directory live in shared storage, so the app tries local file access first and uses Shizuku when local access fails, and local deletion is tried before privileged deletion.
Changelog
What's new for version 0.14.0
Permissions
5 permissions requested