내가 CMake를 사용해 안드로이드에서 빌드하는 방법에 대한 정리이다.
우선 안드로이드, NDK를 사용하는 환경에서는 GCC를 일반적인 환경에서와 달리 추가적으로 설정해야 할 것들이 많은데, 이를 쉽게 할 수 있도록 하는 스크립트로
android-gcc가 있어서 이를 사용해 보았다. 하지만 CMake를 통해 빌드 하기엔 다음과 같은 문제가 있었고 다음과 같이 수정하였다.
- os.system을 사용하여 실행하기 때문에 스크립트로 생성한 명령의 길이에 제한이 있다. 하지만 CMake와 같은 툴을 사용하여 만든 Makefile은 1024 이상의 매우 긴 명령이 생성 되기 때문에 적절치 않다. 그래서 스크립트 파일에 명령을 넣고 실행하게 수정하였다
- Python으로된 스크립트는 리눅스에서는 문제 없지만 윈도우 환경에서 사용하는 경우도 고려 하여 py2exe를 사용하여 실행 파일을 만들어 실행하게 하였다.
- CMake의 경우 gcc의 prefix를 사용하여 다른 ar과 같은 툴들을 검색한다. 즉 arm-eabi-gcc면 arm-eabi-ar을 검색한다. 이때 andro-gcc로 gcc를 설정하면 정상적으로 컴파일 하지 못함으로 다른 툴들의 prefix를 andro로 변경한 복사본을 만드는 스크립트를 만들었다.
- 윈도우에선 exe가 아니면 실행에 문제가 생기는 경우가 있다. 이를 위해 py2exe를 통해 exe를 만들어 실행하도록 하였다.
그리고 이를 CMake로 Makefile을 만드는 과정을 Toolchain을 통해 특정 스크립트를 실행하면 돌아가도록 세팅 하였다.
설치 방법
윈도우즈
펼쳐두기..
- 우선 python, py2exe, ndk, cygwin을 설치한다.
- 제어판->시스템->고급 시스템 설정->환경 변수를 연다.
- PATH라는 값에 Python의 경로를 추가 해 준다.
ex) C:\Python26;E:\Portable\Gnuwin32\bin;E:\Android_DEV\android-sdk-windows\tools;C:\OpenCV2.1\bin;.... - 새로 만들기 버튼을 눌러 NDK를 만들고 ndk를 설치한 경로를 값으로 설정한다.
- 탐색기를 모두 닫은 후 탐색기를 열어 andro-gcc가 설치된 경로로 간다
- comp.bat를 실행한다.
리눅스
펼쳐두기..
- python, ndk를 설치한다.
- 환경 변수를 수정한다. 여기선 .bash_profile을 수정하였지만 시스템에 따라 다른 파일일 수 있다. 우분투라면 /etc/environment 에서 수정하면 된다.
vi ~/.bash_profile
export NDK=/home/..../android-ndk-r4b
export NDK_BIN=$NDK/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
export PATH=$PATH:$NDK_BIN
- install_linux.sh의 권한을 변경한다.
chmod 755 install_linux.sh
- install_linux.sh를 실행한다.
예제
CMakeLists.txt
펼쳐두기..
ADD_EXECUTABLE(test
test.cpp
)
test.cpp
펼쳐두기..
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
printf("hello world\n");
return 0;
}
위와 같은 파일이 A라는 디렉토리에 있다고 가정하면 빌드 하는 방법은 다음과 같다.
우선 andro-gcc/CMake에 있는 파일을 소스가 있는 디렉토리 A로 복사한다.
configure-android를 실행한다. (권한 설정이 안되 있으면 chmod 755 configure-android를 실행한다)
build-android 디렉토리로 이동한다.
make를 실행하면 test 파일이 생성 된다.
이를 adb를 이용하여 파일을 넣고 실행하면 정상적으로 실행 되는 걸 볼 수 있다.
andro-gcc 파일은 이 링크로 받으면 된다.
andro-gcc_1.7z질문사항은 리플로 받습니다.
댓글을 달아 주세요
안녕하세요 ㅠㅠ 위에 생명의 돌님과 같은 고민을 하고있는 한사람 입니다 ㅠㅠ
이래저래 삽질하다가 이 웹사이트를 들어왔는데!!! 의욕이 솟구치네요^^
위에 올려두신 빌드된 파일을 제가 받을수있을까요... 링크가 깨진듯해서요 ㅠㅠ
혹시 방법이나 여러모로 도움을 좀 받고싶습니다 ㅠㅠ
조언해주실말씀이나 그런것들좀 부탁드릴게요 ㅠㅠ
감사합니다 !!
이메일 : jandibaby@gmail.com
안녕하세요~
저도 Ogre3D를 안드로이드에 포팅해보려고 합니다.
하지만, 리눅스나 우분투를 첨 쓰다보니 영 더듬거리게 되네요 ;
올려두신 라이브러리들 안드로이드용으로 크로스 컴파일하는
방법만이라도 좀 공유가 가능할지요?
WinCE는 좀 해봤는데 안드로이드나 리눅스에 약해서 -_-;
이래저래 컴파일도 못하고 삽질만 하고 있네요 ^^;
포스팅해주셔도 감사하고 이메일 주셔도 감사하겠습니다.
즐거운 주말되세요
이메일 : cybercop99@hotmail.com