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 Links —
c= 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.
Links, Instant, and Play Services
- Android App Links — verified domains; open installed app directly from
webvto.itURLs. - 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
whynotimagecarouselandDiscreteScrollView.
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 & Minify —
shrinkResources+ R8 in release; debug builds keep minify off for faster iteration. - Feature/Asset Delivery — leverages Play Core for on-demand modules/assets when needed.