본문 바로가기

Android/Tips

No toolchains found in the NDK toolchains, TaskExecutionException, RuntimeException

이번에 NDK 가 Revision r18 로 업데이트 되면서 생각지도 못한 에러가 생겼다. 기존에 잘 해오던 프로젝트들이 다 "No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android" 에러를 내고 있었다. 


해당 에러는 내가 전에는 ndk버전이 낮았었는지 잘됬는데 최신 ndk로 업데이트 하게되면서 이런 메세지가 나서 빌드실패가 되었다.

해결법을 찾아보니 일정 NDK버전 이후부터는 MIPS형의 CPU를 지원 하지 않게 변경되었고  gradle 버전이 너무 낮으면 mips에 대한 정보를 찾으려고 하다가 에러를 발생시키는 것이다. 결국 gradle 버전을 3.1.4 이상으로 올려라 라는 것이었다. 


하지만 gradle을 그동안 업데이트 하지 않았던 이유가 있었다. 나의 gradle 버전은 3.0.1. 이유는 ButterKnife 라이브러리를 사용하려면 8.8.1 버전을 사용하고 있었는데, gradle 3.0.1 버전 초과시, Butterknife 라이브러리가 지원이 안되는 것이었다. 하지만 이 부분도 열심히 찾아본 결과 gradle을 3.1.4 이상으로 업그레이드 하더라도, Butterknife 버전을 9.0.0-SNAPSHOT 버전으로 맞춰주면, 최신의 gradle버전을 사용할 수 있었다. 


이제 모든게 잘 될줄알았지... 이때 알았어야했는데.. 너무 돌아갔음을......


그러나 이번엔 빌드를 돌리면 RuntimeException 에러가 빵빵 터진다. 세부내용은 


(참조)  https://github.com/rzwitserloot/lombok/issues/1882 


정말 RuntimeException 이 나다보니 어느 포인트를 디버깅해서 바꿔야하는 것인지 도대체 감이 오지 않았다. 


열심히 찾아 본 결과 다른사람도 같은 증상을 겪었던 것이다. 해당부분은 Lombok 을 사용하여 생기는 이슈인 것이었다. 


이 증상의 최종 문제는 낮은 gradle 버전의 사용, 그리고 NDK 버전과 Lombok 의 충돌 이슈였다. 


그래서 그래도 버전을 최신을 써보는 것이 좋은것 아니겠는가 하는 마음에 Lombok을 적용했던 코드를 일일이 수정을 하려고 시도를 했다. OMG.


어마무시한 코드의 수정이 필요했고 수정 하다가 도저히 이건 아니라는 판단이 들었다. 


따라서 다른 방법으로 결국 최신의 NDK (September 2018)를 포기하기로 했다. 바로 직전 버전의 r17c (June 2018) 로 NDK 를 다운그레이드 해 주었다. 




( 참고 NDK 다운하는 곳 ) https://developer.android.com/ndk/downloads/revision_history?hl=ko


Android Studio 재빌드 .....


빌드 성공완료~! 


그리고 다시 gradle, butterknife 는 업데이트 하였다. 하지만 annotation 관련 빌드 에러가 또 발생하였다. 


하여 또 검색해보니 


compileOnly "javax.annotation:jsr250-api:1.0"


이걸 추가해주니 성공으로 업데이트가 가능하였다.




현재 사용중

gradle                 3.2.0 (최신) 

butterknife         9.0.0-SNAPSHOT (최신) 

lombok               1.16.18 (버전업 필요) -> 1.18.2 으로 올리면 빌드는 되나 배포용 apk 생성시 에러


더 stable한 버전이 나올 때 까지는 해당버전을 유지해야겠다.



거의 이거 하나 해결하자고 2틀 동안 자료를 찾아보면서 해맸다. 



혹시 해당 글에 문제가 있거나 수정이 필요하다면 댓글로 남겨주시면 참고하도록 하겠습니다.