* HelloWorld 안드로이드 포팅 *
작성한 어플리케이션을 안드로이드에 포함시키기 위해서는 arm-eabi 툴체인과 안드로이드
헤더/라이브러리들이 필요하다.
툴체인 및 헤더, 라이브러리는 ndk를 사용해도 되나,
플랫폼 소스에도 NDK가 포함되어 있으니 플랫폼 소스를 사용해 빌드하도록 한다.
0. 안드로이드 플랫폼 소스 다운로드
0. 관련 PATH 정보( 1.6 donut 기준이며, 플랫폼 소스위치가 ~/donut/ 인 경우 )
INCLUDE = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/include
LIB = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/lib
0. 툴체인 위치
GCC = ~/donut/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
1. helloworld.c 작성
#include <stdio.h>
int main( int argc, char** argv) {
printf("Hello world!\n");
return 0;
}
2. Makefile 작성
# 위 path 정보를 각각 기술함.
INC_PATH = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/include
LIB_PATH = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/lib
GCC = ~/donut/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
# 컴파일 플래그 설정
CFLAGS =
CPPFLAGS =
CXXFLAGS =
# 라이브러리 설정
LDFLAGS = -nostdlib \
-Wl,-rpath-link=$(LIB_PATH)
-L$(LIB_PATH) -lc -lm -lstdc++
# crt 설정
PRELINK = $(LIB_PATH)/crtbegin_dynamic.o
POSTLINK = $(LIB_PATH)/crtend_android.o
# 컴파일 설정
%.o:%.c
$(GCC) $(CFLAGS) $(CPPFLAGS) -I$(INC_PATH) -c $< -o $@
# 오브젝트 링크
helloworld:helloworld.o
$(GCC) -o hello helloworld.o $(PRELINK) $(POSTLINK) $(LDFLAGS)
3. 빌드
$ make
4. 테스트
$ adb push ./helloworld /data/.
$ adb shell
$ cd data
$ ./helloworld
Hello World!!!
* 추가
최근 NDK를 사용하는 경우 Android.mk 에 소스만 적어주는 것으로 대부분이 해결된다.
cygwin 등으로 개발환경을 구성했다면, 우선 ndk 패스를 cygwin에서 사용 가능하도록 path 등록해주고(export)...
ndk-build 커맨드를 사용해 빌드하면 간단히 컴파일이 완료된다.
예를 들어 test.cpp 를 빌드하고 싶으면,
해당 폴더에 아래 내용으로 Android.mk 파일을 생성한다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my-module
LOCAL_SRC_FILES := test.cpp
include $(BUILD_SHARED_LIBRARY)
이후 ndk-build 실행 해주면 알아서 빌드하고, 링크하고.. libs 폴더에 전달해 준다.
'프로그래밍 > Android' 카테고리의 다른 글
GDB 기본환경 (0) | 2010.03.22 |
---|---|
오픈코어 코덱 연동 시퀀스 (0) | 2010.03.18 |
오픈코어~오픈맥스 디코더 추가 (0) | 2010.02.23 |
안드로이드 플랫폼 포팅~holloworld 샘플 2 (0) | 2010.02.19 |
안드로이드 플랫폼 동적 링크 설정 (0) | 2010.02.19 |
Android system 폴더에 쓰기 (0) | 2010.02.08 |
에뮬레이터에서 data,system 디렉토리 가져오기 (0) | 2010.02.04 |
JNI 기본사항 (0) | 2010.01.15 |
플랫폼 make/ 모듈 추가 방법 (0) | 2010.01.15 |
커널 빌드하기 (0) | 2010.01.14 |