Android NDK(Native Development Kit)是一种开发Android应用程序时使用的工具,其主要目的是允许开发者用C/C++编写Android应用程序。
Android 应用程序通常使用 Java 语言开发,人们习惯上将这种开发方式称为“Java 开发”,而 Android NDK 则是允许使用 C/C++ 语言进行开发的一种“原生开发”。使用 Android NDK 开发的应用程序可以更好地控制硬件、平台的特性,从而提供更丰富的用户体验,但也需要更高的开发水平。
1. NDK使用场景
1.1 提升应用性能
对于一些底层运算密集型计算场景,使用C/C++来做计算可以更快地进行运算,比如为游戏开发中的物理引擎或者图像处理等模块提供支持。
1.2 调用系统底层库
Android平台引入了一些底层的系统库,如OpenSSL, Sockets,Bzip2等库,这些库都有C/C++的接口,并且App通过NDK可以直接调用这些库。
2. NDK原理
Android平台中,一般来讲,应用程序(.APK)是由Dex bytecode执行的。由人工编写的C/C++代码,编译器产生了.so库文件,然后应用程序可以通过Java Native Interface (JNI)来调用这个库文件中的函数。JNI是Java框架向本地代码提供了接口的方法之一。
Android 应用可以通过java中的Native层来调用.so文件里面的方法。而NDK的作用就是可以让开发者在像写Java代码一样的基础上,直接使用NDK提供的本地编译环境将C/C++代码编译成so文件,达到加速Android应用,更好地调用底层硬件和系统API。
3. NDK安装和使用
首先,需要根据自己开发的机器下载对应的NDK版本,Android Studio会帮助我们完成NDK的安装工作。
安装完成后,进入到项目的build.gradle,在android节点下加上nativeBuild节点,如下:
```xml
android {
defaultConfig {
externalNativeBuild {
cmake {
targets "native-lib"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
```
同时,在项目根目录下新建一个CMakeLists.txt文件,指定.so的生成及相关依赖库和头文件等信息。
```xml
cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# 手动指定头文件
include_directories(src/main/cpp/include)
# 添加其他库
add_library(log
SHARED
IMPORTED )
set_target_properties(log
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/liblog.so)
find_library( log-lib
log )
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )
```
编译后,可以得到.so文件,放置在app/src/main/libs有两个文件夹,铜葫芦的libs下的是CPU架构文件夹,arm64-v8a,armeabi,armeabi-v7a等,对于jni需要使用的设备的CPU架构情况下,直接复制对应横杠 libs/armeabi-v7a/libnative-lib.so 即可。
4. 总结
本文简单介绍了Android NDK的原理及使用方法,本文只是一个简单的入门教程,针对其中的一些问题,需要使用者自己学习更多的知识。对于开发者来说,掌握Android NDK可以大大提升开发的效率和能力,让开发者写出更好的应用程序,提供更好的用户体验。