如何从jni_sys::JNIEnv获取对应的jni::JNIEnv实例?
jni_sys::JNIEnv转jni::JNIEnv实现方案 jni crate 提供的JNIEnv是对jni_sys原始FFI指针的安全封装,转换操作可以直接通过官方提供的接口实现:
- 核心转换方法:使用
JNIEnv::from_raw接口,传入合法的jni_sys::JNIEnv可变指针即可完成转换,示例代码如下:
use jni::JNIEnv; use jni_sys::JNIEnv as RawJNIEnv; // 注意该方法本身是unsafe的,调用方需要保证传入的指针合法 unsafe fn convert_raw_env(raw_env: *mut RawJNIEnv) -> JNIEnv<'_> { JNIEnv::from_raw(raw_env).unwrap() }
- 注意事项:
- 调用
from_raw前必须保证传入的指针非空、是当前线程有效的JNI环境指针,否则会触发未定义行为 - 转换得到的
JNIEnv生命周期不要超过实际JNI环境的生效范围,避免出现悬垂引用 - 转换完成后即可直接调用
call_static_object_method等接口执行静态方法调用
- 调用
内容的提问来源于stack exchange,提问作者Carter Davis
相关产品推荐
相关产品推荐

