MacOS X에서 brew를 이용하여 Android NDK 13b 설치
보통 안드로이드 개발시에 Android Studio를 사용 하거나 sdkmanager
를 사용해서
SDK나 NDK등등의 각종 패키지가 버전 별로 설치 가능 합니다.
하지만 자동화 등의 이유로 별도의 위치에 설치하고자 하는 경우도 있습니다. MacOS X에서는 외부 패키지를 설치하기 위해 brew 를 많이 사용하는데, 여기에는 Cask 라고 하는 바이너리 패키지 설치를 위한 기능이 있습니다. Cask에는 이미 이런 목적으로 android-ndk 패키지가 있습니다만 최신 버전을 설치하는 관계로, 오래된 특정 버전을 사용하고 하는 경우에는 약간의 트릭을 사용해야 합니다.
제 경우 작업을 위해 NDK 버전 13b를 사용해야 하는데, 물론 수동으로 받아서 설치 하는 것도 가능합니다만 관리를 약간 편하게 하기 위해서 Cask 소스를 변경하여 brew 를 사용해서 Android NDK 13b 를 설치하는 방법에 대해서 설명합니다.
android-ndk를 brew를 이용하여 설치하기
보통은 다음과 같이 설치할 수 있습니다.
% brew cask install android-ndk
하지만 이 경우 항상 최신 버전을 받아서 설치하게 됩니다. 이 글을 쓰는 현재 버전 19을 설치 합니다.
brew는 이전 버전을 설치하는 좋은 방법이 존재하지 않기도 하는데, github에서 이전 버전을 받아서 설치하는 방법이 있습니다만 공교롭게도 cask의 android-ndk 소스는 가장 오래된 것이 버전 14부터 시작 합니다. 따라서 13b 자체는 Cask 소스가 존재하지 않으므로 다음과 같은 과정을 거쳐야 합니다.
brew 의 android-ndk 설치 소스
brew 의 개별 패키지의 Cask 파일은 github에서 android-ndk의 경우 다음 위치 에서 찾을 수 있습니다. 이것을 다운로드합니다.
% wget https://raw.githubusercontent.com/Homebrew/homebrew-cask/master/Casks/android-ndk.rb
버전 19의 경우 android-ndk.rb는 다음과 같이 시작합니다:
cask 'android-ndk' do
version '19'
sha256 '04159ade2fc5c7d055248cf65664039b8596f4b9ee3fbc44a9bf2ce2ee28d95d'
# dl.google.com/android/repository/android-ndk was verified as official when first introduced to the cask
url "https://dl.google.com/android/repository/android-ndk-r#{version}-darwin-x86_64.zip"
name 'Android NDK'
homepage 'https://developer.android.com/ndk/index.html'
...
파일을 잘 보면 Cask는 버전 19을 위한 것이며 sha256 체크섬과 다운로드 위치가 적혀 있습니다. 원본을 받는 URL도 적혀 있는데 여기서 버전만 바꾸어서 NDK 13b를 다운로드 받습니다.
% wget https://dl.google.com/android/repository/android-ndk-r13b-darwin-x86_64.zip
파일을 다 받았으면 sha256 체크섬을 계산해 둡니다. brew에서 md5sha1sum
패키지를
설치하면 들어 있는 shasum
유틸리티로 계산합니다:
$ shasum -a 256 android-ndk-r13b-darwin-x86_64.zip
eba299f1cdd9059e635d159dbe71678cea9f00efb3ef9b56083c7a09dff665bf android-ndk-r13b-darwin-x86_64.zip
이제 위의 android-ndk.rb
의 소스에서 버전명과 체크섬을 위에서 구한 값으로
변경 합니다. 아래 diff 를 적용하거나 직접 변경 하세요:
--- android-ndk-19.rb 2019-02-15 17:17:07.000000000 -0800
+++ android-ndk.rb 2019-02-17 15:29:05.000000000 -0800
@@ -1,6 +1,6 @@
cask 'android-ndk' do
- version '19'
- sha256 '04159ade2fc5c7d055248cf65664039b8596f4b9ee3fbc44a9bf2ce2ee28d95d'
+ version '13b'
+ sha256 'eba299f1cdd9059e635d159dbe71678cea9f00efb3ef9b56083c7a09dff665bf'
# dl.google.com/android/repository/android-ndk was verified as official when first introduced to the cask
url "https://dl.google.com/android/repository/android-ndk-r#{version}-darwin-x86_64.zip"
주의할 것은 설치시 파일명은 패키지 이름과 일치해야 하므로 android-ndk.rb
이어야
합니다.
설치
이제 설치해 봅니다. brew cask
로 설치시에는 보통 brew cask install <패키지이름>
을 사용하는데
패키지 이름에는 URL도 올 수 있습니다. 로컬 파일의 경우에는 file:///
를 앞에 붙이면
로컬 파일을 지정할 수 있으므로, 위에서 변경된 android-ndk.rb 파일의 전체 경로명을
지정하면 됩니다. 신규 설치의 경우 install
명령을,
이미 설치된 android-ndk가 있다면 재설치를 위해서 reinstall
명령을 사용하면 됩니다.
신규 설치의 경우 다음과 같이 실행하면 이제 Android NDK 버전 19 대신에
13b 를 설치하게 됩니다.
(설치에는 시간이 좀 걸립니다)
% brew cask install file:///Users/junho/android-ndk.rb
==> Downloading file:/Users/junho/android-ndk.rb.
######################################################################## 100.0%
==> Caveats
You may want to add to your profile:
'export ANDROID_NDK_HOME="/usr/local/share/android-ndk"'
==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/android-ndk-r13b-darwin-x86_64.zip
Already downloaded: /Users/junho/Library/Caches/Homebrew/downloads/65a6a66e139e460180b51cf64e9571a101d62c9a555443b2d99243070c1dee18--android-ndk-r13b-darwin-x86_64.zip
==> Verifying SHA-256 checksum for Cask 'android-ndk'.
==> Uninstalling Cask android-ndk
==> Unlinking Binary '/usr/local/bin/ndk-build'.
==> Unlinking Binary '/usr/local/bin/ndk-depends'.
==> Unlinking Binary '/usr/local/bin/ndk-gdb'.
==> Unlinking Binary '/usr/local/bin/ndk-stack'.
==> Unlinking Binary '/usr/local/bin/ndk-which'.
==> Purging files for version 13b of Cask android-ndk
==> Installing Cask android-ndk
==> Linking Binary 'ndk_exec.sh' to '/usr/local/bin/ndk-build'.
==> Linking Binary 'ndk_exec.sh' to '/usr/local/bin/ndk-depends'.
==> Linking Binary 'ndk_exec.sh' to '/usr/local/bin/ndk-gdb'.
==> Linking Binary 'ndk_exec.sh' to '/usr/local/bin/ndk-stack'.
==> Linking Binary 'ndk_exec.sh' to '/usr/local/bin/ndk-which'.
🍺 android-ndk was successfully installed!
이제 완성입니다! 위에서 설명이 나왔지만 ANDROID_NDK_HOME
환경 변수를 설정해서
현재 설치된 버전을 지정하도록 해야 합니다.
export ANDROID_NDK_HOME="/usr/local/share/android-ndk"'
설치가 제대로 되었는지 알기 위해서 다음 명령을 실행해 봅니다. android-ndk-r13b
아래의 gcc를 사용할 수 있는 것을 알 수 있습니다.
% which ndk-which
/usr/local/bin/ndk-which
% ndk-which gcc
/usr/local/Caskroom/android-ndk/13b/android-ndk-r13b/prebuilt/darwin-x86_64/bin/../../../toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc
끝으로
원래 brew에는 pin 기능이 있어서 설치된 버전을 고정해서 업그레이드를 막는 기능이 있는데 Cask 로 설치된 패키지에는 이 글을 쓰는 현재 pin 기능이 없습니다. 이 부분은 향후 추가되면 좋겠네요.