源码版本:Android-4.4.4_r2
提示:大部分分析直接注释在代码内。
接着上一篇【分析】dalvik虚拟机启动过程(一)
JNI_CreateJavaVM函数调用dvmCreateJNIEnv创建JNIEnv后,接着又调用了dvmStartup函数初始化VM:
/*
* VM 初始化。
* VM initialization. Pass in any...
分类:
其他好文 时间:
2015-03-29 00:37:57
阅读次数:
228
参考源码版本:Android-4.4.4_r2
---------------------------------
dvmCreateJNIEnv函数创建一个JNIEnvExt结构,函数返回时,将JNIEnvExt*强制转换为JNIEnv*:
/*
* 创建一个新的JNIEnvExt结构,并将它添加到VM列表中。
* 返回时,将JNIEnvExt*强制转换为JNIEnv*。
* C...
分类:
其他好文 时间:
2015-03-27 22:15:27
阅读次数:
247
JNI开发中,java与c代码交互的时候通常有String和char*的转换,但是请注意,这两者不是一类。
找了个工具方法,作为备忘。
char* Jstring2CStr(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = (*env)->FindClass...
分类:
编程语言 时间:
2015-03-20 16:33:04
阅读次数:
199
在Jni中通过 env->CallStaticVoidMethod去做callback的时候,总会挂掉
原因是JniEnv是和线程相关的,只能在对应创建的线程中使用
而JVM却是进程相关的,可以通过JVM来获取线程相关的JNIENV。
初始化如下
static void
com_test_Player_native_init(JNIEnv *env)
...
分类:
移动开发 时间:
2015-03-06 19:13:12
阅读次数:
146
也不是很确定,前段时间的代码没有出问题,但是今天调试了半天,一直崩溃:vm aborting。以前的部分代码: 1 JNIEXPORT void JNICALL XXX 2 (JNIEnv* env,jobject thiz, jobject bitmap, jbyteArray databuf.....
分类:
移动开发 时间:
2015-03-06 18:54:08
阅读次数:
418
在Jni中通过 env->CallStaticVoidMethod去做callback的时候,总会挂掉 原因是JniEnv是和线程相关的,只能在对应创建的线程中使用 而JVM却是进程相关的,可以通过JVM来获取线程相关的JNIENV。 初始化如下 static v...
分类:
移动开发 时间:
2015-03-06 17:31:49
阅读次数:
186
加载mediaplayer相关组件jint JNI_OnLoad(JavaVM* vm, void* reserved)在Android注册mediaplayer static int register_android_media_MediaPlayer(JNIEnv *env)android_me...
分类:
移动开发 时间:
2015-03-03 20:37:40
阅读次数:
283
写得android程序总是崩溃,感觉像是内存泄露,但是检查代码发现该释放的都释放了。最终无奈,删除了接口函数中的调用,只使用下面的测试代码。 1 JNIEXPORT jboolean JNICALL Java_com_example_X_XX_XXX 2 (JNIEnv * env, jclas.....
分类:
移动开发 时间:
2015-01-26 13:24:30
阅读次数:
199
在前面文章中简单介绍了JNI,这一篇文章来简单看一下jni.h中定义的一些常用方法,来实现通过C++调用Android中的Java代码。一、两个参数的介绍在前面的代码中我们会遇到两个参数,下面对这两个参数做一解释1、JNIEnv是指向可用JNI函数表的接口指针,C代码中JNIEnv是指向JNINativeInterface结构的指针,在C语言中JNIEnv必须作为第一个参数传入每一个JNI函数的调...
分类:
移动开发 时间:
2015-01-07 22:10:05
阅读次数:
310
相关概念
什么是jni
关于nkd
什么是交叉编译
C/C++语言常见术语
库函数
头文件
函数库
HelloWorld
Java调用CC方法
CC方法调用Java方法
相关api
示例
数据类型的对应
jstring转换char
char转换jstring
C与C++中JNI实现的区别
JNIEnv
方法调用的区别
Androidmk说明
绕过JNI直接调用C函数
中文乱码问题
解决方法名冲突
注册JNI函数
静态注册
动态注册...
分类:
其他好文 时间:
2014-12-29 09:01:01
阅读次数:
257