首页 > 其他 > 详细

NDK---使用,开发步骤

时间:2014-09-29 23:10:32      阅读:390      评论:0      收藏:0      [点我收藏+]

使用NDk的场景:

1.某些方法,是使用C,C++本地代码实现的,然后,我想在Java中调用这些方法。这个时候,就需要使用到JNI技术。

为什么要使用C,C++代码实现呢?

原因是:

1.某些功能,需要使用到第三方的类库来实现,而第三方类库是用C或者C++写的,只有C或者C++代码才可以使用到该类库。于是,

就用C,C++代码实现。然后,实现后的方法,就供Java代码调用。

2.某些功能,使用C,C++代码来实现,速度和性能会高很多。比如,视频传输部分的代码。这个时候,将这部分功能,使用C,C++实现,然后,以方法的形式暴露给Java代码调用。

 

NDK开发步骤:

开发步骤:

1.在一个Java类中,比如MainActivity.java,声明要使用C,C++代码实现的本地方法,比如stringFromJNI方法;并且要有载入动态库的那一行代码,虽然,此时动态库还没有生成。

2.编译该Java类,MainActivity.java。得到MainActivity.class文件。(使用Android NDK时,无需这一步)

3.使用javah MainActivity.class生成一个可以在C,C++代码中使用的头文件。(使用Android NDK时,无需这一步)

4.使用C,C++代码实现MainActivity.java中声明的方法。在这个实现代码中,要包含3中生成的头文件(使用Android NDK时,无需这一步);然后,里面的代码,语法,方法,都是遵照JNI接口的。

5.编写Android.mk,告诉编译系统如何将C,C++代码编译为一个动态库(.so)。

使用步骤:

上述开发步骤完成之后,接下来就是编译:

1.在JNI目录下,输入命令ndk-build,如此,编译系统将会自动编译各种平台下的动态库。

2.第1步完成之后,就可以编译android项目,生成的apk就使用得到了动态库。

如此就完成了。

 

总结:

1.在Java代码这边,只需做两个步骤:一个是声明要调用的本地方法;一个是要加载的动态库。这个在没有生成动态库的时候,就要在代码中表示。

2.接着要做的事情,就是关键的,就是,使用C,C++代码实现本地方法。在使用变量,数据类型方面,要遵照JNI接口中定义的方式。这里面,就要使用JNI方面的知识,比如,JNI中的数据类型与Java中的数据类型的对应关系;JNI中字符串和Java中字符串的转换关系等。

其它的,当实现了C或者C++代码后,编写一个Android.mk,描述如何编译C,C++代码便可以。然后,编译生成动态库;然后,再编译android项目,项目中会包含生成的动态库(.so)。

图示步骤:

1.

bubuko.com,布布扣

2.

Java中的实现代码:

bubuko.com,布布扣

3.写一个C程序,该C程序中实现了Java中要使用的本地方法。如下,先创建一个jni目录,里面存放实现的C代码:

bubuko.com,布布扣

bubuko.com,布布扣

4.编写Android.mk,描述JNI中的源文件如何编译成为一个模块。

如下:

bubuko.com,布布扣

上述代码,说明:1.最终的模块名 Myhello-jni;2.被编译的源文件是helloJNI.c。

5.借助NDK工具,实现编译,生成动态库:

bubuko.com,布布扣

然后,整个Android项目就会变为:

其中:obj文件夹和libs中的.so是NDK工具编译后生成的东西。

bubuko.com,布布扣

6.按照往常的方式,编译android项目,生成apk

如下是最终的结果:

bubuko.com,布布扣

NDK---使用,开发步骤

原文:http://www.cnblogs.com/ttylinux/p/4001060.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!