一个JNI的Demo,双向调用。目前仅在mac上测试,其他系统需修改代码及脚本。
- 编辑Java文件JNIDemo、User
- 生成头文件 javac -h -jni -classpath out/production/jnidemo -d src JNIDemo
JDK11+: javac -encoding utf8 -h src -d out/production/jnidemo src/JNIDemo.java src/User.java - 编写C++文件,编译生成动态链接库 g++ src/JNIDemo.cpp -I $JAVA_HOME/include -I $JAVA_HOME/include/darwin -fPIC -shared -o libdemo.so
- 补充Java代码,调用所需的类,运行
- 编写Java代码JNICpp,准备清单文件
- 打包:jar cvfm cpp.jar src/MANIFEST.MF -C out/production/jnidemo/ JNICpp.class
- 编写C++代码,在C++中手动构建并销毁虚拟机,在中间增添要实现的内容,根据官方文档查找API实现所需的Java方法
- 编译:g++ -g src/main.cpp -I $JAVA_HOME/include -I $JAVA_HOME/include/darwin -ljvm -L $JAVA_HOME/lib/server/ -o jnicpp
- 运行测试:./jnicpp
也可使用CMake:
- ./cmake.sh
- ./build/JniDemoCpp