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

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

ID:52199615

大小:25.76 KB

页数:9页

时间:2020-03-24

Android中JNI编程的那些事儿.docx_第1页
Android中JNI编程的那些事儿.docx_第2页
Android中JNI编程的那些事儿.docx_第3页
Android中JNI编程的那些事儿.docx_第4页
Android中JNI编程的那些事儿.docx_第5页
资源描述:

《Android中JNI编程的那些事儿.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、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底层开发人员非常重要。如

2、何将.so文件打包到.APK让我们 先 从最简单的情况开始,假如已有一个JNI实现——libxxx.so文件,那么如何在APK中使用它呢?在我最初写类似程序的时候,我会将libxxx.so文件push到/system/lib/目录下,然后在Java代码中执行System.loadLibrary(xxx),这是个可行的做法,但需要取得/system/lib 目录 的写权限(模拟器通过adb remount取得该权限)。但模拟器 重启之 后libxxx.so文件会消失。现在 我找到了更好的方法,把.so

3、文件打包到apk中分发给最终用户,不管是模拟器 或者 真机 ,都不再需要system分区的写权限。实现步骤如下:1、在你的项目根目录下建立libs/armeabi目录;2、将libxxx.so文件copy到 libs/armeabi/下;3、此时ADT插件自动编译输出的.apk文件中已经包括.so文件了;4、安装APK文件,即可直接使用JNI中的方法;我想还需要简单说明一下libxxx.so的命名规则,沿袭Linux传统,lib.so是类库文件名称的格式,但在Java的Syst

4、em.loadLibrary(" something ")方法中指定库名称时,不能包括 前缀—— lib,以及后缀——.so。准备编写自己的JNI模块你一定想知道如何编写自己的xxx.so,不过这涉及了太多有关JNI的知识。简单的说:JNI是Java平台定义的用于和宿主平台上的本地代码进行交互的“Java标准”,它通常有两个使用场景:1.使用(之前使用c/c++、delphi开发的)遗留代码;2.为了更好、更直接地与硬件交互并获得更高性能 。1、首先创建含有native方法的Java类:1.pack

5、age com.okwap.testjni;     2. public final class MyJNI {    3.    //native方法,    4.     public static native String sayHello(String name);    5.}   2、通过javah命令生成.h文件,内容如下(com_okwap_testjni.h文件):1./* DO NOT EDIT THIS FILE - it is machine generated */   

6、  2. #include       3. /* Header for class com_okwap_testjni_MyJNI */     4. #ifndef _Included_com_okwap_testjni_MyJNI      5. #define _Included_com_okwap_testjni_MyJNI      6. #ifdef __cplusplus      7. extern "C" {      8. #endif      9. /*   

7、  10. * Class:     com_okwap_testjni_MyJNI     11.  * Method:    sayHello     12.  * Signature: (Ljava/lang/String;)Ljava/lang/String;     13.  */     14. JNIEXPORT jstring JNICALL Java_com_okwap_testjni_MyJNI_sayHello      15.   (JNIEnv *, jclass, jst

8、ring);      16. #ifdef __cplusplus      17. }      18. #endif     19. #endif  这是一个标准的C语言头文件,其中的JNIEXPORT、JNICALL是JNI关键字(事实上它是没有任何内容的宏,仅用于指示性说明),而jint、jstring是JNI环境下对int及java.lang.String类型的映射。这些关键字的定义都可以在jni.h中看到。3、在 com_okwap_testjni.c文

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。