Desktop application for the CrabShell APK/AAB hardening tool.
- Tauri 2 (Rust backend)
- React + TypeScript + Vite (frontend)
- Material UI
- Select APK/AAB input file
- Configure output path and output format (APK/AAB/Auto)
- Configure signing (debug or custom keystore)
- Configure advanced packer flags (keep class/prefix/lib, encrypt assets, skip build/sign)
- Start/cancel hardening process
- Real-time progress and log events from backend process
- Node.js 18+
- Rust toolchain
- Python 3.10+
- Tauri system dependencies (platform-specific)
npm installnpm run devnpm run buildThis project uses a stable two-step packaging flow:
npm run build:app(Tauri builds.appbundle)npm run build:dmg(customhdiutilscript builds.dmg)
If you only need the app bundle:
npm run build:appsrc/renderer: React UIsrc/renderer/api/tauri.ts: frontend ↔ backend bridge (invoke/listen)src/shared/types.ts: shared TypeScript typessrc-tauri/src/main.rs: Tauri commands + Python subprocess orchestration
Old Electron implementation is intentionally removed and no longer maintained.
pack.py now prefers a managed toolchain directory to reduce host environment dependency:
- Default path:
$CODEX_HOME/tools/crabshell-toolchain - Override:
CRABSHELL_TOOLCHAIN_DIR=/custom/path
Managed artifacts:
bundletool-<version>.jar(auto-download)apktool-<version>.jar(auto-download whenapktoolbinary missing)uber-apk-signer-<version>.jar(auto-download fallback whenapksignerunavailable)
Signing behavior:
- First choice:
apksigner(managed path / PATH / Android SDK build-tools) - Fallback:
uber-apk-signervia managed Java runtime discovery - Debug keystore can auto-fallback to temp directory when
~/.androidis not writable