「NDK」一 初次见面
2019-07-11 本文已影响0人
叨码
1.NDK到底是个啥?
至于概念,首要建议官网NDK文档了解下官宣 ,貌似需要梯子。。没有梯子的你,继续往下看吧
1.1 NDK的基础概念
简单来讲,NDK (Native Development Kit) 原生开发工具包,说白了就是一个工具,即帮助开发原生代码的一系列工具,包含但不限于编译工具、一些公共库、开发IDE等。什么作用呢?
- 在不同平台间移植其应用。
- 重复使用现有库,或提供自己的库给别人重复使用。
- 某些情况下提高性能,如游戏这种计算密集型应用,c/c++总要比java快一点吧。
1.2 主要组件
构建应用时,需要了解一下组件
1.2.1 ndk-bulid
文件是Android NDK r4中引入的一个shell脚本。作用在于调用正确的NDK构建脚本,最终还是调用的NDK自己的编译工具。脚本作用:
-
自动探测您开发的系统或应用的项目文件以确定要构建的内容
-
生成二进制文件
-
将二进制文件复制到应用的项目路径
==>官宣
1.2.2 JNI (Java Native Interface) : Java本地接口,就是Java和c/c++组件进行友好沟通的接口。
1.2.3 Android.mk 和 Application.mk
你可以认为是描述编译参数和一些配置的文件:指定使用c++11呢还是使用c++14编译,会引用哪些共享库,指定编译的abi等。只有有了这些,NDK中的编译工具才能准确的编译c/c++代码。这个两个只在用ndk-build脚本构建项目或ndk-gdb脚本调试时才会用到。
1.2.3CMake
在AS2.2之后,工具中增加了CMake的支持,区别于Unix下使用makefile文件编译,windows下使用project文件编译。CMake是一个跨平台的编译工具,不会直接编译出对象,而是根据自定义的语言规则(CMakeLists.txt)生成对应的makefile和project文件,然后在调用底层的编译。就是说,在AS2.2之后,有两种方式来编译你的c/c++代码: 一个是ndk-build + Android.mk + Application.mk 组合。另一个是CMake+CMakeLists.txt组合。