cygwin+ndk+eclipseのJNI呼び出しC関数


1.androidプロジェクトtestJNIの新規作成
2.TestJNIActivityに追加:
public class TestJNIActivity extends Activity {
	
	static{
		System.loadLibrary("hello");
	}
	private native String myCFunction(); 	
    /** Called when the activity is first created. */ 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        	
        String msg=myCFunction();
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();     }
}

3.プロジェクトにjniフォルダを新規作成し、その中に2つのファイルを新規作成し、それぞれAndroid.mkとhello.c内容はそれぞれ以下の通りである.
Android.mkコード
LOCAL_PATH := $(call my-dir)
include  $(CLEAR_VARS)
#  our  source  file  and  the  library  built  from  it!
LOCAL_MODULE    := hello
LOCAL_SRC_FILES := hello.c
include  $(BUILD_SHARED_LIBRARY)

hello.cコード
#include <string.h>
#include <jni.h>

jstring Java_com_jni_TestJNIActivity_myCFunction
                 (JNIEnv* env,jobject  javaThis) {
  return (*env)->NewStringUTF(env, "Hello from native C code!");
}

4.cygwin端末を開き、cdは現在のプロジェクトのjniフォルダがあるディレクトリに入り、lsの下に上の2つのファイルがあります.命令を下す
$NDK/ndk-buildはコンパイルされ、コンパイルに成功したことを示すメッセージが表示されます.
Administrator@BK /cygdrive/e/android/testJNI/jni
$ $NDK/ndk-build
Compile thumb  : hello <= hello.c
SharedLibrary  : libhello.so
Install        : libhello.so => libs/armeabi/libhello.so

その後、eclipseでF 5を押すと、libsとobjの2つのフォルダが表示され、libhelloが入っています.soファイルlibhello.TestJNIActivityで
static{
		System.loadLibrary("hello");
	}

呼び出された関数ライブラリは、呼び出されたときにhelloのみが書かれ、デフォルトではlibhelloに呼び出されます.so.
5.右クリックでプロジェクトを実行し、androidシミュレータに実行apkをインストールすると「Hello from native C code!」と表示されます.文字
OK,大功告成O(∩∩)O