Android中JNI编程的那些事儿.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android中JNI编程的那些事儿(1) JNI译为Java本地接口。它允许Java代码和其他语言编写的代码进行交互。在android中提供JNI的方式,让Java程序可以调用C语言程序。android中很多Java类都具有native接口,这些接口由本地实现,然后注册到系统中。 AD: Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须是通过Java代码嵌入Native?C/C++——即通过JNI的方式来使用本地(Native)代码。因此JNI对Android底层开发人员非常重要。 如何将.so文件打包到.APK 让我们?先?从最简单的情况开始,假如已有一个JNI实现——libxxx.so文件,那么如何在APK中使用它呢? 在我最初写类似程序的时候,我会将libxxx.so文件push到/system/lib/目录下,然后在Java代码中执行 System.loadLibrary(xxx),这是个可行的做法,但需要取得/system/lib?目录?的写权限(模拟器通过 adb?remount取得该权限)。但模拟器?重启之?后libxxx.so文件会消失。现在?我找到了更好的方法,把.so文件打包到apk中分发给 最终用户,不管是模拟器?或者?真机?,都不再需要system分区的写权限。实现步骤如下: 1、在你的项目根目录下建立libs/armeabi目录; 2、将libxxx.so文件copy到?libs/armeabi/下; 3、此时ADT插件自动编译输出的.apk文件中已经包括.so文件了; 4、安装APK文件,即可直接使用JNI中的方法; 我想还需要简单说明一下libxxx.so的命名规则,沿袭Linux传统,libsomething.so是类库文件名称的格 式,但在Java的System.loadLibrary(?something?)方法中指定库名称时,不能包括?前缀——?lib,以及后缀—— .so。 准备编写自己的JNI模块 你一定想知道如何编写自己的xxx.so,不过这涉及了太多有关JNI的知识。简单的说:JNI是Java平台定义的用于和宿主平台上的本地代码进 行交互的“Java标准”,它通常有两个使用场景:1.使用(之前使用c/c++、delphi开发的)遗留代码;2.为了更好、更直接地与硬件交互并获 得更高性能?。 1、首先创建含有native方法的Java类: package?com.okwap.testjni;????? ?public?final?class?MyJNI?{???? ????//native方法,???? ?????public?static?native?String?sayHello(String?name);???? }??? 2、通过javah命令生成.h文件,内容如下(com_okwap_testjni.h文件): /*?DO?NOT?EDIT?THIS?FILE?-?it?is?machine?generated?*/????? ?#include?jni.h?????? ?/*?Header?for?class?com_okwap_testjni_MyJNI?*/????? ?#ifndef?_Included_com_okwap_testjni_MyJNI?????? ?#define?_Included_com_okwap_testjni_MyJNI?????? ?#ifdef?__cplusplus?????? ?extern?C?{?????? ?#endif?????? ?/*????? ?*?Class:?????com_okwap_testjni_MyJNI????? ??*?Method:????sayHello????? ??*?Signature:?(Ljava/lang/String;)Ljava/lang/String;????? ??*/????? ?JNIEXPORT?jstring?JNICALL?Java_com_okwap_testjni_MyJNI_sayHello?????? ???(JNIEnv?*,?jclass,?jstring);?????? ?#ifdef?__cplusplus?????? ?}?????? ?#endif????? ?#endif?? 这是一个标准的C语言头文件,其中的JNIEXPORT、JNICALL是JNI关键字(事实上它是没有任何内容的宏,仅用于指示性说明),而 jint、jstring是JNI环境下对int及java.lang.String类型的映射。这些关键字的定义都可以在jni.h中看到。 3、在?com_okwap_testjni.c文件中实现以上方法: #inclu

文档评论(0)

文档终结者 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档