Universal Installer is a modern Android package manager that handles what the default installer can't.
Install APK, APK+, APKS, XAPK, APKM (with split APKs and OBB files), download packages from URLs, manage installed apps, and silent-install via Shizuku — all in one Material 3 app. Now with Android TV support.
Website · Privacy · Terms
- Expressive UI — Beautiful, bouncy spring animations (inspired by InstallerX-Revived) that make the dialog card "living" and responsive.
- Brand Identity — Sleek default Orange theme for a premium, high-contrast look (Dynamic Color still available as an option).
- Multi-format —
.apk,.apk+,.apks,.xapk,.apkmwith split APK handling (via Ackpine) - Merge split APKs — Group multiple individual
.apkfiles (e.g. from a manual split extraction) into a single installation session. Perfect for installing apps served as a collection of separate splits. - Modern Android Support — Fully compatible with Android 14, 15, 16, and ready for Android 17. Fixes common parsing errors (e.g.
aconfig_flags.pb) found on newer system versions. - Package preview — App name, icon, version, package, size, min/target SDK, supported ABIs, languages, permissions, OBB count, split count — shown in a bottom sheet before you commit
- Three local pick modes — Find automatic (scans device storage), Browse packages (APK/XAPK/APKS/APKM only), Browse all files
- Remote download — Paste a URL, download package directly. Files land in
/sdcard/Download/UniversalInstaller/with their Content-Disposition name so they're easy to re-find in any file manager - Download history — Every download is logged; re-install later, copy the source URL, or delete from the dedicated history screen
- Intent handling — Open APK/XAPK files from Chrome downloads, Gmail attachments, Telegram, or any file manager — even when the URL has no extension
- Bundle-embedded OBBs — XAPK/APKM/APKS archives containing
.obbfiles are auto-detected and copied toAndroid/obb/<package>/after the APK installs - Standalone attach — Pick a base APK, then attach one or more
.obbfiles via the preview sheet; they're installed alongside - Runs in a foreground worker — OBB copy survives app closure, with progress on the notification shade
- Three write strategies — Falls back in order based on what the device permits:
- Direct I/O (pre-Android 11)
- Shizuku (
shellUID can write to any app's OBB dir on modern Android) - SAF tree grant (user grants access to
Android/obb/<pkg>/once per package; reused on subsequent installs)
- VirusTotal integration — Auto SHA-256 hash lookup on every picked file; if VirusTotal doesn't know the file yet, optionally upload it for a full multi-engine scan (supports files up to 650 MB via VirusTotal's large-file endpoint)
- Clear verdict — See engine counts (malicious / suspicious / harmless / undetected) before you install
When Root access or Shizuku is enabled, unlocks:
- Installer Profiles — Save and reuse custom install configurations (installer package spoofing, privileged flags, targeted users) per app or globally.
- Silent install / uninstall — No system confirmation prompt
- Replace existing, Allow downgrade, Grant all requested permissions, Allow test packages, Bypass low target SDK block, Install for all users
- Set install source — Spoof the installer package name (Google Play, Aurora, F-Droid, Amazon, Samsung, Huawei, Xiaomi presets, or custom) so apps with "installed from Play Store" checks accept your sideload
- Send to TV — Quickly transfer and install packages on your Android TV by scanning a QR code.
- Built-in HTTP server — Share and manage your packages across a local Wi-Fi network from any browser.
- Web dashboard — Download APKs straight to your PC or upload new packages directly to your phone.
- Live tracking — Real-time progress updates visible inside the app as files transfer.
- PIN security — Set an optional 4–8 digit PIN code to restrict local access to your shared folder.
- Full app list — Browse user apps (system apps optional)
- Rich metadata — App name, package, version, APK size, first install date, last used time
- Sort — By Name / Size / Installed date / Last used — each with ascending/descending toggle
- Batch select — Long-press to enter selection mode, uninstall many at once
- Filter sheet — Tap FAB for sort/filter options; long-press FAB to scroll to top
- Usage access hint — "Last used" sort prompts user to grant the Usage Access permission only when needed
- Uninstall logs — Separate log screen for every uninstall attempt (success / failure with reason)
- Storage card on Install screen — At-a-glance internal storage usage (free / total, color-coded warning at 75% / 90%)
- Install history — Every install attempt logged with app name, package, version, success/failure, and error reason
- Material 3 — Orange brand theme (default) + Dynamic color + Light / Dark / System theme
- Multi-language — Arabic, German, Greek, English, Spanish, French, Hindi, Indonesian, Italian, Japanese, Korean, Portuguese (BR), Russian, Turkish, Ukrainian, Vietnamese, Chinese
- Progress notifications — Download, install, and OBB copy all surface their progress in the notification shade
- Kotlin + Jetpack Compose — UI
- Ackpine — Package install/uninstall with split APK, Shizuku, and libsu plugins
- Shizuku — Privileged operations via ADB/root
- Ktor — HTTP client for VirusTotal and remote downloads
- WorkManager — Foreground worker for OBB copy (survives app process death)
- Room — Local DB for install / uninstall / download history
- Koin — Dependency injection
- DataStore — Preferences storage
- Coil 3 — App icon loading
- Android Studio
- JDK 17+ (required by AGP 8.11)
- Android SDK 36
The project is a multi-module Gradle build:
| Module | Type | What it is |
|---|---|---|
:app |
application | The phone/tablet app (the main, shipping app) |
:tv |
application | The Android TV (10-foot, D-pad) app |
:core |
library | Shared, UI-agnostic install/manage engine consumed by :app/:tv |
A single distribution ships Shizuku, Root (libsu), and the default system installer together — the old
store/fullproduct flavors were removed.
- Clone the repository:
git clone https://github.com/pass-with-high-score/universal-installer.git cd universal-installer - Open the project in Android Studio
- Pick the
app(phone) ortvrun configuration, sync Gradle, and run on a device (an emulator works for most features except Shizuku-backed install)
# Phone app
./gradlew :app:assembleDebug
./gradlew :app:assembleRelease
# Android TV app
./gradlew :tv:assembleDebug
./gradlew :tv:assembleRelease
# Release App Bundle (phone + TV)
./gradlew assembleBundleRelease
# Everything at once
./gradlew assembleDebug# Install dependencies
bundle install
# Build debug APK
bundle exec fastlane build_debug
# Build release APK
bundle exec fastlane build_release
# Deploy beta to Firebase App Distribution
bundle exec fastlane beta
# Deploy to Play Store internal track
bundle exec fastlane internal
# Bump version code
bundle exec fastlane bump_version
# Bump version code + name
bundle exec fastlane bump_version version_name:"2.0"- Install Shizuku on your device
- Start the Shizuku service via ADB (or via the Shizuku app if rooted)
- Open Universal Installer → Settings → Installation → Shizuku Backend → grant permission when prompted
- Optional: enable Set install source to pick the installer package name apps will see
- Get a free API key at virustotal.com/gui/my-apikey
- Settings → Security → VirusTotal API Key → paste key
- Every picked APK is hashed and looked up automatically; unknown files can be uploaded on demand from the preview sheet
- Android 11+: grant All files access when prompted (used for
Find automaticdevice scan and for the direct-write OBB path). If you decline, OBB copy falls back to Shizuku or a per-package SAF tree grant - Pre-Android 11: falls back to legacy
READ/WRITE_EXTERNAL_STORAGE - Usage access (optional, Uninstall screen only): grant when you tap the "Last used" sort option — enables sorting and date metadata per row
Pull requests and issue reports are welcome. Help us improve Universal Installer!
- Found a bug? Open an issue
- Want a feature? Start a discussion or submit a PR
- Translation fixes / new locales also welcome
If Universal Installer saves you time, consider supporting the project. Sponsorships help cover maintenance, new features, and keeping the app free.
This project is licensed under the GNU General Public License v3.0 only (GPL-3.0-only). You are free to use, modify, and distribute it. See the full LICENSE file for details.
- Built and maintained by Nguyen Quang Minh





