개요
새로운 프로젝트에서 Proto DataStore를 도입하기 위해 DataStore의 Proto 모듈을 추가하였다.
해당 모듈 Gradle 작성 중에 한 오류를 만나게 되었다.
A problem occurred configuring project ':core:datastore-proto'.
> Cannot add a AndroidSourceSet with name 'debug' as a AndroidSourceSet with that name already exists.
이 오류는 AndroidSourceSet을 이미 정의된 이름(debug 또는 release)으로 다시 추가하려고 할 때 발생하는 것이었다.
그렇다면 이 오류를 발생시킨 코드는 무엇일까.
원인
androidComponents.beforeVariants {
android.sourceSets.register(it.name) {
val buildDir = layout.buildDirectory.get().asFile
java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java"))
kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin"))
}
}
이 코드의 기능은 Android 프로젝트에서 프로토콜 버퍼(protobuf)로 생성된 소스 파일을 빌드 경로에 추가하는 것이다.
이 작업은 DataStore를 Proto 형식으로 사용할 때 프로토콜 버퍼로 생성된 코드를 소스 세트에 포함하기 위해 필요하다.
하지만 android.sourceSets.register를 사용하면 이미 존재하는 sourceSet을 덮어쓰려고 시도하게 되어 충돌이 발생한 것이다.
해결 방법
대신, 이미 정의된 sourceSet에 추가하는 방식으로 코드를 수정해야 한다.
getByName을 사용해 각 sourceSet을 불러와 프로토버퍼 생성 경로를 추가할 수 있다.
androidComponents {
beforeVariants {
android.sourceSets.getByName(it.name) { // 이미 존재하는 sourceSet 불러오기
val buildDir = layout.buildDirectory.get().asFile
java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java"))
kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin"))
}
}
}
이 코드는 기존의 debug 및 release 등 이미 정의된 sourceSet을 가져와서 필요한 디렉토리 경로를 추가한다.
이렇게 하면 Cannot add a AndroidSourceSet with name 'debug' 오류가 해결된다.
'Android > 에러 및 이슈 사항' 카테고리의 다른 글
[Android/Error] Constant expression required (0) | 2024.07.03 |
---|---|
[Android/Error] AGP 버전에 맞춰 Android Studio 업데이트 하기 (0) | 2024.06.28 |
[Android/Error] Kotlin 버전 세팅 이슈 (0) | 2024.06.27 |
[Android/Error] Android Webview에서 SSL 인증서 Error (0) | 2024.06.26 |
[Android/Error]Installed Build Tools revision 33.0.2 is corrupted. (1) | 2024.06.25 |