ShizuStore

UnscopeMyData

kepatotorica

0.14.0 · GitHub

Download APK
File management Android 8.0+ 4 weeks ago GPL-3.0
52 ShizuStore
407 GitHub
23 Stars
9 MB Size

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

  1. Add a Folder: Pick a folder on your device (defaults to storage/emulated/0/android/data/ but it can be any folder).
  2. Assign a Name: Give it a unique identifier for the unscoped directory.
  3. 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.
Close

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 -p and cp -rf shell commands.
  • Restore data to scoped storage: the unscoped copy is copied back into its original scoped location with privileged mkdir -p and cp -rf shell 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 -rf
  • mkdir -p
  • rm -rf
  • ls -1
  • cat
  • cat >
  • [ -d ]
  • sh -c
  • Runtime.getRuntime().exec
  • java.io.File.exists
  • java.io.File.isDirectory
  • java.io.File.readText
  • java.io.File.writeText
  • java.io.File.deleteRecursively
  • java.io.File.lastModified
  • java.io.File.mkdirs
  • android.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.

Close

Changelog

What's new for version 0.14.0

Close

Permissions

5 permissions requested

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.MANAGE_EXTERNAL_STORAGE
  • com.kepat.unscopemydata.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
Close