블로그 이미지
HISONA

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30




Android 에서 디바이스 드라이버를 테스트 한다거나, 리눅스 라이브러리를 빌드하는 것과 같은, 여러가지 이유로 간단하게 C 로 작성된 테스트 어플 및 Dynamic Linkage 라이브러리와 같은 Android C Native Application 을 개발하기 위해서 해야 할 일들을 정리해 보았습니다.
다들 아시겠지만, Android 에서는 BSD 계열의 Bionic-C 의 라이브러리를 사용하고 있습니다. 그래서 GNU Toolchain 을 사용해서 작업하려면 Static 으로 빌드를 해야 하지만, 바이너리 사이즈가 커지는 단점이 있습니다. 여기에서는 Android NDK 에 포함된 bionic-C 라이브러리를 사용해서 Native 바이너리를 생성하는 방법을 설명합니다.
그리고, 여기에서는 Windows 에서 작업하는 것을 기준으로 설명합니다. 이유는 리눅스에서 작업하기 위해서는 별도의 PC나 Vmware 와 같은 프로그램이 필요하고, Windows 에서 개발하는 것이 더 편리하기 때문입니다. 또한, Windows 에서 작업하는 방법을 안다면, 리눅스에서 개발하시던 분은 리눅스에서도 동일하게 작업이 가능하실 것으로 생각됩니다.

1. Andorid NDK 설치

- 먼저 http://dl.google.com/android/ndk/android-ndk-r4b-windows.zip 에서 Android NDK 를 다운로드 받습니다.  
- 적당한 위치에 android-ndk-r4b-windows.zip 파일의 압축을 풀면 됩니다.
- 저는, “D:\android-ndk-r4b” 에 설치하였습니다.

2. MinGW, Msys 설치

- Android 개발 환경이 Linux 기반으로 되어 있기 때문에, Windows 에서 리눅스 개발 환경을 제공해 주는 것입니다. MinGW 와 Msys 에 대해서는 이전 포스트의 설치 방법을 참조하시면 될 것 같습니다(http://ohadev.tistory.com/6)
- Android NDK 에서는 Cygwin(MinGW 와 같이 Linux 개발 환경을 제공) 을 사용해서 컴파일 하도록 하고 있으나, 개인적으로 MinGW 를 더 선호하기 때문에 MinGW 를 기준으로 설명합니다. Cygwin 을 사용하시는 분들은 Cygwin 을 사용하셔서 진행하셔도 됩니다.

3. Arm Cross-compiler Toolchain 설치

- CodeSourcery 에서 Windows 설치용 Arm-Linux Toolchain  을 다운로드 해서 설치합니다.
(http://www.codesourcery.com/sgpp/lite/arm/portal/package6491/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi.exe)
- 저는, “D:\Android\arm-2010q1” 에 설치하였습니다.
- CodeSourcery Toolchain 은 Cygwin 용 dll 을 사용하지 않기 때문에, Cygwin 을 설치하지 않으셔도 컴파일을 하실 수 있습니다. (제가 MinGW 를 사용하는 이유가 MinGW 로 Windows Application 을 만들면 Cygwin 과 같이 별도의 dll 을 포함 시키지 않아도 되기 때문입니다.)
- Cygwin 을 사용하면 Android NDK 에 포함되어 있는 Toolchain (android-ndk-r4b\build\prebuilt\windows\arm-eabi-4.4.0) 을 사용해서 컴파일할 수 있을 것 같은데 저는 잘 안되는군요.

4. Makefile 작성

예제파일 : 


- 본 문서를 작성하기 위해서 http://dustinlee.egloos.com/1973505 를 참고하였습니다.
- Makefile 에서 주의하실 점은, Android NDK 에 포함되어 있는 Bionic-C 라이브러리를 사용하기 위해서, GNU 에 포함된 라이브러리를 사용하지 않도록, “-nostdlib”  Link 옵션을 주셔야 합니다.
- 또한, LDFLAGS 에서 dynamic-linker 를 지정할 때 그냥 path 를 “/system/bin/linker” 를 지정하면 msys 에서 상대 Path로 인식해서 앞에 D:/MinGW/msys/ 를 자동으로 붙여버리기 때문에, 절대 경로를 지정하기 위해서 “//system/bin/linker” 로 지정하셔야 합니다.
- 예제에서 사용한 Makefile 은 다음과 같습니다.

TARGET = hello

CROSS  = /d/Android/arm-2010q1/bin/arm-none-linux-gnueabi-
INCDIR = /d/Android/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/include
LIBDIR = /d/Android/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib

CC  = $(CROSS)gcc
AR  = $(CROSS)ar
LD  = $(CROSS)ld
NM  = $(CROSS)nm
RANLIB  = $(CROSS)ranlib
STRIP = $(CROSS)strip

INCLUDE = -I. -I$(INCDIR)

CFLAGS = -Wall
LDFLAGS = -nostdlib -Wl,--dynamic-linker,"//system/bin/linker" -L$(LIBDIR) -lc -lm -lstdc++ -ldl

# crt
CRTOBJ = $(LIBDIR)/crtbegin_dynamic.o

# application file
APPSOURCES = main.c
APPOBJS = $(APPSOURCES:.c=.o)

# define the rule
.SUFFIXES:.c .o
.c.o:
@echo Compiling: $<
$(CC) -c $(CFLAGS)  $(INCLUDE) -o $@ $<

all: app

app: $(APPOBJS)
@echo Linking: $(TARGET)
$(CC) -o $(TARGET) $(APPOBJS) $(CRTOBJ) $(LDFLAGS)
$(STRIP) -s $(TARGET)

clean:
@rm -vf $(APPOBJS) $(TARGET)

5. 실행

- Android emulator 를 실행한 다음, adb 를 이용하여 컴파일된 파일을 실행하시면 다음과 같은 결과를 얻으실 수 있습니다.






안녕하세요?

버전 업그레이드가 너무 늦었서 죄송합니다. ... 요즘 일이 많아서 작업할 시간이 없었네요.. ㅎㅎ
SonaMemoryDS v0.4 에서는 망각곡선 암기법을 적용한 단계별 학습기능이 추가가 되었습니다.
각 단계별로 암기한 단어들은 "암기" 버튼을 누르면 단계별 일정시간 뒤에 다음 단계에서 
반복 학습하실 수 있습니다.

또한 외부 음성파일(mp3) 우선 재생 기능으로 변경되었습니다.
그리고, 이번 버전부터 음성파일을 포함 파일과 음성파일을 삭제한 버전으로 두가지 버전으로
배포됩니다.

감사합니다..



1. 음성파일 제거 버전


2. 음성파일 포함 버전





안녕하세요?

SonaMemoryDS v0.2 에서 외부 음성파일(mp3) 재생 안되던 버그를 수정하였습니다.
smd 파일이 있는 디렉토리의 sound 디렉토리에 mp3 파일을 넣으시면 됩니다.
(sound/a/ 와 같이 알파벳으로 디렉토리를 만들지 않고, 그냥 sound 디렉토리에
 mp3 파일을 넣으시면 됩니다.)

그리고, 제가 틈틈히 만들고 있는거라 기능 추가에 시간이 많이 걸립니다.
그래서 업데이트가 늦어지더라도 양해해 주시기 바랍니다.

감사합니다..


이전 1 2 3 4 5 다음