版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C02_c认识JNI开发基於与軟硬整N合觀D點K( c)By 高煥堂3、如何载入基於*軟.硬s整o合档觀點 案 VM的角色由于Android的应用层级类别都是以Java 撰写的,这些Java类别转译为Dex型式的Bytecode之后,必须仰赖Dalvik虚拟机器(VM: Virtual Machine)来执行之。VM在Android平台里,扮演很重要的角色。 此外,在执行Java类别的过程中,如果Java类别需要与JNI本地模块沟通时,VM 就会去加载JNI本地模块,然后让Java的函数顺利地调用到本地模块的函数。此时, VM扮演着桥梁的角色,让Java与本地模块能透过标准的JNI接口而相互沟
2、通。Java层的类别是在VM上执行的,而本地模块则不是在VM上执行,那么Java程序又如何要求VM去加载(Load)所指定的C模块呢? 可使用下述指令:System.loadLibrary(*.so的檔名); 例如,NativeJniAdder类别,其程序码:/*com_misoo_gx06_NativeJniAdder.c*/#include Adder.h#include com_misoo_gx06_NativeJniAdder.h“JNIEXPORT jlong JNICALLJava_com_misoo_gx06_NativeJniAdder_newObject(JNIEnv *en
3、v, jclass c)Adder* ar = (Adder*)AdderNew();創建一個C對象return (jlong)ar;JNIEXPORT jlong JNICALLJava_com_misoo_gx06_NativeJniAdder_execute( JNIEn v *env, jclass c, jlong refer, jint digit_1, jint digit_2)Adder* pa = (Adder*)refer;/轉成對象的指針long result = pa-exec(digit_1, digit_2);return result;就要求VM去加载Androi
4、d的/system/lib/libNativeJniAdder.so。载入*.so档之后,Java类别与*.so档就汇合起来,一起执行了。nnnNativeJniAdder.javann( libNativeJniAdder.so )n定义Adder类( Adder.h )撰写函数struct Adder *AdderNew()/ 構造式struct Adder *t= (Adder *)malloc(sizeof(Light); t-exec = my_exec;return (void*) t;static int my_exec( int a, int b ) return (a + b
5、);typedef struct Adder Adder; struct Adder int (*exec)(int a, int b);(libNativeJniAdder.so) 将C/C+对象指针传回Java层 这个JNI接口定义类别含有2个函数:newObject()和execute()。 其中,newObject()函数诞生一个Adder 对象,并且将该对象的指针传递回来给Java程序。 而execute()函数的refer参数,是用来让Java程序能将对象指针传进去给execute() 函数,此时execute()就能藉由该指标而调用到先前newObject()函数所诞生的那个对象
6、了。 典型的Java程序如下述的ac01类别: 在这ac01.java类别里,指令:long refer = NativeJniAdder.newObject(); newObject()诞生一个对象,将C/C+对象指针传回Java层。newObject()(对象指针)(libNativeJniAdder.so) 刚才newObject()诞生一个对象,由refer储存newObject()传回来的对象指针。指令:int cs = (int)NativeJniAdder.execute(refer, a, b); 将refer传进去给execute()函数。execute(对象指针, )exec()(libNativeJniAdder.so) VM调用本地函数时,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年贵州省清镇市高三物理下册期末考试模拟试卷及答案
- 2026年湖北省当阳市高三物理下册期末考试模拟试卷含答案
- 2026年黑龙江省同江市高一化学上册期末考试模拟卷及完整答案【夺冠】
- 2026年浙江省永康市高三物理下册期末考试模拟考试卷带答案
- 2026年黑龙江省宁安市高一化学上册期末考试模拟卷带答案(考试直接用)
- 2026年湖北省老河口市高三生物上册期末考试试卷(含答案)
- 2025年河南省禹州市高一历史下册期末考试考试卷【必考】附答案
- 2026年河北省定州市高三生物上册期末考试模拟检测卷含答案
- 2026年吉林省珲春市高三物理下册期末考试模拟测试卷含答案
- 2026年危化品分装作业安全题库及答案
- 2026 年妇科宫腔镜手术围手术期护理课件
- 2026年北京市中考英语试卷真题及答案详解(精校打印版)
- 2026年家禽屠宰加工工协同作业考核试卷及答案
- 社会体育导论 课件全套 0社会体育导论课程介绍-10社会体育指导实践
- 2026年秋人美版(新教材)小学美术四年级上册(全册)教学设计(附目录p153)
- 2026年全科医生转岗培训考试(理论考核)题库及答案(辽宁省)
- 2026年中级消防设施操作员(监控方向)考试题库(附答案)
- 2026年平安岗前培训测试题及答案
- 电梯使用维护安全管理培训课件
- 高级职称晋升面审消化内科(副)主任医师答辩专业技术问答题
- 青海昆仑墟文化产业有限公司招聘笔试题库2026
评论
0/150
提交评论