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中按F5刷新,会出现2个文件夹,分别为libs和obj,里面都有libhello.so文件.libhello.so就是要TestJNIActivity中

static{
		System.loadLibrary("hello");
	}

调用的函数库,其中调用时只写hello,默认会调用到libhello.so。

5.右键项目运行,在android模拟器中安装运行apk会显示"Hello from native C code!"字样

OK,大功告成O(∩_∩)O

你可能感兴趣的:(cygwin,jni,NDK)