在项目中需要C++来主动调用JAVA程序,如用C++实现的网络层,当网络层收到数据时,需要将数据反馈到activity,所以就需要C++来主动调用JAVA接口。
在 jni.h 中,我的是1133行(不同版本可能会有差异)
#if 0 /* In practice, these are not exported by the NDK so don't declare them */
jint JNI_GetDefaultJavaVMInitArgs(void*);
jint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
#endif
JNI 中已经屏蔽了 JNI_CreateJavaVM 不过好在开放了别外的接口(1147行)
/*
* Prototypes for functions exported by loadable shared libs. These are
* called by JNI, not provided by JNI.
*/
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved);
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved);
所以可以通过JNI_OnLoad来获取JavaVM,从而保存到全局变量中使用。
详细代码,稍后更新。