Skip to content
CAI
Software that uses CAICheck a score

jeppeman/android-jetpack-playground

66.0

Adequate · 21 September 2026

4.4k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This is an Android application that utilizes dynamic feature delivery to manage modular components like video playback and home screen navigation. The system handles the installation and activation of these features on demand, supporting multiple app stores including Google Play, Huawei, and Samsung Galaxy. It employs a service-based architecture for feature resolution and manages deep linking and state updates during the installation process.

Features

The app now supports deep linking via an AppLinkActivity that routes users to specific features, triggering installation dialogs if the feature is not yet installed. A new MissingSplitsInstallDialogFragment and its associated ViewModel handle the installation of missing splits, with UI updates reflecting the download and install states. The main activity's navigation menu dynamically adjusts based on installed features, and the install dialog now supports both feature-specific and missing-splits installation flows, including Huawei-specific error handling and dismissal logic.

app/src, libraries/common-presentation · high confidence

Behavioural changes

Migrate feature installation to GloballyDynamic and introduce ServiceLoader-based feature resolution

The common-features library now uses GloballyDynamic's GlobalSplitInstallManager instead of the standard SplitInstallManager for dynamic feature installation, which changes how install states are reported and handled. Additionally, the FeatureManager now resolves feature instances via Java's ServiceLoader rather than a local cache, and the Feature interface now requires implementations to provide a launch Intent and a main screen Fragment, enabling more flexible feature activation and navigation.

libraries/common-features · high confidence

Migrate video feature to dynamic delivery and refactor home feature to support on-demand downloads

The video feature is now delivered as an on-demand dynamic feature, replacing the previous install-time delivery. The home feature has been refactored to support downloading the video feature on demand; the home screen now checks if the video feature is installed and hides the download button if it is. A new DownloadActivity handles the installation flow, and the HomeFeatureImpl now provides a launch intent for the HomeActivity. The video feature's dependency injection has been updated to use the new module structure, and test files have been updated to reflect the new activity and component structure.

features/video · high confidence

Updated ProGuard and R8 optimization rules for libraries and app

The project migrated to R8 for code shrinking and optimization, evidenced by the deletion of legacy ProGuard rule files (consumer-rules.pro and proguard-rules.pro) from the common-data, common-features, and common-presentation libraries. Simultaneously, the app module's proguard-rules.pro was updated to include specific keep-rules for OkHttp, Retrofit, Moshi, Kotlin metadata, and Crashlytics, ensuring these dependencies are preserved during the R8 optimization process.

app, libraries · medium confidence

Upgraded Gradle wrapper to version 6.5

The project's Gradle wrapper has been updated from version 5.6.2 to 6.5, ensuring that builds use a more recent version of the Gradle build tool.

gradle · high confidence

Dependencies

Upgrade dependencies and integrate GloballyDynamic for dynamic feature delivery

The project's build configuration has been updated to version 4.0.1 of the Android Gradle plugin and Kotlin 1.3.72. Key library dependencies have been upgraded, including Dagger to 2.28.3, Navigation to 2.3.0, and ExoPlayer to 2.11.7. The integration of the 'GloballyDynamic' library (version 1.0.0) and its Gradle plugin allows for dynamic feature delivery across Google Play, Huawei, and Samsung Galaxy stores. Additionally, Firebase Crashlytics and Analytics dependencies have been added to the app module.

(dependencies) · medium 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 67 → 66 (-0.5)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 98 (-2.5)
  • Maturity 73 → 77 (+4.1)
  • Readiness 50 → 50 (+0.0)
  • Security 76 → 71 (-5.0)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (10)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Test reliability not included
  • The README lists App Store distribution links but provides no local development or testing guidance for the player. (README.md)
  • The README states the project's purpose and an exploration roadmap (Dynamic Feature Modules, MotionLayout, Jetpack testing) but never explains what the video player does or how to run it locally. (README.md)
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient
  • single-maintainer — knowledge-concentration (bus factor) risk

New (6)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no project overview (README.md)
  • Documentation: no usage examples (README.md)
  • High: security finding (details withheld)
  • No dependency advisory monitoring

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

jeppeman/android-jetpack-playground 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 21 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 700bad154f362957c85d57bfe8fed52ce1c2b93e — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.