jni-rs-bindings

Solid

jni-rs conventions for exposing a Rust core to Java/JVM: JNI export naming, JNIEnv usage, string conversion, exception checks/throws, global references, and library loading. Load when generating or reviewing jni-rs Java/JVM bindings for a Rust library.

Data & Documents 137 stars 13 forks Updated today MIT

Install

View on GitHub

Quality Score: 84/100

Stars 20%
71
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
56
Issue Health 10%
80
License 10%
100
Description 5%
100

Skill Content

- Use `jni` crate for Rust-Java/JVM interop. Functions must be `#[no_mangle] pub extern "system"`. - Follow JNI naming: `Java_com_example_ClassName_methodName`. Match Java native method signatures exactly. - Use `JNIEnv` for all JNI operations. Access Java types via `JObject`, `JString`, `JClass` wrappers. - String conversion: `env.get_string(&jstring)` to read, `env.new_string("value")` to create. - Error handling: check `env.exception_check()` after JNI calls. Throw Java exceptions via `env.throw_new()`. - Global references (`env.new_global_ref()`) for objects accessed across threads or native calls. - Build with `cargo build --release` to produce shared library. Load in Java with `System.loadLibrary()`. - Test Java side with JUnit, Rust core logic with standard `#[test]`. Integration tests via JNI calls. - Keep JNI layer thin — business logic in Rust, Java provides API surface. - Memory: JNI local references are auto-freed on native return. Use `env.delete_local_ref()` in loops. - Anti-patterns: holding JNI references across threads without global refs, ignoring exception checks, `unwrap()` in JNI functions.

Details

Author
Goldziher
Repository
Goldziher/ai-rulez
Created
1 years ago
Last Updated
today
Language
Go
License
MIT

Similar Skills

Semantically similar based on skill content — not just same category

AI & Automation Listed

rust-jni

Use when you export a Rust function to the JVM with the jni crate, write or change Kotlin external fun bindings, choose between raw JNI and UniFFI, or triage a JNI linkage error or a native crash on Android. Covers Java_package_class_method symbol naming, no_mangle plus extern system, panic containment at every export, AttachCurrentThread and DetachCurrentThread discipline for worker threads, 16-slot local-reference frames and with_local_frame, why JNIEnv must never cross an await point, JByteArray copies versus DirectByteBuffer and file-descriptor handoff on hot paths, Kotlin and Rust type mapping, Java exception throwing and exception_check, session-handle lifecycle contracts, and a triage table for UnsatisfiedLinkError, JNI DETECTED ERROR, and local-reference-table overflow. Triggers on JNI, external fun, no_mangle, JNIEnv, AttachCurrentThread, local ref, GlobalRef, UnsatisfiedLinkError, or native crash on Android.

0 Updated today
po4yka
Data & Documents Solid

napi-rs-bindings

napi-rs conventions for exposing a Rust core to Node.js: #[napi] macros, napi::Error mapping, auto-generated .d.ts types, async Promises, and CommonJS/ESM output. Load when generating or reviewing napi-rs Node.js bindings for a Rust library.

137 Updated today
Goldziher
Data & Documents Solid

extendr-bindings

extendr conventions for exposing a Rust core to R: extendr macros and module registration, Robj type mapping, NA handling, rextendr builds, R package scaffolding, and CRAN compliance. Load when generating or reviewing extendr R bindings for a Rust library.

137 Updated today
Goldziher