#loaded #flutter #attempt #save #pointers #called #jni

ironbird_jni_context

为 Flutter JNI 库访问 JavaVM

1 个不稳定版本

0.1.0 2022年11月5日

#14 in #loaded


用于 ironbird_engine_context

MIT 许可证

12KB
268

ironbird_jni_context

此crate可以用来从Rust代码中获取访问JavaVM的权限。

它定义了一个 JNI_OnLoad 函数,该函数在库被加载时由JVM调用。它保存了JavaVM的指针,以后可以访问。

它还尝试存储加载Flutter应用程序的类加载器。

这仅适用于使用此crate的dylib是从Java使用 System.loadLibrary 加载的情况。如果dylib是从其他代码加载的(例如通过 dlopen),则不会工作。

此crate还假设 System.loadLibrary 是从主线程中调用的。它会记住主线程的looper,并提供在主线程上调度回调的功能。

示例用法

    let context = JniContext::get().unwrap();
    let java_vm = context.java_vm();
    let env = java_vm.attach_to_current_thread();

    // ...

    context.schedule_on_main_thread(|| {
        // This will be run on main thread
        println!("Hello from main thread!");
    });

依赖关系

~0–1MB
~11K SLoC