publicclassPrintf_Jni {
static{
System.loadLibrary("com_nedu_jni_helloword_printf-jni");
}
publicnativevoidprintHello();
}
2、javac编译
进入java文件所在路径,调用javac命令,如图:
第二步:使用javah命令生成.h头文件,如图:
这个要回到src目录下,不知道什么原因,如果在上面的javac路径下会报错,如图:
使用javah命令生成的头文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_nedu_jni_helloword_Printf_Jni */
#ifndef _Included_com_nedu_jni_helloword_Printf_Jni
#define _Included_com_nedu_jni_helloword_Printf_Jni
#ifdef __cplusplus
extern"C"{
#endif
/*
* Class: com_nedu_jni_helloword_Printf_Jni
* Method: printHello
* Signature: ()V
*/
JNIEXPORT voidJNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
第三步:编写c文件,代码如下:
#include
#include
#include "com_nedu_jni_helloword_Printf_Jni.h"
JNIEXPORT voidJNICALL Java_com_nedu_jni_helloword_Printf_1Jni_printHello
(JNIEnv *e, jobject j)
{
printf("Hello world!");
}
第四步,书写Android.mk文件,编译c文件
Android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := com_nedu_jni_helloword_printf-jni
LOCAL_SRC_FILES :=Printf_Jni.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE := com_nedu_jni_helloword_printf-jniLOCAL_MODULE := com_nedu_jni_helloword_printf-jniLOCAL_MODULE 表示so文件名
LOCAL_SRC_FILES 需要编译的文件
第五步:使用so文件:
通过下面的代码加载so文件
System.loadLibrary("com_nedu_jni_helloword_printf-jni");
通过下面的代码加载so文件通过下面的代码加载so文件
调用如下:
Printf_Jni print=newPrintf_Jni();
print.printHello();