cygwin+ndk+eclipseのJNI呼び出しC関数
1.androidプロジェクトtestJNIの新規作成
2.TestJNIActivityに追加:
3.プロジェクトにjniフォルダを新規作成し、その中に2つのファイルを新規作成し、それぞれAndroid.mkとhello.c内容はそれぞれ以下の通りである.
Android.mkコード
hello.cコード
4.cygwin端末を開き、cdは現在のプロジェクトのjniフォルダがあるディレクトリに入り、lsの下に上の2つのファイルがあります.命令を下す
$NDK/ndk-buildはコンパイルされ、コンパイルに成功したことを示すメッセージが表示されます.
その後、eclipseでF 5を押すと、libsとobjの2つのフォルダが表示され、libhelloが入っています.soファイルlibhello.TestJNIActivityで
呼び出された関数ライブラリは、呼び出されたときにhelloのみが書かれ、デフォルトではlibhelloに呼び出されます.so.
5.右クリックでプロジェクトを実行し、androidシミュレータに実行apkをインストールすると「Hello from native C code!」と表示されます.文字
OK,大功告成O(∩∩)O
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