http://developer.android.com/sdk/index.html 에 밑에 보면,
ndk 를 다운받을 수 있다.
mac, window(cygwin 이용), linux 버전있는데, linux로 설치해본다.
ndk7이 4.0을 포함한 최신 버전이지만, ubuntu10. 11에서 awk 관련해서 버그가 있다. 32비트에서만 이슈가 있음. 이 부분에 대한 해결방법은 여기에 있다.
나는 ndk 6b를 사용했지만, 위의 7도 동일하게 사용할 수 있다.
리눅스(ubuntu)에 android-ndk-r6b.tar.gz을 설치한다.
tar jxvf android-ndk-r6b.tar.gz
설치는 완료했다.
이제 코드쪽을 본다.
이클립스에서 클래스 하나를 생성하고, jni 함수를 하나를 만들고, 동적 library를 읽도록 한다.
package com.google;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloJni extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(stringFromJNI());
setContentView(tv);
}
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
}
이클립스 workspace의 프로젝트에서 컴파일된 디렉토리로 들어가서
class파일을 통해서 header 파일을 만든다.
프로젝트이름\bin> javah -classpath . com.google.JniHello
그러면, header 파일이 생성된 것을 확인할 수 있다.
> dir
com_google_JniHello.h
이 파일을 이용해서 c 소스를 만든다.
#include <string.h>
#include <jni.h>
jstring
Java_com_google_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
이 파일을 linux에 설치한 ndk에 특정 위치에 둔다.
설치디렉토리/jni-test/knight/jni 폴더에 둔다.
그리고, make 파일인 Android.mk도 같이 집어 넣는다.
Android.mk 파일은 다음과 같다.
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
설치디렉토리/jni-test/knight/ 디렉토리에서 빌드한다.
설치디렉토리/jni-test/knight # ../../ndk-build
컴파일이 잘되면 이렇게 so 파일이 나온다.
설치디렉토리/jni-test/knight/libs/armeabi/libhello-jni.so 파일이 생성된다.
so파일을 이클립스단으로 복사한다.
그 전에 먼저 jni 파일과 mk 파일을 복사한다.
eclipse 프로젝트의 jni 폴더를 생성하고, jni와 mk 파일을 복사한다.
그리고, so 파일을 libs에 복사한다.
디렉토리는 이렇게 나와야 한다.
이 파일에 대해서 에뮬에서 run하면 다음과 같은 결과가 나온다.
그리고, 보드에다가도 테스트해봤다.
ok 잘돈다.
소스는 아래와 같다.
ndk 를 보면, sample 디렉토리 밑에 많은 샘플(open gl 외 다양한 예제) 들이 있다.
참조해서 만들어보면 좋다.
san-angles 라는 샘플은 움직이는 예제를 보여준다. 터치해주면 잠깐 멈추고 그러니. 테스트하기에 재미있는 예제이다.
'안드로이드-iOS-Webkit' 카테고리의 다른 글
안드로이드 JNI 개발 준비 #2 (2) | 2011.11.23 |
---|---|
android ndk r7 버그 (0) | 2011.11.23 |
안드로이드 JNI 개발 준비 #1 (1) | 2011.11.22 |
안드로이드에 탑재된 리눅스 커널 버전 확인하기 (0) | 2011.11.22 |
안드로이드 AVD 이상시 설정 날리기 (0) | 2011.11.22 |