- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
jni工作机制简介
Android java层与linux底层相互调用 Android与linux底层程序互调用 Android调用底层程序 java程序如何访问windows,linux底层c++/c的程序? JNI-Java Native Interface JNI标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作 JNI工作机制 JNI开发环境-ndk(推荐) Android提供了windows和linux下的JNI开发环境 ndk-Native Development Kit 交叉编译器 编译的代码符合arm-linux 提供了用于编译的android基本sdk库 提供了bash方式的编译命令,使用非常简单 Linux下ndk配置 linux下直接下载并解压ndk开发包即可 Ndk-windows开发环境 Ndk是在linux下运行的程序,在windows上需要模拟一个linux环境才能执行ndk。 怎么模拟? cygwin Windows配置ndk步骤: 1.下载windows版本的ndk, 2.安装cygwin,并被指ndk环境 3.每次编写好程序代码后,启动cygwin,然 后执行ndk编译命令编译 JNI开发步骤 1. 采用标准c或c++语言编写程序 2. 类似于linux在makefile,android的jni编译需 要.mk文件 编译:采用命令ndk-bulid 举例 我们首先用java编写helloworld应用程序(APK),这个代码很简单创建一个 HelloWorld activity public class HelloWorld extends Activity { private static final String TAG = HelloWorld; static { System.loadLibrary(helloworld); } private native String printJNI(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.d(TAG, Activity call JNI: + printJNI()); } } C语言实现helloworld共享库 使用javah工具,可以根据java源程序,生成Native代码的头文件 javah com.simon.HelloWorld 注意:该命令必须在bin/classes下执行 执行后得到,一个头文件com_simon_Helloworld.h,这里包含有printJNI接口的C/C++声明 创建com_simon_Helloworld.c文件 #include jni.h #define LOG_TAG HelloWorld #include utils/Log.h /* Native interface, it will be call in java code */ JNIEXPORT jstring JNICALL Java_com_simon_HelloWorld_printJNI(JNIEnv *env, jobject obj) { LOGI(Hello World From libhelloworld.so!); return (*env)-NewStringUTF(env, Hello World!); } /* This function will be call when the library first be load. * You can do some init in the libray. return which
文档评论(0)