KArchiver
v1.3-betaAbout Application
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 andarchive: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,/systemand other users' storage. Root is required for/dataand 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.
Release Notes & Changelog
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;
extractFilterednow 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
.partfolder 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
Declared Android Permissions
12 totalShizuku API Permissions
This application connects to the Shizuku service to execute system-level operations with ADB elevated privileges.
Standard Android Permissions
Specifications
Install via ShizuStore to enable automatic updates and silent installations using Shizuku.
More in File management
Other applications in this category