JMI 是 JNI 的 C++11/14封装,目的是为了简化JNI使用。具有以下特点:
- JNI的signature字符串由编译器辅助生成,减少代码量又不会出错
- 支持带出参的方法,如
void SurfaceTexture.getTransformMatrix(float[] mtx)
对应的C++代码
jfloat mtx[16]; st.call("getTransformMatrix", std::ref(mtx));
- jclass、jmethodID、jfieldID都可缓存,使用值转型机制
- 提供getEnv()来获得JNIEnv而 不需操心线程问题
- 接口简单易用。比如如field接口
auto f = obj.field<jint>("myIntFieldName"); f = 123; jint value = f;