本文章僅作為個人筆記
-
創(chuàng)建調(diào)用jni的java類
package www.mys.com.sbjni.utils; public class NativeUtils { static { System.loadLibrary("NativeUtils"); } public static void main(String[] args) { String jniStr = getJniStr(); System.out.println("jniStr=" + jniStr); } public static native String getJniStr(); }
-
生成相應(yīng)的class文件和jni頭文件口锭,并把頭文件移動到native文件夾內(nèi)
mkdir src/main/native mkdir src/main/native/inc mkdir src/main/native/src cd src/main/java javac www/mys/com/sbjni/utils/NativeUtils.java javah www.mys.com.sbjni.utils.NativeUtils mv com_mys_com_sbjni_utils_NativeUtils.h ../native/inc/NativeUtils.h rm www/mys/com/sbjni/utils/NativeUtils.class
-
在src/main/native/src創(chuàng)建相應(yīng).cpp文件
#include "NativeUtils.h" JNIEXPORT jstring JNICALL Java_www_mys_com_sbjni_utils_NativeUtils_getJniStr (JNIEnv *env, jclass type) { return env->NewStringUTF("This is jniStr."); }
-
在src/main/native創(chuàng)建CMakeLists.txt文件
cmake_minimum_required(VERSION 3.6) project(NativeUtils) set(CMAKE_CXX_STANDARD 14) file(GLOB CORE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/inc ) if (CMAKE_SYSTEM_NAME MATCHES "Windows") message("system is windows.") include_directories( $ENV{JAVA_HOME}/include $ENV{JAVA_HOME}/include/win32 ${CORE_INCLUDE_DIRS} ) else () message("system is not windows.") include_directories( $ENV{JAVA_HOME}/include $ENV{JAVA_HOME}/include/linux ${CORE_INCLUDE_DIRS} ) endif () add_library(NativeUtils SHARED src/NativeUtils.cpp ) target_link_libraries(NativeUtils)
-
環(huán)境搭建
-
windows
安裝cmake
在msys官網(wǎng)下載站相應(yīng)文件安裝(若安裝了vs可不安裝)
-
打開 ming64.exe 執(zhí)行
pacman --noconfirm -Syu
pacman --noconfirm -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake
pacman --noconfirm -S mingw-w64-x86_64-extra-cmake-modules make tar
pacman --noconfirm -S mingw64/mingw-w64-x86_64-cyrus-sasl
-
添加環(huán)境變量
- %MSYS_HOME%\usr\bin
- %MSYS_HOME%\mingw64\bin
-
-
windows 下打.dll 文件
-
命令行執(zhí)行
mkdir build cd build cmake ..
-
使用 Visual Studio 打開生成的 NativeUtils.sln
選擇 Release x64 對 ALL_BUILD 進行生成,將生成的 NativeUtils.dll 復(fù)制至導(dǎo)入libs的路徑
對CMake不熟悉的可以借鑒
-
linux 下打.so 文件
-
命令行執(zhí)行
mkdir build cd build cmake .. make
將生成的native/build/libNativeUtils.so文件復(fù)制至導(dǎo)入libs的路徑
普通運行需要添加 -Djava.library.path=<libs的路徑> 參數(shù)怎抛,但是真實生產(chǎn)環(huán)境可能不方便這么處理花椭,因此在InitJob及NativeUtils處理相關(guān)蒲讯。
-
本人創(chuàng)建一github demo,有需求可自行查看借鑒。