1,先写java类,如下:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView txt=(TextView) findViewById(R.id.text);
txt.setText(getMsg());
}
static{
System.loadLibrary("jniTest");
}
public native String getMsg();
}
2.生成.h头文件(c/c++都可以使用)
2.1进入bin下的classes文件 D:\a_workspace\JNITest\bin\classes
2.2使用javah 生成.h文件
D:\a_workspace\JNITest\bin\classes>javah -classpath . -jni com.yao.jnitest.MainActivity
2.3:有的时候,生成H文件的时候,发现报错找不到Activity这个类
我就把native方法全部放到一个类里面,使用的时候,先new,再调用
3.把生成的.h文件放到jni文件夹下面
4.jniTest.cpp代码如下:
#include <jni.h>
#include "com_yao_jnitest_MainActivity.h"
#include <android/log.h>
#define LOG_TAG "jniTest"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
JNIEXPORT jstring JNICALL Java_com_yao_jnitest_MainActivity_getMsg
(JNIEnv * env, jobject clazz)
{
return env->NewStringUTF((char *)"谢谢");
}
//onLoad方法,在System.loadLibrary()执行时被调用
jint JNI_OnLoad(JavaVM* vm, void* reserved){
LOGE("JNI_OnLoad startup~~!");
return JNI_VERSION_1_4;
}
//onUnLoad方法,在JNI组件被释放时调用
void JNI_OnUnload(JavaVM* vm, void* reserved){
LOGE("call JNI_OnUnload ~~!!");
}