1、概念
NDK:(Native Development Kit),原生开发工具包是一组可以让您在Android应用中利用C和c++代码的工具,可用以从您自己的源代码构建,或者利用现有的预构建库.
public class MyActivity extends Activity {
/**
* Native method implemented in C/C++
*/
public native void computeFoo();
}
使用场景:
NDK本身对许多类型的Android应用没什么价值,因为它不可避免的增加开发过程复杂性,所以通常不值得使用.如果需要执行以下操作,或许有用:
- 从设备获取卓越性能以用于计算密集型应用,例如游戏或者物理模拟.
- 重复使用您自己或者其他开发者的C或c++库.
- 在平台之间移植应用.
主要组件
ndk-build:ndk-build 脚本用于在NDK中心启动构建脚本.这些脚本:
自动探测您的开发系统和应用项目文件以确定要构建的内容.
生成二进制文件
将二进制文件复制到应用到项目路径Java:Android构建过程从Java来源生成.dex文件,这些文件是Android OS在Dalvik虚拟机中运行的文件.即使您的应用根本未包含任何Java源代码,构建过程仍会生成原生组件在其中运行的.dex可执行文件.
开发Java组件时,使用native关键字指示以原生形式实现的方法.例如,以下函数声明向编译器告知实现在原生库中:
public native int add(int x,int y);
原生共享库:NDK从原生源代码构建这些库或.so文件.
原生静态库:NDK也可以构建静态库或.a文件,可以关联到其他库.
Java原生接口(JNI):JNI时Java和C++组件用以互相沟通的借口.
应用二进制界面(ABI):ABI可以非常精确的定义应用的机器代码在运行时如何与系统交互.NDK根据这些定义构建.so文件.
清单:如果编写没有Java组件的应用,必须在清单中声明NativeActivity类.
下面俩个项目在使用ndk-build脚本构建时以及使用ndk-gdb脚本调试时才需要:Android.mk:必须在jni文件夹内创建Android.mk配置文件.ndk-build脚本将查看此文件,其中定义了模块及其名称、要编译的源文件、版本标志以及要链接的库.
-
Application.mk此文件枚举并描述您的应用需要的模块.这些信息包括:
用于针对特定平台进行编译的ABI.
工具链.
要包含的标准库(静态和动态STLprot或默认系统).流程
Android开发原生应用的流程一般如下:
- 设计应用,确定要在Java中的实现部分,以及要以原生代码形式实现的部分.
- 像创建任何其他Android项目一样创建一个Android应用项目.
- 如果要编写纯原生应用,请在AndroidMainifest.xml中声明NativeActivity类.
- 在“JNI”目录中创建一个描述原生库的Android.mk文件,包括名称、标志、链接库和要编译的源文件.
- 也可以创建一个配置目标ABI、工具链、发行/调试模式和STL的Application.mk文件.
ABI:armeabi
工具链:GCC4.8
模式:发行
STL:系统 - 将原生源代码置于项目的jni目录下.
- 使用ndk-build编译原生(.so、.a).
- 构建Java组件,生成可执行.dex文件.
- 将所有内容封装到一个APK文件中,包含.so、.dex以及应用运行所需的其他文件.