[ 차 례 ]
0. JDK, Android SDK, 이클립스 다운로드 및 설치
(다른 페이지 참조)
1. Android NDK 다운로드 및 설치
(http://developer.android.com/tools/sdk/ndk/index.html)
2. 시그윈(cygwin) 다운로드 및 설치
devel 전부 체크하고 설치가 맘편하다. (edit의 vim 포함)
3. C/C++ 라이브러리 함수를 호출하는 안드로이드(JAVA) 프로젝트
사전 작업
cygwin 안에 NDK 폴더에서 이클립스에서 New andorid project를 만든다.
그리고 한번 실행해준다.
$pwd
/home/k1rha/android-ndk-r8/
$cd smash //내가 만든 프로젝트
$ NdkMethod.java // 자바파일 생성
(클래스 명명 규칙에 어긋나는 JNI-function 라는 이름같은 것도 오류를 뱉어 낸다. )
------------------------------------------------------------------------
public class NdkMethod {
static{
System.loadLibrary("NdkMethodLibrary");
}
public native int NDKTest(int a, int b);
}
-------------------------------------------------------------------------
$pwd
$/home/k1rha/android-ndk-r8/PROJECT/smash/bin/classes/
(반드시 classess 에서 명령어를 쳐준다 이유는 헤더를 만들때는 폴더를 들어가는게 아니라 패키지명을 .으로 입력해줘야 하기 때문이다.)
$javah edge.smash.NdkMethod //여기서는 폴더가 .으로 패키지를 이어준다.
아래와 같은 파일이 만들어져 있다.
---------------------------edge_smash_NdkMethod.h--------------------------------------
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class edge_smash_NdkMethod */
#ifndef _Included_edge_smash_NdkMethod
#define _Included_edge_smash_NdkMethod
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: edge_smash_NdkMethod
* Method: NDKTest
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_edge_smash_NdkMethod_NDKTest
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
--------------------------------------------------------------------------------
우리는 여기서 JNIEXPORT jint JNICALL Java_edge_smash_NdkMethod_NDKTest
(JNIEnv *, jobject, jint, jint); 를 사용할수 있다.
4. JNI C/C++ 라이브러리 만들기
-------------------------------- edge_smash_NdkMethod.c ---------------------------------------
#include "edge_smash_NdkMethod.h"
JNIEXPORT jint JNICALL Java_edge_smash_NdkMethod_NDKTest(JNIEnv * pEnv, jobject object, jint a, jint b){
return a+b;
}
---------------------------------------------------------------------------------
4.3 시그윈에서 *.so 로 빌드하기
이두개의 파일을 프로젝트 jni 폴더를 만든뒤 집어넣는다.
$pwd
/home/k1rha/android-nkd-r8/PROJECT/smash
$mkdir jni
$ls
edge_smash_NdkMethod.c edge_smash_NdkMethod.h
여기서 파일 Android.mk 파일을 작성해서 넣어준다
------------------------------ Android.mk --------------------------------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkMethodLibrary
LOCAL_SRC_FILES := edge_smash_NdkMethod.cpp
include $(BUILD_SHARED_LIBRARY)
--------------------------------------------------------------------------------------
생성되는 모듈이름
LOCAL_MODULE := tjssm_ndktest_NdkMethod
소스파일 이름
LOCAL_SRC_FILES := tjssm_ndktest_NdkMethod.cpp
$ls
edge_smash_NdkMethod.c edge_smash_NdkMethod.h Android.mk
$pwd
/home/k1rha/android-nkd-r8/PROJECT/smash
$ndk-build
위와같이 하고나면 libs 에 so 파일이 생긴다.
5. 라이브러리와 안드로이드 프로젝트 합치고 실행하기
1.System.loadLibrary("JNItest"); 를 사용하여 so 파일을 로딩한다.
이때 생성된 so 파일에는 제일 앞에 lib가 붙지만 loadLibrary()에 적어줄대는 lib를 빼고 넣어야한다.
그냥 생성된 .h 파일의 이름과 동일하게 넣으면 된다.
위의 순서대로 진행하면된다.
'Android_Programma' 카테고리의 다른 글
[android] [펌] SurfaceView 의 이해와 CameraView 띄우기 (0) | 2012.07.09 |
---|---|
[android] [펌] SurfaceView를 이용한 움직이는 공 만들기 (0) | 2012.07.09 |
[JAVA] 비동기 소켓 클라이언트 (async socket client in JAVA) (0) | 2012.06.14 |
android 에 phone gap 설치하기 (펌) (0) | 2012.03.21 |
안드로이드 가로로 돌아가는 기능 막기 (0) | 2012.03.21 |