导航:首页 > 编程语言 > jnicreatejavavm3

jnicreatejavavm3

发布时间:2023-08-24 17:40:25

㈠ 如何得到javaVM,JNIEnv接口

JavaVM接口
第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。

第二种方式,在native code中调用JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)可以得到JavaVM指针。

两种情况下,都可以用全局变量,比如JavaVM* g_jvm来保存获得的指针以便在任意上下文中使用。

Android系统是利用第二种方式Invocation interface来创建JVM的。

JNIEnv接口
JNI开发最常见的错误就是滥用了JNIEnv接口。需要强调的是JNIEnv是跟线程相关的。

在native method中,JNIEnv作为第一个参数传入。那么在JNIEnv不作为参数传入的时候,该如何获得它?JNI提供了两个函数:(*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL)和(*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_2)。两个函数都利用JavaVM接口获得JNIEnv接口,上面已经讲到如何获得JavaVM接口。

JNI规范也说明,可以将获得JNIEnv封装成一个函数。

1
2
3
4
5
6
JNIEnv* JNU_GetEnv()
{
JNIEnv* env;
(*g_jvm)->GetEnv(g_jvm, (void**)&env, JNI_VERSION_1_2);
return env;
}

㈡ android下JNI C 调用JAVA,可能是路径问题

JNI_CreateJavaVM 这个方法是不能直接在C中调用了。你看 jni.h 的头文件
#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

这三个方法都是禁止调用的 ( if 0 )

㈢ android源码里 c调java error: undefined reference to 'JNI_CreateJavaVM'求助

android 里面的java调用c,主要是通过ndk组件来实现的,env和vm都是系统创建好了的,可以直接调用的,看的出来楼主应该是ndk方面的初学者,对jni,ndk这些东西的关系应该没有弄清楚,如果仅仅是一个java和c互掉的话,可以看我的帖子“ndk java 和 c 互掉”:
http://jingyan..com/article/f54ae2fcde72be1e92b84916.html
帖子集文档,截图,视频于一体,涉及java调用c和c调用java两部分,
由于感觉你是ndk的初学者,所以有时间的话,建议你看看我总结的帖子"android ndk资源汇总":
http://tieba..com/p/3439627347
希望对你有用,我是ndk吧吧主,有问题可以ndk吧留言,谢谢!

㈣ 如何在c++中调用java代码

对于本地函数
JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj)
{
cout<<"Hello Native Test !"<<endl;
}

JNIEnv类型代表Java环境。通过这个JNIEnv*指针,就可以对Java端的代码进行操作。如,创建Java类得对象,调用Java对象的方法,获取Java对象的属性等。
JNIEnv的指针会被JNI传送到本地方法的实现函数中来对Java端的代码进行操作

JNIEnv类中的函数:
NewObject/NewString/New<TYPE>Array :new新对象
Get/Set<TYPE>Field:获取属性
Get/SetStatic<TYPE>Field :获取静态属性
Call<TYPE>Method/CallStatic<TYPE>Method:调用方法

阅读全文

与jnicreatejavavm3相关的资料

热点内容
如何设置微信数据增加 浏览:95
excel文件不再增大 浏览:613
ug编程刀路怎么复制不用鼠标选取 浏览:97
excel文件打开扩展名错误 浏览:10
阿里巴巴怎么做数据包 浏览:442
无线网络连接一直显示未连接 浏览:25
windows7如何自动激活工具下载 浏览:57
天语救砖工具 浏览:839
网络体育课程有哪些 浏览:19
苹果微信怎么查看文件 浏览:165
安卓nba2k14面补替换 浏览:450
路由器密码定时换 浏览:626
aicc恢复文件在哪里 浏览:167
怎么查无线网络属性 浏览:874
只狼的声音文件放在哪里 浏览:219
lol盒子修复在哪个文件夹 浏览:308
表格里的公章怎么导入到pdf文件上 浏览:844
怎样删除u盘不能删除的文件 浏览:712
软件编程岗位怎么找 浏览:120
数字编程工程师是什么专业 浏览:489

友情链接