android系统分析
yelvis
这个作者很懒,什么都没留下…
展开
-
android 之 JNI 详解(六)
4.编译.c文件生存动态库。 arm-none-linux-gnueabi-gcc -I/home/a/work/android/jdk1.6.0_17/include -I/home/a/work/android/jdk1.6.0_17/include/linux -fpic -c com_hello_jnitest_Nadd.c arm-none-linux-转载 2014-03-15 13:43:08 · 642 阅读 · 0 评论 -
android 之 JNI 详解 (七)
4 directories, 4 files 5.编译:make APP=myjni. 以上内容在ubuntu完成。以下内容在windows中完成。当然也可以在ubuntu中完成。 6.在eclipsh中创建android application。将myjni中自动生成的libs文件夹拷贝到当前工程文件夹中,编译运行即可。Java代码:pa转载 2014-03-15 13:44:38 · 477 阅读 · 0 评论 -
android之 JNI 详解(二)
此函数回传JNI_VERSION_1_4值给VM,于是VM知道了其所使用的JNI版本了。此外,它也做了一些初期的动作(可呼叫任何本地函数),例如指令:Java代码:if (register_android_media_MediaPlayer(env) LOGE("ERROR: MediaPlayer native registration failed ");got转载 2014-03-15 13:30:46 · 683 阅读 · 0 评论 -
android 之 JNI 详解 (九)
3. 数组类型的传递 和String一样,JNI为Java基本类型的数组提供了j*Array类型,比如int[]对应的就是jintArray。来看一个传递int数组的例子,Java代码:JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)转载 2014-03-15 13:47:32 · 544 阅读 · 0 评论 -
android之 JNI 详解( 一 )
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,转载 2014-03-15 13:27:31 · 916 阅读 · 0 评论 -
android 之 JNI 详解(五)
上面的都是基本类型。如果Java函数的参数是class,则以"L"开头,以";"结尾,中间是用"/" 隔开的包及类名。而其对应的C函数名的参数则为jobject. 一个例外是String类,其对应的类为jstring Ljava/lang/String; String jstring Ljava/net/Socket; Socket jobject 如果JAVA函数位于一转载 2014-03-15 13:41:19 · 505 阅读 · 0 评论 -
android之 JNI 详解 (十)
上面代码中的第三行, jobjectArray result; 因为要返回值,所以需要新建一个jobjectArray对象。 jclass intArrCls = env->FindClass("[I"); 是创建一个jclass的引用,因为 result的元素是一维int数组的引用,所以intArrCls必须是一维int数组的引用,这一点是如何保证的呢?注意Fin转载 2014-03-15 13:48:58 · 559 阅读 · 0 评论 -
android 之 JNI 详解(四)
4.Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数。其中很重要的区别是Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:java代码:typedef struct {const char* name;const char转载 2014-03-15 13:36:04 · 492 阅读 · 0 评论 -
android 之 JNI 详解(三)
3.registerNativeMethods()函数的用途 应用层级的Java类别透过VM而呼叫到本地函数。一般是仰赖VM去寻找*.so里的本地函数。如果需要连续呼叫很多次,每次都需要寻找一遍,会多花许多时间。此时,组件开发者可以自行将本地函数向VM进行登记。例如,在Android的/system/lib/libmedia_jni.so档案里的代码段如下:java代码:转载 2014-03-15 13:33:43 · 541 阅读 · 0 评论 -
android 之JNI 详解(八)
在这个例子中,我们要实现一个native方法 String getLine(String prompt); 读入一个String参数,返回一个String值。 通过执行javah -jni得到的头文件是这样的Java代码:#include #ifndef _Included_Prompt#define _Included_Prompt#i转载 2014-03-15 13:46:16 · 509 阅读 · 0 评论