1.     SDK

Android SDK(Android Software Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”,也就是说我们还可以采用C/C++语言。


2.     NDK

NDK即Native Development Kit,众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。

NDK是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk(AndroidPackage的缩写,Android安装包)。这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。它可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作

NDK提供了一份稳定、功能有限的API头文件声明,Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

 为什么使用NDK

(1)  代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。

(2)  可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

(3)  提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

(4)便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

3.     JNI

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分。

JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地的代码的一个关键性原因在于C/C++代码的高效性。


android ndk sdk版本 安卓sdk和ndk的区别_android ndk sdk版本


获取系统版本:adb shell getprop ro.build.version.release

7.1.2

获取系统api版本:adb shell getprop ro.build.version.sdk

25

Code name

Version

API level

Nougat

7.1

API level 25

Nougat

7.0

API level 24

Marshmallow

6.0

API level 23

Lollipop

5.1

API level 22

Lollipop

5.0

API level 21

KitKat

4.4 - 4.4.4

API level 19

Jelly Bean

4.3.x

API level 18

Jelly Bean

4.2.x

API level 17

Jelly Bean

4.1.x

API level 16

Ice Cream Sandwich

4.0.3 - 4.0.4

API level 15, NDK 8

Ice Cream Sandwich

4.0.1 - 4.0.2

API level 14, NDK 7

Honeycomb

3.2.x

API level 13

Honeycomb

3.1

API level 12, NDK 6

Honeycomb

3.0

API level 11

Gingerbread

2.3.3 - 2.3.7

API level 10

Gingerbread

2.3 - 2.3.2

API level 9, NDK 5

Froyo

2.2.x

API level 8, NDK 4

Eclair

2.1

API level 7, NDK 3

Eclair

2.0.1

API level 6

Eclair

2.0

API level 5

Donut

1.6

API level 4, NDK 2

Cupcake

1.5

API level 3, NDK 1

(no code name)

1.1

API level 2

(no code name)

1.0

API level 1


对于Android NDK版本来说,编译出来的so文件对应运行的Android固件最小版本是有一定要求的,高版本的NDK编译出的.so文件由于包含了一些新的特性,新特性可能在低版本的Android固件上无法运行