Skip to main content
Version: 1.0.0

Technologies (Android)

List of main technologies, libraries, and frameworks used in the ARShades Android app.


Language, Runtime & Build

  • Kotlin + JVM 17 — primary language and target; modern coroutines-first codebase.
  • Android Gradle Plugin / Gradle — app module with minSdk 26, targetSdk 35, resource shrinking & R8 minification in release.
  • Signing — Play App Signing with separate debug/release keystores.
  • Build Features — Compose enabled, ViewBinding for interoperability, generated BuildConfig.
  • ProGuard/R8 — optimized rules with class shrinking; native symbol table for NDK crash decoding.
  • Packaging — excludes redundant META-INF licenses to keep APK/AAB slim.

Project Modules

  • :ARShadesInterfaces — shared contracts between layers.
  • :ARShadesUiComponents — reusable UI widgets and screens.
  • :ARShadesFramework — domain utilities, mappers, and common logic.

App Architecture & UI

  • Jetpack Compose — primary UI toolkit (Material & Material 3; window size classes for responsive layouts).
  • AppCompat / ConstraintLayout — interoperability where legacy views are retained.
  • Navigation — Jetpack Navigation (Fragments + Compose); Safe Args for typed navigation between destinations.
  • State — ViewModel + LiveData/State in Compose; unidirectional data flow patterns.

Dependency Injection

  • Hilt (Dagger) — DI for repositories, interactors, and ViewModels; Compose navigation integration.

Concurrency

  • Kotlin Coroutines — structured concurrency across data layer, Firebase calls, and AR operations.
  • Coroutines Play Services — idiomatic wrappers for Google Play/Firebase tasks.

AR / 3D

  • ARCore / Sceneform (1.23.0) — face/object tracking and real-time rendering of eyewear models; anchors, node graph, and lighting handled via Sceneform.

Firebase Platform

  • Bill of Materials (BoM) — centralized version management.
  • Analytics — screen views, funnels, deep-link attribution.
  • Crashlytics — crash and non-fatal reporting.
  • Performance Monitoring — network traces and screen renders.
  • Firestore — source of truth for Catalogues → Products → Variants; supports pagination (30 items per page).
  • Storage — rich media (e.g., notification images, assets).
  • Auth — lightweight authentication where required by reads.
  • Dynamic Linksc = catalogueId, m = variantId; routes to Instant or installed app.
  • Messaging (FCM) — remote notifications with routing to product/variant context.
  • App Check (Play Integrity / KTX) — backend protection for Firestore/Storage.

  • Android App Links — verified domains; open installed app directly from webvto.it URLs.
  • Google Play Instant (optional) — instant-launch try-on for a single variant, with CTA to install full app.
  • Play Core — in-app updates, in-app review, dynamic/asset delivery for large resources.

Data & Local Persistence

  • Realm Kotlin (1.6.0) — local cache and UX state (e.g., learned catalogues from deep links, notifications).
  • SharedPreferences — lightweight flags and one-off settings.

UI Components & UX

  • Material Components — theming, motion, and accessibility patterns.
  • Carousels — product galleries via whynotimagecarousel and DiscreteScrollView.

Testing

  • JUnit 4, AndroidX Test, Espresso — unit and instrumentation test stacks aligned with Jetpack.

Tooling & Plugins

  • Google Services — Firebase config & initialization.
  • Crashlytics & Perf plugins — symbol uploads, automatic performance tracing.
  • Navigation Safe Args — generated, type-safe argument classes.
  • Realm Gradle Plugin — schema generation and bytecode weaving for Realm models.

Network & Security

  • Digital Asset Links — domain verification for App Links.
  • Play Integrity (via App Check) — request attestation before granting backend access.

Performance & Delivery

  • Pagination — Firestore queries paged at 30 items for smooth scrolling and reduced memory.
  • Shrink & MinifyshrinkResources + R8 in release; debug builds keep minify off for faster iteration.
  • Feature/Asset Delivery — leverages Play Core for on-demand modules/assets when needed.