18/03/21 · Log.dev() Android Error NDK

Android 빌드중 mips64el-linux-android-strip 관련 에러

Problem

NDK를 16 버전에서 17 버전으로 업데이트 한 이후에 아래와 같은 에러가 발생했다.

org.gradle.process.internal.ExecException: A problem occurred starting process 'command '[Android SDK Path]/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip''
	at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:220)
	at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:204)
	at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:340)
	at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
	at org.gradle.internal.operations.BuildOperationIdentifierPreservingRunnable.run(BuildOperationIdentifierPreservingRunnable.java:39)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
	at java.lang.Thread.run(Thread.java:745)
Caused by: net.rubygrapefruit.platform.NativeException: Could not start '[Android SDK Path]/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip'
	at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
	at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
	at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:68)
	... 7 more
Caused by: java.io.IOException: Cannot run program "[Android SDK Path]/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/bin/mips64el-linux-android-strip" (in directory "/Volumes/Seagate/AppeatProject/DogdripRenew/app"): error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
	... 9 more
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 10 more

Reason

구글에서 여러 키워드로 검색해봐도 해결방법을 찾기 힘들어서 에러내용을 다시 살펴보니
[Android SDK Path]/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/ 폴더에서 뭔가를 찾을 수 없다는 내용이였다.
그 폴더에는 아래와 같은 문구가 적힌 LOCAL_LDLIBS파일만 덩그라니 있었다.

This mips64el-linux-android-4.9 directory exists to make the NDK compatible with the Android
SDK's Gradle plugin, version 3.0.1 and earlier, which expects the NDK
to have a MIPS64 toolchain directory.

Solution

SDK Manager를 이용해서 NDK 재설치해보아도 해결되지 않아서 NDK 다운로드 페이지에서 android-ndk-r16b-darwin-x86_64.zip 파일을 다운받아서 toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64/ 폴더를 내 NDK폴더에 복사하니 에러가 사라졌다.

TODO

  1. ndk r17에서 mips64el-linux-android-4.9가 사라진 이유는 무엇인가
  2. 이전 버전을 복사할게 아니라 근본적인 해결방법을 찾아야할 것 같다
  3. 구글에 물어보기 전에 에러메시지 확인부터 잘 하자
  4. NDK를 사용하지 않는 내 프로젝트에서 왜 이런 에러가 나는가...

UPDATE (18.03.21)

  1. ndk r17에서 mips64el-linux-android-4.9가 사라진 이유는 무엇인가
    NDK Revision History를 살펴보니 이미 r16에서 MIPS64 지원 중단이 예고되어있었던 것 같다.
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket
Comments powered by Disqus