AppState   Android Jetpack의 구성요소

Jetpack AppState는 Jetpack Compose State를 UI 레이어 이상으로 확장하여 앱의 모든 레이어에서 반응형 상태를 변환하고 공유할 수 있도록 지원하는 라이브러리 그룹입니다. AppState는 두 가지 기본 라이브러리로 구성됩니다.

  • 변환: Compose 런타임을 기반으로 빌드된 라이브러리로, UI 없이 @Composable 블록을 실행하여 상태 소스를 Compose State로 결합하고 변환합니다.
  • 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를 사용하여 의견을 공유하거나 버그를 신고하거나 기능을 요청하세요.