jnat

A wrapper around the jni crate

View the documentation

Example

Create a new Cargo lib project with cargo new --lib mylib and add the following to Cargo.toml:

```toml [dependencies] jnat = [latest version]

[lib] crate-type = ["cdylib"] ```

Add the following to src/lib.rs:

```rust use jnat::{ jnat_macros::jnat, jni::{objects::JClass, JNIEnv}, // jni crate, re-exported by jnat Class, Env, Signature, Type, };

jnat!(HelloWorld, caller, (JNIEnv, JClass) -> ());

fn caller(env: JNIEnv, class: JClass) { let mut env = env; let mut env = Env::new(&mut env); let class = Class::new(&mut env, class);

class .callstaticmethod("hello", Signature::new(&[], Type::Void), &[]) .unwrap(); } ```

Then, run cargo build. Create a new file called HelloWorld.java and add the following:

```java public class HelloWorld { private static native void caller();

static { System.loadLibrary("mylib"); }

public static void main(String[] args) { HelloWorld.caller(); }

public static void hello() { System.out.println("Hello, world!"); } } ```

Compile the java file with javac -h . HelloWorld.java. Then, run java -Djava.library.path=path/to/target/debug HelloWorld. You should see Hello, world! printed to the console.

Notes