Skip to content

Repository files navigation

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.

About

KArchiver - Android file manager and archiver built with Kotlin and Material 3 Expressive

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages