Skip to content
CAI
Software that uses CAICheck a score

zacharee/InstallWithOptions

45.5

Weak · 28 September 2026

2.9k

lines of production code

Kotlin

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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

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.