NDK---使用,开发步骤

使用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.

2.

Java中的实现代码:

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

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

如下:

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

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

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

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

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

如下是最终的结果:

时间: 2024-08-09 02:19:53

NDK---使用,开发步骤的相关文章

Android2.1.2 Ndk开发步骤

修改1: build.gradle文件: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle-experimental:0.6.0-beta5'    //

Android(java)学习笔记257:JNI之NDK开发步骤(helloword案例)

1.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们要通过NDK工具把在Win7系统下编写的C代码,转化为可以在Linux(Linux2.6.6---Android内核)运行的二进制代码,最后通过JNI协议规范,Android中java代码就可以调用这个转化后的二进制代码运行. (1)在Eclipse中新建一个Android工程,命名为"HelloWorld",如

JNI开发步骤注意总结:

开发工具和环境搭建: 第一个工具: NDK (native develop kits) 交叉编译的工具链: 交叉编译: 在一个平台(处理器,操作系统)下 编译出来另外一个平台下可以运行的代码. windows AMD intel x86 架构-> 手机 android arm处理器 .c .java 1. 编译  把源代码(高级语言)编译成一个低级语言 (汇编语言) 2. 连接  根据具体平台的特性,(cpu的类型 x86 arm,操作系统的类型) 连接成一个可以执行的二进制可执行的程序. 第二

NDK 的开发流程

1.NDK开发所需要的工具 windows 需要在windows下的环境 把c代码打包成 手机能用的函数库 首先模拟手机的环境 1 NDK .sh linux 批处理文件 .bat windows 头文件 stdio.h 编译器 interface 库函数 连接器 class 实现类 由于ndk有很多linux的批处理文件 最早基于linux开发 2 工具2 cygdriver 模拟linux系统环境 (windows操作系统) linux系统的模拟器 linux 把所有设备都生成了一个文件 3

Thrift实现C#调用Java开发步骤详解

转载请注明出处:jiq?钦's technical Blog Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 类似的跨语言RPC框架还有ICE.Hessian.Protocol Buffer.Avro等. 1 下载Thrift 下载地址:http://thrift.apache.org/download thrift-0.9.3.exe         用于编译Thrift中间文件生成对应语言代码的工具 thrift-0.9.3.tar

【AngularJS学习笔记】开发时候的建议目录结构,基本开发步骤

项目目录结构划分 Debug Node.JS的生成目录 Node_modules Node.Js的依赖项 Src 项目源文件 ----|framework  项目框架 --------|app --------|css --------|data --------|font --------|img --------|js --------|plugin ----|modules --------|父菜单中填写的module名,父节点 ------------|app 主要项目文件 ------

WebService的开发步骤

WebService的开发要追究于SOA的发展. 软件开发从面向过程到面向对象 到面向服务.在今天说WebService之前,我想先简单说一下什么是面向服务(SOA). 以上面这张图来看,可以看出面向服务结构是一个组件模型, 它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来. 这样做的特点是 每个服务都有明确的边界.各个服务之间相互独立,并且采用标准的契约定义和通信协议. 基于这样的基础上,我们的WebService的开发就分为三步. 一 创建一个Web服务.

struts2学习笔记2 -struts2的开发步骤和工作原理

struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现action接口,或继承actionsupport类 b 为每个请求参数都提供feild,并为之提供相应的setter和getter方法 c 该action类应该有无参数构造器 3.配置action类 所有action都需要放在package里配置. <action>元素有如下属性: name 指定该act

hadoop日志数据分析开发步骤及代码

日志数据分析:1.背景1.1 hm论坛日志,数据分为两部分组成,原来是一个大文件,是56GB:以后每天生成一个文件,大约是150-200MB之间:1.2 日志格式是apache common日志格式:每行记录有5部分组成:访问ip.访问时间.访问资源.访问状态.本次流量:27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 11271.3 分析一些核心指