{"id":48974326,"url":"https://github.com/pass-with-high-score/universal-installer","last_synced_at":"2026-05-06T07:04:43.451Z","repository":{"id":343361047,"uuid":"1027943375","full_name":"pass-with-high-score/universal-installer","owner":"pass-with-high-score","description":"A modern Android app for installing and managing APK packages with split APK support, silent install via Shizuku, and VirusTotal malware scanning.","archived":false,"fork":false,"pushed_at":"2026-04-18T06:42:01.000Z","size":1467,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-18T08:37:38.953Z","etag":null,"topics":["android","apk-installer","jetpack-compose","shizuku"],"latest_commit_sha":null,"homepage":"https://universal-installer.pwhs.app/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pass-with-high-score.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["pass-with-high-score"]}},"created_at":"2025-07-28T19:14:09.000Z","updated_at":"2026-04-18T07:17:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pass-with-high-score/universal-installer","commit_stats":null,"previous_names":["pass-with-high-score/universal-installer"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pass-with-high-score/universal-installer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Funiversal-installer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Funiversal-installer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Funiversal-installer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Funiversal-installer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pass-with-high-score","download_url":"https://codeload.github.com/pass-with-high-score/universal-installer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pass-with-high-score%2Funiversal-installer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32287398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"online","status_checked_at":"2026-04-26T02:00:05.962Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","apk-installer","jetpack-compose","shizuku"],"created_at":"2026-04-18T08:04:58.738Z","updated_at":"2026-04-26T06:01:04.671Z","avatar_url":"https://github.com/pass-with-high-score.png","language":"Kotlin","funding_links":["https://github.com/sponsors/pass-with-high-score"],"categories":["Apps","May 06, 2026","App Management and Control"],"sub_categories":["Installer \u0026 app stores","Package Management and Installation"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/icon.png\" width=\"128\" height=\"128\"\u003e\n  \u003ch1\u003eUniversal Installer\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eUniversal Installer\u003c/strong\u003e is a modern Android package manager that handles what the default installer can't.\u003c/p\u003e\n  \u003cp\u003eInstall \u003cstrong\u003eAPK, APKS, XAPK, APKM\u003c/strong\u003e (with split APKs and OBB files), download packages from URLs, manage installed apps, and silent-install via Shizuku — all in one Material 3 app.\u003c/p\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/universal-installer/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/pass-with-high-score/universal-installer\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/universal-installer/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/pass-with-high-score/universal-installer/total\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ch4\u003eDownload\u003c/h4\u003e\n  \u003ca href=\"https://play.google.com/store/apps/details?id=app.pwhs.universalinstaller\"\u003e\n    \u003cimg src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" height=\"80\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://f-droid.org/packages/app.pwhs.universalinstaller\"\u003e\n    \u003cimg src=\"https://fdroid.gitlab.io/artwork/badge/get-it-on.png\" alt=\"Get it on F-Droid\" height=\"80\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/pass-with-high-score/universal-installer/releases\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/NeoApplications/Neo-Backup/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png\" height=\"80\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://apt.izzysoft.de/fdroid/index/apk/app.pwhs.universalinstaller\"\u003e\n    \u003cimg src=\"https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroidButtonGreyBorder_nofont.png\" height=\"54\" alt=\"Get it at IzzyOnDroid\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003ca href=\"https://universal-installer.pwhs.app/\"\u003eWebsite\u003c/a\u003e\n  ·\n  \u003ca href=\"https://universal-installer.pwhs.app/privacy\"\u003ePrivacy\u003c/a\u003e\n  ·\n  \u003ca href=\"https://universal-installer.pwhs.app/terms\"\u003eTerms\u003c/a\u003e\n\u003c/div\u003e\n\n---\n\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg\" width=\"200\"\u003e\n  \u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg\" width=\"200\"\u003e\n\u003c/div\u003e\n\n---\n\n## Features\n\n### Install\n\n* **Multi-format** — `.apk`, `.apks`, `.xapk`, `.apkm` with split APK handling (via [Ackpine](https://ackpine.solrudev.ru/))\n* **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\n* **Three local pick modes** — Find automatic (scans device storage), Browse packages (APK/XAPK/APKS/APKM only), Browse all files\n* **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\n* **Download history** — Every download is logged; re-install later, copy the source URL, or delete from the dedicated history screen\n* **Intent handling** — Open APK/XAPK files from Chrome downloads, Gmail attachments, Telegram, or any file manager — even when the URL has no extension\n\n### OBB support\n\n* **Bundle-embedded OBBs** — XAPK/APKM/APKS archives containing `.obb` files are auto-detected and copied to `Android/obb/\u003cpackage\u003e/` after the APK installs\n* **Standalone attach** — Pick a base APK, then attach one or more `.obb` files via the preview sheet; they're installed alongside\n* **Runs in a foreground worker** — OBB copy survives app closure, with progress on the notification shade\n* **Three write strategies** — Falls back in order based on what the device permits:\n  1. Direct I/O (pre-Android 11)\n  2. Shizuku (`shell` UID can write to any app's OBB dir on modern Android)\n  3. SAF tree grant (user grants access to `Android/obb/\u003cpkg\u003e/` once per package; reused on subsequent installs)\n\n### Security\n\n* **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)\n* **Clear verdict** — See engine counts (malicious / suspicious / harmless / undetected) before you install\n\n### Shizuku \u0026 Root power-user features\n\nWhen Root access or Shizuku is enabled, unlocks:\n\n* **Silent install / uninstall** — No system confirmation prompt\n* **Replace existing**, **Allow downgrade**, **Grant all requested permissions**, **Allow test packages**, **Bypass low target SDK block**, **Install for all users**\n* **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\n\n### Sync \u0026 Share (LAN File Server)\n\n* **Built-in HTTP server** — Share and manage your packages across a local Wi-Fi network from any browser\n* **Web dashboard** — Download APKs straight to your PC or upload new packages directly to your phone\n* **Live tracking** — Real-time progress updates visible inside the app as files transfer\n* **PIN security** — Set an optional 4–8 digit PIN code to restrict local access to your shared folder\n\n### Uninstall / app manager\n\n* **Full app list** — Browse user apps (system apps optional)\n* **Rich metadata** — App name, package, version, APK size, first install date, last used time\n* **Sort** — By Name / Size / Installed date / Last used — each with ascending/descending toggle\n* **Batch select** — Long-press to enter selection mode, uninstall many at once\n* **Filter sheet** — Tap FAB for sort/filter options; long-press FAB to scroll to top\n* **Usage access hint** — \"Last used\" sort prompts user to grant the Usage Access permission only when needed\n* **Uninstall logs** — Separate log screen for every uninstall attempt (success / failure with reason)\n\n### Device utilities\n\n* **Storage card on Install screen** — At-a-glance internal storage usage (free / total, color-coded warning at 75% / 90%)\n* **Install history** — Every install attempt logged with app name, package, version, success/failure, and error reason\n\n### Other\n\n* **Material 3** — Dynamic color + Light / Dark / System theme\n* **Multi-language** — Arabic, German, English, Spanish, French, Hindi, Indonesian, Italian, Japanese, Korean, Portuguese (BR), Russian, Turkish, Vietnamese, Chinese\n* **Progress notifications** — Download, install, and OBB copy all surface their progress in the notification shade\n\n---\n\n## Tech Stack\n\n* **Kotlin** + **Jetpack Compose** — UI\n* **[Ackpine](https://ackpine.solrudev.ru/)** — Package install/uninstall with split APK, Shizuku, and libsu plugins\n* **[Shizuku](https://shizuku.rikka.app/)** — Privileged operations via ADB/root\n* **Ktor** — HTTP client for VirusTotal and remote downloads\n* **WorkManager** — Foreground worker for OBB copy (survives app process death)\n* **Room** — Local DB for install / uninstall / download history\n* **Koin** — Dependency injection\n* **DataStore** — Preferences storage\n* **Compose Destinations** — Type-safe navigation\n* **Coil 3** — App icon loading\n\n---\n\n## Build Instructions\n\n### Requirements\n\n* [Android Studio](https://developer.android.com/studio)\n* Java 17+\n* Android SDK 36\n\n### Steps\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/pass-with-high-score/universal-installer.git\n   cd universal-installer\n   ```\n2. Open the project in Android Studio\n3. Sync Gradle and run on a device (emulator works for most features except Shizuku-backed install)\n\n### Gradle\n\nUniversal Installer uses two product flavors: `store` (F-Droid/Play Store compliant, no bundled Root binaries) and `full` (All features, including Root backend).\n\n```bash\n# Debug builds\n./gradlew assembleStoreDebug\n./gradlew assembleFullDebug\n\n# Release builds\n./gradlew assembleStoreRelease\n./gradlew assembleFullRelease\n```\n\n### Fastlane\n\n```bash\n# Install dependencies\nbundle install\n\n# Build debug APK\nbundle exec fastlane build_debug\n\n# Build release APK\nbundle exec fastlane build_release\n\n# Deploy beta to Firebase App Distribution\nbundle exec fastlane beta\n\n# Deploy to Play Store internal track\nbundle exec fastlane deploy_internal\n\n# Bump version code\nbundle exec fastlane bump_version\n\n# Bump version code + name\nbundle exec fastlane bump_version version_name:\"2.0\"\n```\n\n---\n\n## Configuration\n\n### Shizuku (silent install, install source spoofing, OBB copy)\n\n1. Install [Shizuku](https://shizuku.rikka.app/) on your device\n2. Start the Shizuku service via ADB (or via the Shizuku app if rooted)\n3. Open Universal Installer → **Settings → Installation → Shizuku Backend** → grant permission when prompted\n4. Optional: enable **Set install source** to pick the installer package name apps will see\n\n### VirusTotal\n\n1. Get a free API key at [virustotal.com/gui/my-apikey](https://www.virustotal.com/gui/my-apikey)\n2. **Settings → Security → VirusTotal API Key** → paste key\n3. Every picked APK is hashed and looked up automatically; unknown files can be uploaded on demand from the preview sheet\n\n### Storage permissions (for OBB copy + device scan)\n\n* **Android 11+**: grant **All files access** when prompted (used for `Find automatic` device scan and for the direct-write OBB path). If you decline, OBB copy falls back to Shizuku or a per-package SAF tree grant\n* **Pre-Android 11**: falls back to legacy `READ/WRITE_EXTERNAL_STORAGE`\n* **Usage access** (optional, Uninstall screen only): grant when you tap the \"Last used\" sort option — enables sorting and date metadata per row\n\n---\n\n## Contributing\n\nPull requests and issue reports are welcome. Help us improve Universal Installer!\n\n* Found a bug? [Open an issue](https://github.com/pass-with-high-score/universal-installer/issues)\n* Want a feature? Start a discussion or submit a PR\n* Translation fixes / new locales also welcome\n\n---\n\n## Sponsor\n\nIf Universal Installer saves you time, consider supporting the project. Sponsorships help cover\nmaintenance, new features, and keeping the app free.\n\n[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4%EF%B8%8F-red?logo=github-sponsors)](https://github.com/sponsors/pass-with-high-score)\n\n---\n\n## License\n\n[![GPL-3.0-only](https://img.shields.io/badge/License-GPL--3.0--only-blue.svg)](https://spdx.org/licenses/GPL-3.0-only.html)\n\nThis project is licensed under the **GNU General Public License v3.0 only (GPL-3.0-only)**.\nYou are free to use, modify, and distribute it.\nSee the full [LICENSE](LICENSE) file for details.\n\n---\n\n## Credits\n\n* Built and maintained by [Nguyen Quang Minh](https://github.com/nqmgaming)\n\n---\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=pass-with-high-score/universal-installer\u0026type=Date)](https://www.star-history.com/#pass-with-high-score/universal-installer\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpass-with-high-score%2Funiversal-installer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpass-with-high-score%2Funiversal-installer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpass-with-high-score%2Funiversal-installer/lists"}