이커머스(쿠팡 스타일) 느낌의 Android 학습용 토이 앱. 아래 기술 스택을 한 앱에서 모두 다루는 것이 목표입니다. View 시스템(XML + ViewBinding) 기반.
| 홈 — MVVM · ViewPager2 배너 · RenderEffect 블러 · App Startup 트레이스 | 상품 상세 — MVP |
|---|---|
![]() |
![]() |
| # | 주제 | 구현 위치 |
|---|---|---|
| 1 | 동적 앱 아이콘 — 2개 activity-alias를 PackageManager.setComponentEnabledSetting()으로 전환 |
launcher/IconAliasManager.kt, AndroidManifest.xml |
| 2 | API 레벨별 블러 뷰 — API 31+ RenderEffect / 미만 RenderScript + 프레임 쓰로틀링 |
widget/BlurBackdropView.kt, widget/RenderScriptBlur.kt |
| 3 | ViewPager2 — 배너 캐러셀, onPageScrolled offset으로 블러 크로스페이드 |
presentation/home/adapter/BannerAdapter.kt |
| 4 | Jetpack App Startup — dependencies() 위상정렬, EntryPointAccessors로 Hilt 연동 |
startup/ |
| 5 | Hilt DI — Singleton / ViewModel / ActivityRetained / Activity 스코프 | di/ |
| 6 | MVVM(홈) + MVP(상세) — UseCase / Repository / DataSource 계층 | presentation/, domain/, data/ |
| 7 | REST API 호출 — Retrofit + OkHttp + kotlinx.serialization으로 DummyJSON 실제 호출, 실패 시 로컬 폴백(방어적 설계) | data/remote/, di/NetworkModule.kt |
Clean Architecture 3계층 — 의존성 방향은 presentation → domain ← data.
domain/ 순수 Kotlin (model, repository 인터페이스, usecase)
data/ domain 인터페이스 구현 (datasource, repository, config)
presentation/ home(MVVM) · detail(MVP) · settings
di/ startup/ launcher/ widget/
JDK 17+ 필요. Android Studio로 열면 자동 처리되고, 커맨드라인은:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" # 번들 JBR(JDK 21)
./gradlew :app:assembleDebug
./gradlew :app:testDebugUnitTest- AGP 8.9.1 · Gradle 8.13 · Kotlin 2.1.0 · compileSdk 36 · minSdk 24
학습용 프로젝트입니다. 상품 목록은 DummyJSON API에서 실시간으로 받아오고, 네트워크 실패 시
ProductLocalDataSource의 로컬 데이터로 폴백합니다. 배너는 로컬 데이터입니다.

