AppState Android Jetpack의 구성요소
Jetpack AppState는 Jetpack Compose State를 UI 레이어 이상으로 확장하여 앱의 모든 레이어에서 반응형 상태를 변환하고 공유할 수 있도록 지원하는 라이브러리 그룹입니다. AppState는 두 가지 기본 라이브러리로 구성됩니다.
- 변환: Compose 런타임을 기반으로 빌드된 라이브러리로, UI 없이
@Composable블록을 실행하여 상태 소스를 ComposeState로 결합하고 변환합니다. - StateStore: 공유 앱 상태를 Compose
State로 저장하고 노출하는 유형 안전 컨테이너입니다. 여러 애플리케이션 구성요소 간에 상태를 공유하는 데 가장 흔히 사용됩니다.
Compose State가 UI 컴포저블 외부에서 작동하는 방식과 Transform 및 StateStore가 아키텍처 전반에서 mutableStateOf 및 SavedStateHandle.saveable와 같은 기존 Compose API와 함께 작동하는 방식을 알아보려면 UI 외부에서 Compose 상태 사용을 참고하세요.
아티팩트
AppState를 시작하려면 프로젝트에 필요한 아티팩트를 지원 라이브러리와 함께 추가합니다.
| 이름 | 기능 | 아티팩트 |
|---|---|---|
| 변환 | UI 외부에서 Compose State를 생성하고 관찰합니다 (transform 및 listener). |
androidx.appstate.transform:transform |
| 변환 테스트 | 변환 (transformTest 및 TransformTestScope)을 위한 테스트 유틸리티 |
androidx.appstate.transform:transform-testing |
| StateStore | 핵심 유형 안전 상태 컨테이너 및 StateStoreKey 정의 |
androidx.appstate.statestore:statestore |
| StateStore DataStore 통합 | Jetpack DataStore를 사용하여 StateStore 키를 디스크에 유지하고 복원합니다. |
androidx.appstate.statestore:statestore-datastore |
| Compose 컴파일러 플러그인 | transform 또는 listener를 사용하는 모듈에서 @Composable 함수와 블록을 컴파일합니다. |
org.jetbrains.kotlin.plugin.compose |
| KotlinX Serialization 플러그인 | statestore-datastore를 사용할 때 @Serializable StateStoreKey 및 맞춤 상태 유형의 직렬 변환기를 생성합니다. |
org.jetbrains.kotlin.plugin.serialization |
| KotlinX Serialization 라이브러리 | statestore-datastore를 사용할 때 @Serializable StateStoreKey 및 맞춤 상태 유형의 런타임 직렬화 라이브러리입니다. |
org.jetbrains.kotlinx:kotlinx-serialization-core |
프로젝트 설정
프로젝트에 AppState 라이브러리를 추가하려면 libs.versions.toml 파일에서 버전, 라이브러리, Gradle 플러그인을 선언합니다.
[versions]
appstate = "1.0.0-alpha01"
kotlin = "2.4.10"
kotlinxSerializationCore = "1.11.0"
[libraries]
# Transform library for producing and observing Compose State
androidx-appstate-transform = { module = "androidx.appstate.transform:transform", version.ref = "appstate" }
# Testing utilities for Transform
androidx-appstate-transform-testing = { module = "androidx.appstate.transform:transform-testing", version.ref = "appstate" }
# Core StateStore library
androidx-appstate-statestore = { module = "androidx.appstate.statestore:statestore", version.ref = "appstate" }
# DataStore integration for StateStore (and required serialization runtime)
androidx-appstate-statestore-datastore = { module = "androidx.appstate.statestore:statestore-datastore", version.ref = "appstate" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerializationCore" }
[plugins]
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
# Required only when using statestore-datastore
jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
그런 다음 모듈의 build.gradle.kts 파일을 구성합니다.
plugins {
...
alias(libs.plugins.compose.compiler)
// Required only when using statestore-datastore
alias(libs.plugins.jetbrains.kotlin.serialization)
}
android {
...
buildFeatures {
compose = true
}
}
dependencies {
...
implementation(libs.androidx.appstate.transform)
implementation(libs.androidx.appstate.statestore)
// Optional: DataStore integration for StateStore
implementation(libs.androidx.appstate.statestore.datastore)
implementation(libs.kotlinx.serialization.core)
...
testImplementation(libs.androidx.appstate.transform.testing)
}
코드 샘플
AppState 레시피 저장소에는 일반적인 Android 아키텍처 패턴과 폼 팩터에서 Transform 및 StateStore를 사용하는 방법을 보여주는 실제 예시가 포함되어 있습니다.
의견 보내기
Transform Issue Tracker 또는 StateStore Issue Tracker를 사용하여 의견을 공유하거나 버그를 신고하거나 기능을 요청하세요.