ShizuStore

KArchiver

sysrv64

1.3-beta · GitHub

Download APK
File management Android 8.0+ 1 week ago GPL-3.0
330 ShizuStore
672 GitHub
9 Stars
29 MB Size

More about this app

Android file manager built around archives: browse storage, open and edit ZIP/TAR/7Z in place, search inside files and archives, with an optional Shizuku or root engine for restricted paths

KArchiver

KArchiver

Android file manager built around archives: browse storage, open archives without extracting, edit ZIP/TAR/7Z in place, and search inside files and archives. The UI is Jetpack Compose (Material 3 Expressive); all archive work is done by a Rust core over JNI. Android 8.0+ (API 26), arm64-v8a / x86_64, no internet permission.

Features

  • Storage browser: volumes (internal / SD / USB), list and grid, sorting, hidden files, multi-select (hold an item and swipe across it to select a range), copy / cut / paste, favorites, storage usage carousel.
  • Real thumbnails for images (JPG, PNG, WebP, GIF, SVG and more) and a frame from videos, with a placeholder icon for anything broken or unsupported.
  • Customizable navigation drawer: drag a tab from its right edge to reorder it, hold a tab to remove it, hold any empty spot in the drawer to add a tab back. Pinned favorites can be reordered the same way.
  • Recents: the newest files and folders from every storage volume in one list.
  • Archive explorer: browse ZIP, 7Z, TAR family and RAR without extracting; in-place add, rename and delete for ZIP, TAR family and 7Z.
  • Copy and extract with conflict handling: replace, skip, or keep both (name (1).ext).
  • Extract dialog with a destination chooser: into the current folder, into a new folder named after the archive, or into any folder you pick, plus an option to delete the archive afterwards.
  • Opening an archive from another app jumps to its folder and shows an action sheet (Preview, Extract, Verify, Open with, Share, Properties, Copy path).
  • Long operations run in a foreground service with progress, speed, ETA, cancel and a stall watchdog.
  • Search by name, extension, date, size and type, plus content: for file or entry contents and archive: for entry names inside archives.
  • File properties: permissions, rename, and modified date with a Material 3 date picker.
  • Optional Trash: deleted files are moved aside instead of erased, with restore, delete forever and empty Trash from the drawer.
  • Optional Shizuku or root engine for restricted paths, SAF fallback when All files access is denied.
  • Optional system browsing (off by default): a .. parent entry at the top of the list lets you climb above internal storage into /, /data, /data/data, /vendor, /system and other users' storage. Root is required for /data and app data.
  • Optional auto-refresh (off by default): watches the open folder and loads new, changed or deleted files automatically, without pull-to-refresh. Works in folders the app can read directly.
  • Optional quoted copy path (off by default): copied paths are wrapped in single quotes for shell scripts and Termux.
  • Optional equal grid cells (off by default): every grid cell gets the same size and long names scroll instead of being cut off.
  • Optional history of visited folders and files in a local Room database.
  • Diagnostics: Settings → About → Save logs writes the app's warnings and errors plus the Rust log into one file under Downloads/KArchiver.

Formats

Action Formats
Browse and extract ZIP, 7Z, RAR, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, TAR.ZST, TAR.LZ4, GZ, BZ2, XZ, ZST, LZ4
Create ZIP, 7Z, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, TAR.ZST, RAR (packing requires unlocked RAR write)
Edit in place ZIP, TAR family, 7Z
Read only RAR, single-stream archives (GZ, BZ2, XZ, ZST, LZ4)
Passwords create and open ZIP, 7Z, RAR

Build

Needs JDK 17, Android SDK with compileSdk 37 and build-tools 37.0.0, NDK 28.2.13676358, Rust 1.98.1 (rust/rust-toolchain.toml) and cargo-ndk.

cargo install cargo-ndk
rustup target add aarch64-linux-android x86_64-linux-android

cd rust
cargo ndk -t arm64-v8a -t x86_64 --platform 26 -o ../app/src/main/jniLibs build --lib
cd ..
./gradlew :app:assembleDebug

APK: app/build/outputs/apk/debug/app-debug.apk. Tests:

./gradlew :app:testDebugUnitTest
cd rust && cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test

CI, releases and signing

.github/workflows/build.yml builds on pushes to main, on pull requests, and on demand. Debug APKs are signed with a throwaway keystore generated for every run; release APKs are built only on pushes and signed with the keystore kept in repository secrets. Signing material is read from KARCHIVER_* environment variables, so nothing secret is committed, and pull requests never touch it. The run summary lists the size and SHA-256 of each artifact.

APKs are available in two places: as workflow artifacts under Actions, and attached to tagged versions on the Releases page. Release entries list the file names, sizes and SHA-256 values.

License

Application (app/): GPL-3.0-only, see LICENSE. Rust core (rust/): Apache-2.0, see rust/LICENSE.

Questions and answers: QA.md.

Close

How Shizuku is used

Can browse restricted folders, delete files, create folders, change permissions, and open and extract archives there via `Shizuku` user service.

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

With Shizuku enabled the app can manage files and archives inside restricted system paths through a privileged file service.

  • Browse protected folders: list files, sizes, dates and permissions in folders the app cannot normally read, shown directly in the file browser and search.
  • Delete protected files: remove files and folders in restricted paths when the normal delete fails.
  • Create protected folders: create new folders in restricted paths when normal creation fails.
  • Change file permissions: apply a permission mode chosen in file properties to files in restricted paths with a privileged chmod operation.
  • Open protected files: copy unreadable files to a temporary cache through a privileged read handle so they can be opened and viewed.
  • Handle protected archives: list archive contents, extract archives and verify archive integrity for archives stored in restricted paths by reading them through a privileged file handle.

Android APIs or commands used

  • java.io.File.listFiles
  • java.io.File.mkdirs
  • java.io.File.delete
  • android.system.Os.stat
  • android.system.Os.chmod
  • android.os.ParcelFileDescriptor.open

Notable details

Normal file access is tried first and the privileged path is used only when files are unreadable or operations fail, with Storage Access Framework handling also present for shared storage.

Close

Changelog

What's new for version 1.3-beta

Processes tab and parallel archive operations

  • Up to three archive operations run at the same time (extract / compress); further requests queue in order and start automatically when a slot frees. Per-task progress, speed and ETA, a stall watchdog, and one aggregated foreground notification with per-task completion alerts.
  • New hidden Processes tab in the navigation drawer: hold any empty spot in the drawer and pick Add Processes. It lists running, queued and finished tasks with live progress — cancel a single task, cancel everything, or clear finished ones — while you keep browsing files or start more work.
  • Archive-explorer compression and multi-entry extracts feed the same task registry, so operations keep running across navigation.

Fixes and improvements

  • 7z editing works: add, rename, delete and entry metadata changes, including password-protected archives — the docs no longer promise what the code rejected.
  • TAR editing streams instead of buffering the whole archive (no 256 MB cap, no OOM on big archives); added files keep their real modification time; hard links no longer abort extraction on Android storage (falls back to a copy).
  • ZIP edits are much faster: untouched entries keep their compressed bytes instead of being decompressed and recompressed; AES-256 entries stay byte-identical across edits (fixes re-encryption with a fresh salt on every edit); true PKZIP multi-disk splits now fail with a clear message instead of a parser error.
  • Passwords cross JNI as wiped byte arrays with a drop guard that wipes on every path, including panics; extractFiltered now returns its status code consistently on both sides of the bridge.
  • Deep search marks visited directories by canonical path, so symlink cycles can no longer loop forever.
  • Root shell no longer deadlocks when a command prints output without a trailing newline (marker and handshake are emitted on a fresh line and matched robustly).
  • Shizuku write file descriptors can create and truncate files.
  • Open with falls back to staging in the app cache when FileProvider cannot map a path (previously a silent no-op).
  • Trash directory moves stage into a .part folder and rename, so a killed process cannot leave a half-copied directory looking complete.
  • QA now lists TAR.LZ4 among the editable formats.

app-release.apk — arm64-v8a + x86_64, minSdk 26, signed with the release key (updates over 1.2-beta, versionCode 3).

  • size: 29639716 bytes
  • sha256: b2bb97f304e4e12ec8fb20f9c00e2e4506222c5c04fbadefb67396823d8184c7
Close

Permissions

12 permissions requested

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.READ_MEDIA_IMAGES
  • android.permission.READ_MEDIA_VIDEO
  • android.permission.READ_MEDIA_AUDIO
  • android.permission.MANAGE_EXTERNAL_STORAGE
  • android.permission.VIBRATE
  • android.permission.WAKE_LOCK
  • android.permission.FOREGROUND_SERVICE
  • android.permission.FOREGROUND_SERVICE_DATA_SYNC
  • com.kerneldroid.karchiver.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
  • moe.shizuku.manager.permission.API_V23
Close