自学内容网 自学内容网

深入Android架构(从线程到AIDL)_34 JNI开发与NDK 02

2、 使用Android NDK

  • 当你安装好NDK环境之后,就能动手利用NDK环境来开发本地(Native)的C程序了。于此,兹举例说明开发程序。
Step-1. 在Android SDK环境里,建立一个开发项目
  • 例如,建立一个名称为NDK-01的应用程序开发项目,内含helloNDK.java和test.java程序。其中, helloNDK.java的内容如下:

        

  • 把焦点放在接口(Interface),就是函数:

                 native String sayHello();

  • 可以将这个Java类定义,看成为这项接口的Java方叙述文件。
  • 由于这项接口,涉及两种语言,所以应该有两份文件,两种语言各一份。
  • 所以,我们需要替这项接口产出一份C语言方的叙述文件,其形式就是C的头文件(Header File)。
     
Step-2. 进行编译,产出helloNDK.class档案
  • 编译上述的项目,产生*.class档案。

      

Step-3. 使用javah工具,产出C语言的*.h头文件
  • 返回Android SDK环境,建立一个名称为/jni/的新档案夹(Folder)如下:
  • 进入/jni/目录区,执行javah去读取/bin/helloNDK.class档案,然后产出com_misoo_pk01_helloNDK.h头文件。
  • 返回到Android SDK环境,刷新(Refresh)之后,可在Eclipse画面上看到该头文件如
    下:
  • 可以打开com_misoo_pk01_helloNDK.h头文件,其内容如下:
Step-4. 依据*.h头文件而撰写*.c程序码
  • 产出com_misoo_pk01_helloNDK.h头文件之后,就可以将NDK-01开发项目内容拷贝(或只拷贝/jni/目录区内容),拷贝到NDK的/samples/目录里如下:
  • 接着,本地C开发者就能使用C语言,结合JNI(Java Native Interface)语法,撰写
    com_misoo_pk01_helloNDK.c程序码,如下:
Step-5. 编译及连结本地程序
  • 必须先开启Cygwin。也就是,从桌面或<开始/所有程序/Cygwin>里,点选<Cygwin bash shell>,进行编译和连结动作。
  • 就完成编译和连结任务,产出libhelloNDK.so本地程序库,并放置于/libs/armeabi/里,如下:
  • 当C开发端完成libhelloNDK.so程序库之后,就可以将/samples/NDK-01内容(或是只拷贝/libs/目录区内容),拷贝回去AndroidSDK环境里。于是在Android SDK环境里可以看到libhelloNDK.so本地程序库,如下:
Step-6. 编执行NDK-01范例程序
  • 此时,就可以撰写test.java的内容,让它调用helloNDK.java类别的本地函数,如下:
Step-7. 将*.so打包到*.apk
  • 接着编译NDK-01项目,将*.so本地程序库打包到*.apk里,并且执行该*.apk。执行到指令: obj.sayHello()时,就调用到*.so程序库里的本地C程序。于是, test.java就将本地C程序回传值显示于画面,如下:

原文地址:https://blog.csdn.net/soarfeng/article/details/145192935

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!