- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C02_c
基於軟硬整合觀點
认识JNI开发与NDK( c)
By 高煥堂
基於軟硬整合觀點
3 、如何载入*.so档案
VM的角色
• 由于Android 的应用层级类别都是以Java
撰写的,这些Java类别转译为Dex型式的
Bytecode之后,必须仰赖Dalvik虚拟机器
(VM: Virtual Machine)来执行之。VM在
Android平台里,扮演很重要的角色。
• 此外,在执行Java类别的过程中,如果
Java类别需要与JNI本地模块沟通时,VM
就会去加载JNI本地模块,然后让Java 的函
数顺利地调用到本地模块的函数。此时,
VM扮演着桥梁的角色,让Java与本地模块
能透过标准的JNI接口而相互沟通。
• 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 JNICALL
Java_com_misoo_gx06_NativeJniAdder_newObject(JNIEnv *env,
jclass c){
Adder* ar = (Adder*)AdderNew(); 創建一個C對象
return (jlong)ar;
}
JNIEXPORT jlong JNICALL
Java_com_misoo_gx06_NativeJniAdder_execute(
JNIEnv *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去加载Android的
/system/lib/libNativeJniAdder.so档案。
载入*.so档之后,Java类别与*.so档就汇合
起来,一起执行了。
n
n
n
NativeJniAdder.java
n
n
n
( libNativeJniAdder.so )
定义Adder类( Adder.h )
typedef struct Adder Adder;
struct Adder {
int (*exec)(int a, int b);
};
撰写函数
struct Adder *AdderNew(){ // 構造式
struct Adder *t
= (Adder *)malloc(sizeof(Light));
t-exec = my_exec;
return (void*) t;
您可能关注的文档
- Android从程序员到架构师之路-B03_c_应用Android的UI框架.pdf
- Android从程序员到架构师之路-B04_a_SurfaceView的UI多线程.pdf
- Android从程序员到架构师之路-B05_d_AIDL与Proxy-Stub设计模式.pdf
- Android从程序员到架构师之路-B06_b_活用IBinder接口于近程通信.pdf
- Android从程序员到架构师之路-B07_b_Messager框架与IMessager接口.pdf
- Android从程序员到架构师之路-B07_c_Messager框架与IMessager接口.pdf
- Android从程序员到架构师之路-C01_a_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C01_e_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C01_d_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C02_b_认识JNI开发与NDK.pdf
- 浙江金华市公共资源交易中心永康市分中心编外人员招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波慈溪市政协办公室招考聘用编外工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江金华永康市西溪镇人民政府招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 福建南平市公安局建阳分局招考聘用辅警笔试历年典型考题及考点研判与答案详解.docx
- 浙江嘉兴海盐县武原街道基层残疾人工作专职委员(公益岗位)招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波知识产权保护中心招考聘用工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江杭州建德市面向2024届普通高校毕业生招考聘用教师(第二批)16人笔试历年典型考题及考点研判与答案详解.docx
- 浙江省台州中学面向2024届普通高校毕业生招考聘用教师12人笔试历年典型考题及考点研判与答案详解.docx
- 湖北师范大学体育学院专任教师招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 重庆市南岸区教育事业单位面向2024届高校毕业生招考聘用114人笔试历年典型考题及考点研判与答案详解.docx
文档评论(0)