본문 바로가기

Android

sdkman: Android studio, 커맨드라인으로 gradle 빌드하기

환경: Mac os 10.15.1

 

현상:

아마 새 맥북에서 최신 버전으로 모든걸 세팅하고 나서, Android studio에서 코틀린을 gradlew 로 빌드하려면 빌드가 안될겁니다.

 

>  ./gradlew assembleDebug

  Task :app:kaptDebugKotlin FAILED e: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)

....

 

원인: JAXBException 가 Java8 에서 지원되던 녀석인데, Java11 에서 제거되어서 그렇습니다.

 

해결방법: Java11 을 지우고 Java8을 설치하면 되는데.... 척 봐도 왠지 해서는 안될 일로 보입니다.

 

-> 그래서 검색을 좀 해봤더니, https://discuss.gradle.org/t/android-studio-gradle-build-error/32108/5

 

Android Studio - Gradle Build Error

Awesome. Thank you. That worked

discuss.gradle.org

역시나 이미 비슷한 일을 겪은 사람이 있습니다. 이 분이 추천해 준 방법은 sdk man을 이용하는 것.

sdk man은 시스템에 여러 라이브러리를 설치하고, 실시간으로 버전을 바꿔가며 쓸 수 있게 해주는 라이브러리입니다.

 

과정 1: sdk man을 설치합니다.

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk version

 

과정 2: sdk man을 이용하여 Java8을 다운로드 받습니다.

 

다운로드 받을 수 있는 버전 확인하기:

sdk list java

 

설치:

sdk install java 8.0.232.j9-adpt 
sdk use java 8.0.232.j9-adpt
sdk current

 

과정 3: 다시 빌드를 해봅니다.

./gradlew assembleDebug

 

빌드 성공.

 

참고: 커맨드라인에서 빌드할 일은 거의 없지만, 빌드 속도증가를 위해 빌드 프로파일링을 할 때는 이런 방법이 필요합니다. 

./gradlew --profile --offline --rerun-tasks assembleDebug