[Android] 맥북 M1 에서 NDK 빌드 오류 해결
업데이트:
🍒 맥북 M1 에서 NDK 빌드 오류 해결 🥂
안드로이드 ndk 빌드 중 만난 오류 녀석들…
기존 프로젝트 소스 중 native code 를 수정해야 할 일이 생겼다. 따로 히스토리가 없어 한참을 찾다가 ndk 빌드가 필요한 상황이었는데,
별도의 ndk 버전 정보가 없어서 맞는 버전 찾는 것도 일이었다. 어쨌든 지금은 해결한 상황인데, 며칠동안 붙잡고 해결한게 아까워서 남겨본다!😎
🏸 Android NDK 빌드 툴
CMake
- CMakeLists.txt 파일 필요
- Android, Linux, Windows, iOS 등 모든 타겟에서 빌드 가능
NDK-Build
- Andorid.mk, Applicaton.mk 파일 필요
기존 프로젝트 jni 폴더에 Android.mk 파일이 있었기 때문에 NDK-Build 를 통해 빌드를 진행했다.
🏸 이슈1 - No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi
- 안드로이드에서 사용되는 NDK 버전이 올라가면서 MIPS형 CPU에 대한 지원이 중단되었다는 에러라고 한다.
- gradle 버전이 낮으면 안드로이드 스튜디오가 MIPS에 대한 정보를 찾으려다가 위와 같은 에러 발생
해결방법
- gradle 버전 올린 후 안드로이드 스튜디오 재실행
- build.gradle 파일에서 gradle 버전 3.1.4 이상으로 설정
- 하지만 이미 해당 프로젝트는 gradle 버전이 3.5.2 인 상태
- ndk 버전 중 맞는 버전 apply 시켜주기 (ndk 21.4.7075529 버전으로 맞춤)
- 나의 경우 ndk 버전을 다운 그레이드 시켜주니 해당 에러는 없어졌다! 하지만 다음과 같은 에러가 발생한다🤯
🏸 이슈2 - ERROR: Unknown host CPU architecture: arm64
- 구글링 해보니 맥북 프로 M1에서 발생하는 이슈라고 한다.
- 그렇다면 windows OS 에서는 정상 동작할 수 있다는 건데, 내 컴퓨터가 맥북 M1이기 때문에 해결 할 수 밖에 없다.
해결방법
- ndk 폴더로 이동하여
ndk-build
편집 - 맥북 ndk 경로 : /…/Library/Android/sdk/ndk 참고!
- AS-IS
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$@"
- TO-BE
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
이렇게 하고서 ndk 빌드 했더니 드디어 성공!
빌드하려는 프로젝트의 경우 32비트용, 64비트용 모두 빌드가 필요해서 발생한 이슈가 아닐까 싶다.
[참고]
https://machine-woong.tistory.com/398
https://exchangetuts.com/unknown-host-cpu-architecture-arm64-android-ndk-siliconm1-apple-macbook-pro-1640617266175701
https://overface.tistory.com/m/428