zacharee/InstallWithOptions
45.5
Weak · 28 September 2026
2.9k
lines of production code
Kotlin
primary language
2
measurements over time
What this system is
This system is an Android application designed to install APKs and split APK archives with advanced configuration options. It leverages Shizuku or root privileges to execute installations, allowing users to specify target users, installer packages, and install reasons. The app provides a modern UI with theme customization, crash reporting, and support for importing packages via intents.
Features
Added ADI registration configuration file
A new properties file, adi-registration.properties, has been added to the app's assets. This file contains a single configuration entry, likely serving as a static identifier or key for the ADI registration process.
app/src/main/assets · medium confidence
New footer component with settings and support links
The app now includes a Footer component that provides quick access to the developer's website, GitHub repository, Crowdin translation project, Mastodon profile, Patreon page, and a PayPal donation link. It also features a settings dialog allowing users to change the app theme, toggle crash report collection (Bugsnag), and clear the app cache, along with a supporters dialog that displays a list of Patreon supporters.
app/src/main/java/dev/zwander/installwithoptions/components · high confidence
User-selectable theme and new dropdown UI component
Users can now choose between System, Dark, and Light themes via the app settings, replacing the previous default behavior that relied solely on system settings. This change also introduces a custom DropdownMenuSelector component that displays a checkmark next to the currently selected option, and removes the hardcoded Material 3 color and typography definitions in favor of dynamic color schemes and default typography.
app/src/main/java/dev/zwander/installwithoptions/ui · high confidence
Behavioural changes
App initialization and main activity restructured with crash reporting and permission handling
The application now initializes Bugsnag crash reporting dynamically based on user settings in the Application class, moving HiddenApiBypass setup there as well. The MainActivity has been refactored from a ComponentActivity to an AppCompatActivity, integrating an ElevatedPermissionHandler for managing Shizuku/root permissions and adding support for handling incoming intents (share targets) to import APKs via URIs.
app/src/main/java/dev/zwander/installwithoptions · high confidence
Refactor install options to use reflection and add new configuration capabilities
The data layer for install options has been refactored to replace direct usage of hidden Android APIs with reflection, ensuring compatibility across Android versions. This change introduces new user-facing configuration options, including the ability to specify a custom installer package name and select an install reason (such as policy, device restore, or user-initiated). Additionally, the app now supports a theme selector (Light, Dark, System) and allows users to enable or disable crash reporting. The \ForcePermissionPrompt\ option has been removed as it is not functional with the Shell interface, and the \DisableAllowedApexUpdateCheck\ logic has been adjusted for Android 12/13 compatibility.
app/src/main/java/dev/zwander/installwithoptions/data · high confidence
Refactored elevated permission handling and installer utilities
The app now uses a new ElevatedPermissionHandler to manage Shizuku and root permissions, providing specific UI prompts to download or open Shizuku when unavailable. The installer logic has been refactored to support specifying the target user and installer package name, with improved error reporting for specific failure codes like missing ABIs or existing packages. Additionally, the app now supports importing split APKs (XAPK, APKS, APKM) and uses reflection to access hidden APIs for better compatibility across Android versions.
app/src/main/java/dev/zwander/installwithoptions/util · high confidence
Rework AIDL interface for install options and error handling
The AIDL interface for the Shizuku service has been updated to improve how installation options and errors are communicated. The \IShellInterface\ now accepts an \IOptionsApplier\ interface and an integer array for options instead of a generic list, allowing for more structured option application. It also introduces an \IErrorCallback\ to return specific error class names alongside messages, replacing the previous generic error handling. Additionally, the interface now supports specifying a target user ID and an installer package name during installation, and includes new methods to retrieve available user IDs and check for root/system privileges. The old \IContentResolver\, \IRemoteInputStream\, and \IRemoteOutputStream\ interfaces have been removed, indicating a shift away from passing URIs and remote streams directly to the service.
app/src/main/aidl · high confidence
Dependencies
Gradle wrapper upgraded to version 9.5.1
The Gradle wrapper configuration has been updated to use Gradle 9.5.1 (previously 8.4). This ensures that builds will now execute using the newer Gradle distribution, which may include performance improvements, new features, and bug fixes compared to the previous version.
gradle · high confidence
Upgrade to Android SDK 37, Kotlin 2.4.0, and AGP 9.2.1 with new dependencies
The app has been upgraded to target Android SDK 37 and compile with Kotlin 2.4.0 and Android Gradle Plugin 9.2.1, requiring Java 17 compatibility. This update introduces several new libraries including Bugsnag for crash reporting (with NDK and ANR plugins excluded to reduce size), libsu for root access, zip4j for archive handling, and Patreon support retrieval. The build configuration also disables dependency metadata inclusion in APKs and AABs, and updates the Kotlin Compose plugin usage.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 47 → 46 (-1.6)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 98 → 98 (+0.0)
- Architecture 100 → 88 (-12.3)
- Maturity 36 → 36 (+0.0)
- Readiness 24 → 24 (+0.0)
- Security 100 → 100 (+0.0)
Resolved (1)
- Documentation: no installation or build instructions (README.md)
New (1)
- No ADRs found
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
zacharee/InstallWithOptions was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit bd26a0fb26ec77bdbc0dd1fe3bb6890098e7e5f1 — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.