DataStore
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 5월 1일 | 1.1.1 | - | - | - |
종속 항목 선언
DataStore의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
DataStore는 Preferences와 Proto 두 가지 방식을 통해 구현이 가능합니다. 둘 중 하나를 선택합니다. 두 구현 중 하나에 Android로부터 독립된 종속 항목을 추가할 수도 있습니다.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 구현의 종속 항목을 추가합니다.
Preferences DataStore
Groovy
// Preferences DataStore (SharedPreferences like APIs) dependencies { implementation "androidx.datastore:datastore-preferences:1.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-preferences-core:1.1.1" }
Kotlin
// Preferences DataStore (SharedPreferences like APIs) dependencies { implementation("androidx.datastore:datastore-preferences:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-preferences-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-preferences-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-preferences-core:1.1.1") }
Proto DataStore
Groovy
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation "androidx.datastore:datastore:1.1.1" // optional - RxJava2 support implementation "androidx.datastore:datastore-rxjava2:1.1.1" // optional - RxJava3 support implementation "androidx.datastore:datastore-rxjava3:1.1.1" } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation "androidx.datastore:datastore-core:1.1.1" }
Kotlin
// Typed DataStore (Typed API surface, such as Proto) dependencies { implementation("androidx.datastore:datastore:1.1.1") // optional - RxJava2 support implementation("androidx.datastore:datastore-rxjava2:1.1.1") // optional - RxJava3 support implementation("androidx.datastore:datastore-rxjava3:1.1.1") } // Alternatively - use the following artifact without an Android dependency. dependencies { implementation("androidx.datastore:datastore-core:1.1.1") }
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 1.1
버전 1.1.1
2024년 5월 1일
androidx.datastore:datastore-*:1.1.1
이 출시되었습니다. 버전 1.1.1에 포함된 커밋을 확인하세요.
버그 수정
- '리소스 교착 상태가 발생할 수 있음'에 대한 Linux 거짓 알람을 완화함 오류 발생(여러
DataStore
인스턴스가 파일 잠금을 백오프하여 서로 다른 프로세스에서 쓰기를 시도하는 경우)
버전 1.1.0
2024년 4월 17일
androidx.datastore:datastore-*:1.1.0
이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.
1.0.0 출시 이후 주요 변경사항
자세한 내용은 알파 및 베타 버전 1.1.0의 출시 노트를 참조하세요. 1.1.0의 주요 업데이트 사항은 다음과 같습니다.
- 이제 DataStore가 동일한 파일에 액세스하는 여러 프로세스를 지원하며 여러 프로세스에 걸친 관측 가능성을 지원합니다.
- 새로운 스토리지 인터페이스를 사용하면 데이터 모델을 저장하거나 직렬화하는 방법을 맞춤설정할 수 있습니다.
- 이제 Kotlin 멀티플랫폼 프로젝트에서 DataStore를 사용할 수 있습니다.
버전 1.1.0-rc01
2024년 4월 3일
androidx.datastore:datastore-*:1.1.0-rc01
이 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 새 데이터가 이전 데이터와 동일한 경우
updateData
호출이 디스크 쓰기에 최적화되지 않는 성능 저하 문제를 수정했습니다. (d64cfb5) - 초기화 중에
MultiProcess
DataStore
에서 무효화를 놓칠 수 있는 경합 상태가 수정되었습니다. (b/326141553),(094c2dd)
버전 1.1.0-beta02
2024년 3월 6일
androidx.datastore:datastore-*:1.1.0-beta02
이 출시되었습니다. 버전 1.1.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
DataStore
의 성능 개선은 관찰될 때만 업데이트 알림을 수집합니다. b/267792241을 참조하세요. <ph type="x-smartling-placeholder">- </ph>
- 코루틴 테스트 라이브러리를 사용하는 경우 이 변경사항으로 인해 테스트에서
UncompletedCoroutinesError
가 트리거될 수 있습니다. 이 문제를 방지하려면 테스트에서DataStore
를 초기화할 때TestScope.backgroundScope
를 전달해야 합니다.
- 코루틴 테스트 라이브러리를 사용하는 경우 이 변경사항으로 인해 테스트에서
- 동일한 인스턴스에서 중첩된
updateData
호출이 교착 상태에 빠지는 문제를 수정했습니다. b/241760537을 참조하세요. - 이전 중에
SharedPreferences
을 삭제하지 못하는 경우DataStore
에서 더 이상IOExceptions
이 발생하지 않도록 했습니다. b/195553816을 참조하세요. - Android가 아닌 JVM 환경에서
updateData
중에 파일 이름 변경이 실패하는 문제가 수정되었습니다. b/203087070을 참조하세요. DataStore
초기화 후CorruptionException
가 처리되지 않는 문제를 수정했습니다. b/289582516을 참조하세요.
버전 1.1.0-beta01
2024년 1월 10일
androidx.datastore:datastore-*:1.1.0-beta01
이 1.1.0-alpha07
이후 변경사항 없이 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.
버전 1.1.0-alpha07
2023년 11월 29일
androidx.datastore:datastore-*:1.1.0-alpha07
이 출시되었습니다. 버전 1.1.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
MultiProcessDataStoreFactory
메서드는 더 이상 실험용이 아닙니다.@ExperimentalMultiProcessDataStore
주석이 완전히 삭제되었습니다. 추가했습니다. (Ieee54, I8e607)
버그 수정
- 1.1.0-alpha07에
@ExperimentalMultiProcessDataStore
주석 삭제가 출시되었습니다. 추가했습니다. (I8e607)
버전 1.1.0-alpha06
2023년 11월 1일
androidx.datastore:datastore-*:1.1.0-alpha06
이 출시되었습니다. 버전 1.1.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
createSingleProcessCoordinator
팩토리 메서드가 이제createMultiProcessCoordinator
와 일관되도록 파일 경로 (String
,java.io.File
,okio.Path
)를 수신합니다. 추가했습니다. (I211c8, b/305755935)
버전 1.1.0-alpha05
2023년 9월 6일
androidx.datastore:datastore-*:1.1.0-alpha05
이 출시되었습니다. 버전 1.1.0-alpha05에 포함된 커밋을 확인하세요.
API 변경사항
- Datastore
FileStorage
는 현재 공개적으로 사용 가능하므로 클라이언트가 커스텀 매개변수를 제공할 수 있습니다. 추가했습니다. (Icb985) - Android에서
MultiProcessCoordinator
와 함께 사용할 수 있도록InterProcessCoordinator
를 허용하도록OkioStorage
생성자를 변경했습니다. 추가했습니다. (Iecea3)
버그 수정
MultiProcessCoordinator
가 동일한 디렉터리에 있는 여러 파일을 모니터링할 수 없는 문제를 수정했습니다.- 파일 경로가 정규화되지 않은 경우 중복 파일을 감지할 수 없는 문제를 수정했습니다.
RxDataStore#isDisposed
에서 반환된 잘못된 값을 수정합니다.datstore-preferences-core
아티팩트의 누락된 proguard 구성 수정
버전 1.1.0-alpha04
2023년 4월 5일
androidx.datastore:datastore-*:1.1.0-alpha04
이 출시되었습니다. 버전 1.1.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
- 내부 구현을 개선하여 업데이트 후
DataStore
의 데이터 흐름이 이전 값을 내보낼 수 있는 경합 상태를 방지합니다.
버전 1.1.0-alpha03
2023년 3월 24일
androidx.datastore:datastore-*:1.1.0-alpha03
이 출시되었습니다.
버그 수정
- Kotlin 네이티브 타겟의 빌드 문제를 해결하기 위해 Maven 아티팩트에서 종속 항목 제약 조건을 삭제했습니다. (b/274786186, KT-57531)
버전 1.1.0-alpha02
2023년 3월 22일
androidx.datastore:datastore-*:1.1.0-alpha02
이 출시되었습니다. 버전 1.1.0-alpha02에 포함된 커밋을 확인하세요.
참고
이 버전에는 단일 프로세스 및 멀티 프로세스 DataStore 구현의 구현을 병합하는 중요한 내부 리팩터링이 포함되어 있습니다. 잠재적인 의도하지 않은 동작 변경사항 (예: 업데이트 알림 시점)을 주시하세요. Issue Tracker 구성요소를 사용하여 이러한 변경사항을 보고할 수 있습니다.
새로운 기능
- 이제 KMM 프로젝트에서
DataStore
를 사용할 수 있습니다. Datastore의 비 Android 대상은 아직 실험 단계이지만 개발자가 더 쉽게 사용해 볼 수 있도록 버전을 병합하기로 결정했습니다. - 다중 프로세스 기능이
androidx.datastore.multiprocess
에서androidx.datastore.core
로 이동했습니다. androidx.datastore.core.MultiProcessDataStoreFactory
에 새 팩토리 메서드를 추가하여 파일 작업을 위한Storage
객체로 DataStore 인스턴스를 만듭니다.- 여러 DataStore 인스턴스가 프로세스 간에 통신하는 데 도움이 되는 새 인터페이스
InterProcessCoordinator
를 추가합니다.InterProcessCoordinator
의 다중 프로세스 구현은 Android에서만 사용할 수 있습니다.
API 변경사항
- Datastore-Core 인터페이스에서
StorageConnection
에InterProcessCoordinator
를 추가합니다. (I555bb) - 저장소를 사용하도록 datastore-core
MultiProcessDataStoreFactory
의 API를 변경합니다. (Iac02f) - datastore-multiprocess의 공개 API를 datastore-core로 이동했습니다. (I76d7c)
- datastore-preferences-core에서
PreferencesSerializer
를 노출했습니다. (I4b788) @JvmDefaultWithCompatibility
주석을 추가합니다. (I8f206)
버전 1.1.0-alpha01
2022년 11월 9일
androidx.datastore:datastore-*:1.1.0-alpha01
이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 프로세스 전반에서
DataStore
인스턴스 간에 데이터 일관성이 보장되는 다중 프로세스 사용 사례를 지원합니다.MultiProcessDataStoreFactory#create
를 추가하여 이러한DataStore
인스턴스를 만듭니다. Datastore
의 기본 저장소 메커니즘을 전환할 수 있는 새로운 저장소 인터페이스입니다. java.io 및 okio의 구현이 제공됩니다.DataStore
팩토리에는 이 저장소 객체를 허용하는 새로운 메서드가 있습니다.
API 변경사항
- 저장소를 사용하도록 datastore-core
MultiProcessDataStoreFactory
의 API를 변경합니다. (Iac02f) - datastore-multiprocess의 공개 API를 datastore-core로 이동했습니다. (I76d7c)
- datastore-preferences-core에서
PreferencesSerializer
를 노출했습니다. (I4b788)
버전 1.0.0
버전 1.0.0
2021년 8월 4일
androidx.datastore:datastore-*:1.0.0
이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.
1.0.0의 주요 기능
Jetpack Datastore는 프로토콜 버퍼를 사용하여 키-값 쌍 또는 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션입니다. Datastore는 Kotlin 코루틴 및 Flow를 사용하여 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장합니다.
버전 1.0.0-rc02
2021년 7월 21일
androidx.datastore:datastore-*:1.0.0-rc02
가 출시되었습니다. 버전 1.0.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 키가 없으면
SharedPreferencesMigration
이 실행되지 않음을 명확히 했습니다. (Icfa32, b/192824325) - 요청된 키가 아직 존재하지 않는 경우
MIGRATE_ALL_KEYS
로 구성된SharedPreferencesMigration
에서 예외가 발생하는 버그를 수정했습니다. (Ie318a, b/192824325)
버전 1.0.0-rc01
2021년 6월 30일
androidx.datastore:datastore-*:1.0.0-rc01
이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- .java 파일이 실수로 최종 jar에 추가되는 버그를 수정했습니다. (I65d96, b/188985637)
버전 1.0.0-beta02
2021년 6월 16일
androidx.datastore:datastore-*:1.0.0-beta02
가 출시되었습니다. 버전 1.0.0-beta02에 포함된 커밋을 확인하세요.
버그 수정
ClassVerificationFailure
를 수정했습니다. (b/187450483)
버전 1.0.0-beta01
2021년 4월 21일
androidx.datastore:datastore-*:1.0.0-beta01
이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- kotlin 전용 메서드의 JVM 오버로드를 삭제합니다. (I2adc7)
버그 수정
- Datastore 위임으로 인해 컨텍스트가 누출될 수 있는 버그가 수정되었습니다. (Ie96fc, b/184415662)
버전 1.0.0-alpha08
2021년 3월 10일
androidx.datastore:datastore-*:1.0.0-alpha08
이 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.
API 변경사항
- 이제 컨텍스트에 따라
dataStore
및preferencesDataStore
속성 위임에 이전을 추가할 수 있습니다. (I4ef69, b/173726702) - 더 이상 Datastore 위임 또는 context.createDataStore를 사용하지 않는 경우 파일 이름을 가져오는 도우미 함수를 추가합니다. (I60f9a)
- 이제 Serializer writeTo 및 readFrom이 정지됩니다. Serializer를 구현한 경우 정지 함수가 되도록 함수를 업데이트해야 합니다. (I1e58e)
- RxDataStore 사용자를 위한 속성 위임을 추가했습니다. (Ied768, b/173726702)
버그 수정
- 실험용 API의 공개 사용에 제한을 적용합니다. (I6aa29, b/174531520)
버전 1.0.0-alpha07
2021년 2월 24일
androidx.datastore:datastore-*:1.0.0-alpha07
이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
Context.createDataStore
확장 함수를 삭제하고 globalDataStore 속성 위임으로 대체했습니다. kotlin 파일의 최상위 수준에서 globalDataStore를 한 번 호출합니다. 예:val Context.myDataStore by dataStore(...)
kotlin 파일의 최상위 수준에 배치하면 이 인스턴스가 하나만 생깁니다. (I57215, b/173726702)
RxDataStore 함수는 이제 DataStore의 확장 함수 대신 RxDataStore 클래스에 있습니다. (Idccdb, b/177691248)
EncryptedSharedPreferences를 DataStore로 이전(또는 SharedPreferences를 직접 부팅)하려는 경우 이제 SharedPreferences를 삽입할 수 있는 새로운 SharedPreferencesMigration 생성자를 사용하면 됩니다. (I8e04e, b/177278510)
버그 수정
- 동일한 파일에 활성 DataStore가 여러 개 있는 경우 이제 DataStore에서 예외가 발생합니다. DataStore를 싱글톤으로 관리하지 않았거나 한 파일의 DataStore 인스턴스 두 개가 동시에 활성화되지 않도록 조치하지 않은 경우 이제 DataStore를 읽거나 DataStore에 쓸 때 예외가 발생할 수도 있습니다. DataStore를 싱글톤으로 관리하면 해결할 수 있습니다. (Ib43f4, b/177691248)
- 호출자 범위 취소 시의 취소 동작을 수정합니다. (I2c7b3)
버전 1.0.0-alpha06
2021년 1월 13일
androidx.datastore:datastore-*:1.0.0-alpha06
이 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- DataStore용 RxJava 래퍼를 추가했습니다.
datastore-rxjava2/3
아티팩트에는 핵심 DataStore API용 래퍼가 포함됩니다(RxDataStore
,RxDataStoreBuilder
,RxDataMigration
).datastore-preferences-rxjava2/3
아티팩트에는 Preferences DataStore를 생성하는 빌더가 포함됩니다.
API 변경사항
- CorruptionHandler 인터페이스를 숨깁니다. DataStore 팩토리가 ReplaceFileCorruptionHandler만 허용하므로 인터페이스를 공개할 이유가 없기 때문입니다. (I0b3b3, b/176032264)
preferencesKey<T>(name: String): Key<T>
메서드를 삭제하고 각 지원되는 유형과 관련된 메서드로 대체했습니다. 예를 들어,preferencesKey<Int>("int")
는 이제intPreferencesKey("int")
입니다. (Ibcfac, b/170311106)
버그 수정
- 데이터 저장소 파일이 'datastore/' 하위 디렉터리에 생성되었다는 사실이 누락된 DataStoreFactory 관련 문서를 수정했습니다. (Ica222)
버전 1.0.0-alpha05
2020년 12월 2일
androidx.datastore:datastore-*:1.0.0-alpha05
가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- Datastore의 동시 쓰기에 관해 더 적절한 문서 및 예외를 추가했습니다. (Ia98a2, b/173522155, b/173726702)
- 이제
Serializer.writeTo()
에 전달된 OutputStream을 종료할 수 있습니다(필수는 아님). (I5c9bf, b/173037611)
버전 1.0.0-alpha04
2020년 11월 17일
androidx.datastore:datastore-*:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
버그 수정
- Preference Datastore
1.0.0-alpha03
에서 다음과 같은 비정상 종료를 일으키는 패키징 문제가 수정되었습니다.java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
- 기존 비정상 종료는 여기에 보고했습니다. b/173036843
- (I4712d, b/173036843)
버전 1.0.0-alpha03
2020년 11월 11일
androidx.datastore:datastore-*:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 Preferences에서 이중 값을 지원합니다(부동 소수점 수보다 더 높은 정밀도가 필요한 경우 유용함). (I5be8f, b/169471808)
API 변경사항
- 더 빠른 컴파일을 위해 Datastore용 순수 kotlin 종속 항목을 만들었습니다.
androidx.datastore:datastore-core
에는 Core Kotlin 전용 API가 있고,androidx.datastore:datastore
에는 Android에 종속되는 API(SharedPreferencesMigration
및Context.createDataStore
생성자 포함)가 있습니다. (I42d75, b/168512698) - 더 빠른 kotlin 컴파일을 위해 Preferences DataStore의 타겟을 분리합니다. (Ia3c19)
이제 Serializer에서는 디스크에 데이터가 없는 경우 사용될 기본값의 새 속성이 필요합니다. 이에 따라, 맞춤 Serializer를 더 쉽게 구현할 수 있어 사용자는 빈 입력 스트림을 특별한 사례로 처리할 필요가 없습니다(빈 입력 스트림이 json으로 파싱되지 않음).
- 이제 writeTo()에 제공된 출력 스트림이 닫히지 않았는지 확인하는 검사도 있습니다. 이 스트림이 닫혀 있는 경우 예외가 발생합니다. (I16e29)
SharedPreferencesView 내부용 생성자를 만듭니다. 원래는 테스트를 위해 공개되었습니다. 대신 테스트는 SharedPreferencesMigration을 생성해야 하며 이를 테스트해야 합니다. (I93891)
버그 수정
- 이제
DataStoreFactory
및PreferenceDataStoreFactory
의produceFile
매개변수가 목록의 마지막 매개변수이므로, kotlin 후행 람다 구문을 사용할 수 있습니다. (Ibe7f1, b/169425442) - kotlin에 관한 새로운 명시적인 API 요구사항을 따릅니다. (I5ae1e)
알려진 문제
- Preference Datastore가
java.lang.NoClassDefFoundError
와 충돌합니다. (b/173036843)
버전 1.0.0-alpha02
2020년 10월 14일
androidx.datastore:datastore-core:1.0.0-alpha02
및 androidx.datastore:datastore-preferences:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
버그 수정
- Datastore-core의 변형에 대비한 보호 장치를 추가했습니다. 변형은 non-proto/non-preferences 유형을 통해 Datastore를 사용하는 사용자의 Datastore 사용을 중단시킵니다. (I6aa84)
- 현재 상태를 쉽게 디버깅할 수 있도록 Preferences.kt에
toString
메서드를 추가했습니다. (I96006) DataStore.Preferences
의 오용을 방지하기 위한 예외가 추가되었습니다. (I1134d)- 시작 시 앱의 비정상 종료를 유발하는 버그를 수정했습니다. (I69237, b/168580258)
버전 1.0.0-alpha01
2020년 9월 2일
androidx.datastore:datastore-core:1.0.0-alpha01
및 androidx.datastore:datastore-preferences:1.0.0-alpha01
이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
Jetpack DataStore는 SharedPreferences를 대체하는 개선된 신규 데이터 저장소 솔루션입니다. Kotlin 코루틴과 Flow를 기반으로 한 DataStore는 다음과 같은 두 가지 구현을 제공합니다.
- Proto DataStore: 유형이 지정된 객체(프로토콜 버퍼로 지원됨)를 저장할 수 있습니다.
- Preferences DataStore: 키-값 쌍을 저장합니다.
비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장하여 SharedPreferences의 단점을 대부분 극복합니다.