一、编写java文件,如HelloWorld.java
package com.sample.jni; public class HelloWorld { public native void sayHello(); }
/* DO NOT EDIT THIS FILE – it is machine generated */ #include <jni.h> /* Header for class com_sample_jni_HelloWorld */ #ifndef _Included_com_sample_jni_HelloWorld #define _Included_com_sample_jni_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: com_sample_jni_HelloWorld * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_com_sample_jni_HelloWorld_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif三、在.cpp文件中编写
/usr/include/c++/4.2.1 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers3.5步骤:
我们要为项目设置头文件的位置,需要设置到NDK的指定目录下:
内容:/Users/lanhongmei/application_files/installing_files/android-ndk-r8d/platforms/android-14/arch-arm/usr/include
#include <jni.h>
#include <iostream>
#include "com_sample_jni_HelloWorld.h"
using namespace std;
JNIEXPORT void JNICALL Java_com_sample_jni_HelloWorld_sayHello
(JNIEnv *env, jobject thiz){
cout<<"你好!"<<endl;
}
编译成功:
生成的libJniSample.dylib在Debug目录下。
为了使用这个库,我们需要把它放到java代码运行时可加载的路径下,最简单的办法是放到项目的根目录下。
还有个问题,mac下加载jni库,java需要该库的扩展名是:jnilib
因此,我将libJniSample.dylib改名为libHelloWorld.jnilib存放在项目根目录下:
下面是调用的代码:
package com.sample.jni;
public class HelloWorld {
public native void sayHello();
static{
System.loadLibrary("HelloWorld");
}
public static void main(String[] args) {
new HelloWorld().sayHello();
}
}
运行结果: