mystic-agit 개발 블로그

[Android] Gradle 빌드 failure compileDebugKotlin 확률적 에러 발생 본문

Android/Gradle

[Android] Gradle 빌드 failure compileDebugKotlin 확률적 에러 발생

mystic-agit 2023. 9. 5. 20:38

이번 글에서 정리하는 compileDebugKotlin 에러는 코드 구현이나 빌드 환경 설정 실수(휴먼 에러)로 발생하는 일반적인 부분이 아니다.

 

현상

Android Studio에서 라이브러리 프로젝트를 빌드 시 관련된 에러를 얻은적은 없지만

Mac, Windows 에서 스크립트를 통해 gradle 빌드를 수행할 때 특정 프로젝트에서 높은 확률로 compilueDebugKotlin 에러가 발생하였다.

 

환경

- Gradle 6.x 및 7.x 빌드

- Mac 및 Windows에서 스크립트로 gradle 빌드

 

에러 내용

... (생략)...

D:\..(생략)..\mytest1.kt: (25, 18): None of the following functions can be called with the arguments supplied: 
public open fun put(p0: String!, p1: Any!): JSONObject! defined in org.json.JSONObject
public open fun put(p0: String!, p1: Boolean): JSONObject! defined in org.json.JSONObject
public open fun put(p0: String!, p1: Double): JSONObject! defined in org.json.JSONObject
public open fun put(p0: String!, p1: Int): JSONObject! defined in org.json.JSONObject
public open fun put(p0: String!, p1: Long): JSONObject! defined in org.json.JSONObject
e: D:\..(생략)..\mytest2.kt: (28, 18): Unresolved reference: putCheck
e: D:\..(생략)..\mytest3.kt: Unresolved reference: putCI
e: D:\..(생략)..\mytest4kt: (4, 25): Unresolved reference: put

... (생략)...

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Hive_SDK:Protocol:compileDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

 

에러 내용 분석

Unresolved refernce 이슈 로그가 있어 처음엔 단순한 코드 내 레퍼런스를 잘못 표현한 문제로 보았다.

하지만 해당 클래스에서 사용하는 메서드까지 모두 확인하였으나 참조하고 있는 내용은 모두 정상..

아무런 이슈가 없다 싶어 빌드를 다시 돌리면 성공해버린다.

 

이후 작업중인 Git 브랜치를 변경하여 빌드 시

높은 확률(30% 이상)로 다시 동일한 에러가 발생하고 몇 번의 재시도(1~3회)를 하면 빌드가 성공한다.

물론 작업중인 Git 브랜치 이동을 안하는 경우도 간헐적인 확률로 동일한 현상이 발생하였다.

 

원인을 찾기위해 여러 레퍼런스 페이지를 돌아다녔으나 유사한 내용을 찾지 못하였다.

 

이슈 원인 추정 및 테스트

해당 에러는 Git에서 다른 작업 브랜치로 옮겨 빌드하는 경우 그 빈도가 높게 발생하였다.

Gradle 빌드로 인해 발생하는 캐시된 작업 폴더가 재빌드 시 올바르게 덮어쓰기 되지 않는 것일까 의심스러워

해당 Android 프로젝트에서 두 개의 폴더(.gradle / build)를 항상 지우고 Jenkins가 빌드 스크립트를 수행하도록 구성하였다.

 

 

결과

이후 "브랜치를 옮겨 빌드 수행 10번", "여전히 작업중인 브랜치에서 빌드 수행 10번"

두 가지 경우로 빌드 진행한 결과 더이상 compileDebugKotlin 에러가 발생하지 않았다.

Comments