나는 여러 해 동안 iOS/안드로이드 개발을 해오고 있다. iOS/안드로이드 개발하기 이전에는 MFC 기반의 개발을 다년간 했었고, 일로 인해서 VB, ASP, JAVA, JSP 등도 약간씩 하기도 했었습니다.
MFC 개발 환경에 익숙했어서 인지, 늙어서 그런지, 게을러서 그런지 안드로이드 개발에서 아직도 적응이 되지 않는 부분이 Gradle 기반으로 하는 빌드 환경 구성 부분은 아직도 익숙해지지 못했습니다. 게을러서이겠지요.
예전에 MFC 기반으로 개발하던 시절에 비해서 안드로이드 개발 환경은 변화가 비교적 자주 발생하고, SDK 버전 변경시, Android Studio 업데이트 시 어쩔 수 없이 뭔가를 해줘야하는 상황이 발생하는데 그때 그때 찾아보고 대응하는 식으로 하다보니 문제를 키우는게 아닌가 싶기도 합니다.
그리고, 현업에서 개발환경에 변화를 줬다가 기대치 않은 문제가 발생하기도 하고, 급히 처리해야 하는 고객 요구 사항을 제때 대응하지 못하는 문제가 발생할 수 있어서, 반드시 업데이트가 필요한 상황이 아니면 개발 환경은 건드리지 않는 것을 철칙으로 삼아오다보니 새로운 개발환경 적응에 늦게 따라갈 수 밖에 없기도 했습니다.
최근에 flutter 기반으로 개발을 하고 있다보니 내 입장에선 좀 더 복잡해진것 같은데, 서론이 너무 길어진것 같으니 본론으로 들어가도록 하겠습니다.
얼마전부터 개발을 하면서 run 명령을 내리면 에러가 한번 발생하고 다시 실행하면 실행이되는 문제가 발생하기 시작했습니다. 예를 들어서 Log.d(TAG, ""); 와 같은 오류가 없는 라인을 추가 했음에도 오류가 한번 발생하고 다시 실행하는 정상 실행되는 이해할 수 없는 문제였습니다.
처음 문제가 발생했던 시점에는 처리해야할 급한 일들이 산재해 있고, flutter는 hot reload라는 기능을 통해서 빌드 없이(?) 바로 수정 사항이 반영되기 때문에 일을 하는데 크게 불편하지 않은 상황이어서 무시하고 진행을 했습니다. 그런데 최근에 flutter 쪽 코드가 아닌 java 코드를 수정해야하는 부분들을 개발하다보니 이 부분이 개발에 상당한 장애로 다가오기 시작했습니다. 빌드하는데 걸리는 시간이 몇분이 소요되는데 한번 실행해보려면 빌드를 한참하다가 오류가 발생하고, 다시 실행해야 수정한 내용의 결과를 볼 수 있어서 1시간 동안 얼마의 작업을 하지 못하는 상황이 계속되었습니다. 그래서 급한 일도 어느정도 처리되고 해서 이 문제를 해결하기로 했습니다.
일단 발생하는 오류는 다음과 같습니다.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> kotlin.KotlinNullPointerException
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 55s
Running Gradle task 'assembleDebug'... 56.6s
Exception: Gradle task assembleDebug failed with exit code 1
kotlin을 사용하는 코드는 없는데 java 컴파일 단계에서 kotlin 관련 예외가 발생한다고 나오는 이상한?? 오류가 발생합니다.
직접적인 오류 메시지를 이용한 검색으로는 크게 관계가 있어 보이는 내용을 찾을 수 없습니다.
그래서 개발툴이 시키는데로 --stacktrace를 수행해 보았습니다.
android % ./gradlew assembleDebug --stacktrace
android % ./gradlew assembleDebug --stacktrace
Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK
% java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment Corretto-8.312.07.1 (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM Corretto-8.312.07.1 (build 25.312-b07, mixed mode)
% brew tap adoptopenjdk/openjdk
Running `brew update --preinstall`...
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/core, homebrew/cask and mono0926/license-plist).
==> New Formulae
age-plugin-yubikey libxcvt spirv-headers
ansible-language-server libxfont2 sqls
arxiv_latex_cleaner lndir sse2neon
bartib localtunnel stanc3
... 중략 ...
% brew install --cask adoptopenjdk11
==> Downloading https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/down
==> Downloading from https://objects.githubusercontent.com/github-production-rel
######################################################################## 100.0%
==> Installing Cask adoptopenjdk11
... 중략 ...
% java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
classpath 'com.android.tools.build:gradle:7.2.0'
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
댓글
댓글 쓰기