2 个不稳定版本

0.1.0 2022年4月5日
0.0.1 2021年8月9日

#1774Rust 模式

MIT/Apache

125KB
3K SLoC

eJNI

eJNI 是一个 Rust crate,通过提供抽象简化 Java 的 JNI 开发。

eJNI 为 Java 标准库中常用的类提供抽象,如 Map 和 List。除了这些,eJNI 还提供了简单的方式来处理 Java 的原始类型及其对象对应物(例如 intInteger)。

API 稳定性

eJNI 是一个年轻的库,它的 API 可能会发生变化。但是库中的代码已经完全经过测试。

示例

ArrayList

以下示例展示了如何创建一个 ArrayList<String>,向其中填充 10 个字符串,并将其返回到 Java。

use ejni::{List, Class, Object, JavaString};
use jni::sys::jobject;

#[no_mangle]
pub fn Java_MyClass_doNative(env: JNIEnv<'_>, _: JClass) -> jobject {
    // Create a new java.util.ArrayList containing java.lang.String's
    let list = List::arraylist(&env, Class::String(&env).unwrap()).unwrap();

    // Add 10 Strings to the List
    for i in 0..10 {
        let string = JavaString::from_rust(&env, format!("Iteration {}", i)).unwrap();
        list.add(&env, string).unwrap();
    }

    list.into()
}

依赖关系

~1.3–2.6MB
~45K SLoC