参考资料:
https://docs.rs/jni/latest/jni/
https://github.com/jni-rs/jni-rs/tree/master/example
首先,创建一个 HelloWorld.java 文件
class HelloWorld {
private static native String hello(String input);
static {
System.loadLibrary("mylib");
}
public static void main(String[] args) {
String output = HelloWorld.hello("josh");
System.out.println(output);
}
}
编译这个文件,并生成 .h 头文件
javac -h . HelloWorld.java 或者用全路径 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac HelloWorld.java -h .
可以看到 生成了一个HelloWorld.h文件
3. 创建rust 库
cargo --lib new mylib
4. 编辑Cargo.toml
... [dependencies] jni = "*" [lib] crate_type = ["cdylib"]
5. 创建 mylib/src/lib.rs
use jni::JNIEnv;
use jni::objects::{JClass, JString};
use jni::sys::jstring;
#[no_mangle]
pub extern "system" fn Java_HelloWorld_hello(env: JNIEnv,
_: JClass,
input: JString)
-> jstring {
let input: String = env.get_string(input).expect("Couldn't get java string!").into();
let output = env.new_string(format!("Hello, {}!", input))
.expect("Couldn't create java string!");
output.into_inner()
}
6. 编译运行
cd mylib cargo build cd .. LD_LIBRARY_PATH=/path/to/mylib/target/debug java HelloWorld 或者 java -Djava.library.path=mylib/target/debug/ HelloWorld