android-ndk-r4-windows-crystax-4 이다.

NDK를 사용하고 안드로이드에 OpenCV를 올리기 위해서는 정식 NDK 버전이 아닌 crystax ndk 버전이 필요하다고 한다?? 정식 NDK로 잘 안되는 경우는 이 파일을 받아서 사용하길 바란다.


다운로드

NDK를 이용한 기본 예제이다. 간단한 프로그래밍은 기본예제의 변형으로 가능할 것이다. 더 깊은 내용은 나중에 포스팅 하도록 하겠다.


NDK 설치 완료후 제대로 설치가 되었는지 이 예제를 통해서 확인해보길 바란다. 먼저 프로젝트를 하나 생성한다. 프로젝트명은 HelloJNI로 하였다.


프로젝트 생성후 jni라는 이름의 폴더를 하나 생성한다. 이 폴더안에 2개의 파일을 생성할 예정이다.

2개의 파일 이름은 Android.mkhello-jni.c 이다.


jni폴더 생성후 [마우스 오른쪽 클릭] -> [New] -> [File] 을 눌러 파일을 생성한다.




위의 그림의 방식처럼 hello-jni.c 와 Android.mk 파일을 만들었다면 두 파일에 내용을 넣는다. 먼저 hello-jni.c 파일부터 내용을 넣겟다.


hello-jni.c

#include <string.h>
#include <jni.h>

jstring Java_tjssm_hellojni_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz )
{

    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

NDK 설치를 확인하기 위한 간단한 예제이기 때문에 자세한 설명은 생략하도록 하겠다. 

여기서 주의할 점은 jstring Java_tjssm_hellojni_MainActivity_stringFromJNI()이다.

jstring은 return 타입이고 그다음은 Java_패키지명1_패키지명2_class명_class에서만든메소드명() 이다.


ex) return타입이 jstring 이고 패키지명이 tjssm.hellojni이고 class명이 MainActivity이고, class에 만들어 놓은 메소드명이 stringFromJNI 이기때문에jstring Java_tjssm_hellojni_MainActivity_stringFromJNI() 이라고 쓴다.


여기서 주의할 점은 패키지명이나 class명에 '_'기호가 들어갈 경우 에러가 난다는 것이다. ndk를 이용한 프로그래밍에서는 '_'기호를 넣지 않도록 한다.


다음은 Android.mk 파일에 내용을 넣겠다.


Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE 은 c파일의 이름

LOCAL_SRC_FILES 에는 c파일의 이름에 .c를 붙여주면 된다.


다음은 JAVA소스이다. jni를 호출하는 MainActivity의 소스이다.


MainActivity.java

public class MainActivity extends Activity {
	
	private TextView tv;
	
	static {
		System.loadLibrary("hello-jni");
	}
	
	public native String stringFromJNI();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		tv = (TextView) findViewById(R.id.tv_result);
		tv.setText(stringFromJNI());
	}
}

System.loadLibrary에 이전에 만들었던 c파일의 이름인 hello-jni를 넣어준다. 

public native String stringFromJNI() 라는 메소드가 jni와 연결된다.

return 타입이 String 이므로 이전에 작성했던 hello-jni로부터 String을 return 받아 tv라는 TextView로 값이 전달된다.


위와 같이 소스를 작성하였다면 ndk-build를 실행한다. cygwin 폴더안의 android-ndk폴더를 환경변수로 등록을 하였다면 cmd 창을 실행하여 현재 작성한 프로젝트 파일의 경로로 이동한다. 그후에 ndk-build라는 명령어를 입력하면 현재 프로젝트의 libs->armeabi 라는 폴더가 생기며 폴더안에 파일이 생성되어 있을것이다.


이제 이 프로젝트를 실행시키면 다음과 같은 결과를 얻을 수 있다.



매번 cmd창을 이용하여 ndk build를 할 수는 없으니 다음에는 이클립스에서 ndk build하는 방법을 알아보도록 하겠다.



2014/01/27 - [Programming/안드로이드] - [안드로이드] Eclipse에서 NDK-build 하기



안드로이드 프로그래밍에서 C나 C++ 언어를 사용하기 위해서는 NDK를 설치하여야 한다. NDK 설치 방법에 대해 알아보도록 하자.


Cygwin 설치

NDK를 설치하기 위해서는 Cygwin을 먼저 설치하여야 한다.


다운받기


각자 컴퓨터 사양에 맞는 파일을 다운받는다.



다운이 완료된 설치파일을 실행한다.



인터넷에서 파일을 받는 항목 선택



경로는 C:\cygwin 으로 설정한다.



패키지 파일을 다운로드할 폴더를 지정한다. 어느 경로를 지정하던지 상관없다.



인터넷 연결 선택



다운로드 사이트를 선택한다. 전세계적으로 사이트가 있는데 한국사이트는 없는듯 하다 ㅠㅠ 가까운 일본 사이트를 선택하도록 하자



다음을 누르면 아래와 같은 화면이 뜨는데 항목중에 Devel 항목이 Default로 표시되어 있을것이다. 클릭하여 Install로 바꿔주고 다음을 누른다.



다음을 누르면 엄청난 시간이 걸린다.. 잠시 쉬도록 하자



완료가 되면 다음과 같은 창이 뜬다.



이렇게 Cygwin 설치가 완료되었다.


환경변수 등록

환경변수를 등록하자

[내컴퓨터] -> [속성] -> [고급] -> [환경변수] 에서 시스템 변수Path 값을 편집한다.

C:\cygwin\bin;

C:\cygwin\usr\include;

두개의 환경변수를 등록한다.



환경변수 등록후 Cygwin을 실행하면 다음과 같은 화면이 나올 것이다.

이렇게 Cygwin설치를 완료한다.



NDK 설치

이제 NDK를 다운받아 설치하도록 하자


다운받기


각자 컴퓨터에 맞는 사양의 파일을 다운받는다.



다운로드 받은 파일을 압축 해제후 폴더안의 android-ndk-r9c(android-ndk-버전) 폴더를 C:\cygwin\home\Administrator 폴더로 이동시킵니다. (C:\cygwin\home\사용자계정)



이제 같은 경로에 있는 .bashrc파일을 수정한다. .bashrc파일을 이클립스에 드래그해서 열고 맨 아래에 다음 코드를 추가한다.

export ANDROID_NDK_ROOT=/home/사용자계정/ndk버전

ex) export ANDROID_NDK_ROOT=/home/Administrator/android-ndk-r9c



NDK를 이용한 프로그램을 작성한뒤 ndk build를 하기위해 android ndk의 폴더의 경로를 환경변수로 설정한다.

C:\cygwin\home\Administrator\android-ndk-r9c; (C:\cygwin\home\사용자계정\android-ndk-r9c)


이렇게 안드로이드 NDK 개발환경 구축이 완료되었다.


2014/01/27 - [Programming/안드로이드] - [안드로이드] NDK 기본 예제


2014/01/27 - [Programming/안드로이드] - [안드로이드] Eclipse에서 NDK-build 하기


+ Recent posts