본문 바로가기

프로그래밍/Android

안드로이드 플랫폼 HelloWorld

 

* 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 폴더에 전달해 준다.