이전에 작성된 protobuf 라이브러리 세팅을 먼저 진행한다.
DataStore protobuf 라이브러리 세팅 방법
.proto file은 /core/datastore/src/main 하위 디렉토리에 생성을 한다.
https://github.com/woohyun-jeong/AndroidSampleApp/tree/datastore_test1/core/datastore/src/main/proto
예)
syntax = "proto3";
option java_package = "com.example.sampleapp.core.datastore";
option java_multiple_files = true;
message TestData {
bool isTest = 1;
}
proto 객체를 만들게 되면 해당 파일을 참조하기 위해서 빌드를 한번 진행해야한다.
빌드를 진행하게 되면 해당 패키지 위치의 build 폴더에 참조 객체가 생성된다.
datastore 모듈내에 build 폴더에 참조 객체가 생성되게 된다.
datastore/build/generated/source/proto/debug/java/com/example/sampleapp/core/datastore/TestData
DataStoreModule DI 객체내에 proto형식의 Datastore를 선언한다.
@Module
@InstallIn(SingletonComponent::class)
object DataStoreModule {
private const val TEST_DATASTORE_FILE_NAME = "TEST_DATA.pb"
private val Context.testDataStore by dataStore(
fileName = TEST_DATASTORE_FILE_NAME,
serializer = TestSerializer
)
object TestSerializer : Serializer<TestData> {
override val defaultValue: TestData
get() = TestData.getDefaultInstance()
override suspend fun readFrom(input: InputStream): TestData {
try {
return TestData.parseFrom(input)
} catch (exception: Exception) {
throw CorruptionException("Cannot read proto.", exception)
}
}
override suspend fun writeTo(t: TestData, output: OutputStream) {
t.writeTo(output)
}
}
@Provides
@Singleton
@Named("test")
fun provideTestDataStore(
@ApplicationContext context: Context
): DataStore<TestData> = context.testDataStore
}
간단하게 protobuf 데이터 형식을 값 수정 및 flow를 통해서 수정된 데이터 형식이 반영되는지 테스트를 진행해보았다.
- "Text Value Change!" 버튼을 누른다.
- "TEST_DATA.pb" 데이터스토어에 생성된 내용을 토대로 TestData ProtoBuf를 이용하여 데이터에 접근하게 된다.
- DataStoreViewModel 클래스에 선언된 updateTest 메서드를 통해 데이터를 업데이트를 진행한다.
- 업데이트가 완료되었을 때 Flow 리턴으로 되어있으므로 Flow collect 메서드를 통해서 업데이트 된 데이터를 받게된다.
- Compose Text에 text로 표출된다.
샘플 앱 : https://github.com/woohyun-jeong/AndroidSampleApp/tree/datastore_test1
'Android > Module' 카테고리의 다른 글
[Android Multi module] DataStore protobuf 암호화/복호화 적용 (1) | 2024.09.13 |
---|---|
[Android Multi module] local.properties 파일로 API Key 관리 (1) | 2024.09.13 |
[Android Multi module] DataStore protobuf 라이브러리 추가 방법 (0) | 2024.09.13 |
[Android Multi module] feature module 생성 방법 (0) | 2024.09.13 |
[Android build-logic] 모듈화 kts 구성 (0) | 2024.09.13 |