우리는 종종 SDK 가 업데이트 되고 나서 원인 모를 빌드 에러가 발생하는 것을 경험하게 됩니다.
SDK가 매번 업데이트 되고, 자동으로 패키지들을 설치해줘서 개발 환경들은 점점 좋아지고 있습니다.
그러나 종종 프로젝트를 만든 시점이 오래되어 최신 SDK에서 프로젝트가 만들어졌을 시점의 환경을 더이상 지원하지 않거나 변경되는 경우가 있죠.
다행스럽게도 구글링을 해보면 비슷한 문제를 겪는 사람들을 볼수 있고 그들이 포스팅 해놓은 해결책으로 많은 부분을 해결할 수 있습니다.
하지만 종종 전혀 해결이 안되는 문제들이 발생할 경우들이 있죠.
이럴때는 정말 project를 완전히 지우고 새 프로잭트를 만들고 소스코드를 카피해서 사용하고 싶은 생각이 들때도 있습니다.
일단 기초적인 사례부터 정리해보도록 하겠습니다.
디버그 모드로 빌드 잘되는데 릴리즈로 이상하게 잘 안된다.
뭔가 app/build.gradle 에서 에러가 발생한다.
1. Signing Key
먼저 확인해보실것이 , release 에 사용하는 signing key 입니다.
종종 signing 키가 삭제되거나 signing key 관련 설정이 잘 안되어 있어서 build error 가 이상한 곳에서 발생할때가 있습니다.
2. SDK version 확인
compile sdk나 target sdk 설정이 잘못되어있는 경우에 많이 에러가 발생합니다.
또, 현재 개발 환경에 sdk version이 정상적으로 설치 되었는지 확인 하는 것도 필요합니다.
예를 들면 아래와 같이 SDK build tool 35 버전을 잘 설치가 되어있습니다.
그런데. 빌드할때 이상하게 낮은 버전으로 빌드를 하려고 하고 에러가 발생한다면, SDK 설치가 좀 덜되어있을 가능성이 있습니다.
flutter build 시 현재 최신 버전으로 했을때 android sdk version 34를 사용합니다.
그런데 현재 PC에 35, 30.3 만 download 되어있다면, 아마 낮은버전인 30.3으로 빌드를 하게 될것입니다.
현재 빌드환경이 어떤 버전으로 돌아가고 있는지 확인하고 Show Package Details로 해당 버전이 설치되어있는지 확인할 필요가 있습니다.
3. 드물지만, subproject build 할때 sdk 버전이 안먹히는 경우
아래와 같이 afterEvaluate 를 설정해서 트라이 해볼 수 있습니다.
afterEvaluate {
android {
compileSdkVersion 34
}
}
전체 코드
android/build.gradle 파일
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
// Add this
afterEvaluate {
android {
compileSdkVersion 34
}
}
// End
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
#해피코딩 !!