NDK 入门指南
2020-06-07 本文已影响0人
千浪
目前关于NDK开发,Android Developer官网只提供了有限的文档说明,缺乏更细致深入的介绍。这个专题结合笔者多年来的工作经验,给大家讲解更系统更深入的内容。通过阅读本专题,可以避免常见的开发问题,提升NDK开发效率。
2020年我会利用周末时间持续更新这个专题,如果你正好要学习相关内容,可以关注并留下评论互动。
关于作者:12年移动端开发经验,现专注于C++开发。
使用场景
以下是我总结的NDK使用场景:
- 项目中要使用的开源库代码是C++的;
- 双端开发(Android/iOS)中相同的重逻辑的部分可以由C++一套实现即可;
- 个别需要提升性能的场景,C++代码的执行效率会比Java高出不少;
- 有加密要求的安全场景;
Android上对接C++需要使用JNI;iOS的OC代码可以和C++联编,省去了写JNI的过程。本专题会对JNI使用会有详细的、系统的说明。彻底避免大家在写JNI的过程中,通过搜索引擎搜索个别问题去拼凑编写JNI。
概念
- 静态库(Static libraries):扩展名为“.a”的文件。静态库其实是个压缩文件,是所以C++编译的目标文件的集合。
- 动态库/共享库(Shared libraries):扩展名为“.so”的文件。比方“libc++_shared.so”,当代码中多处loadLibrary时,只需要加载一次,在内存中可以共享,这便是称之为共享库的原因。打包到apk中的只能是动态库。
- Java 原生接口 (JNI):JNI编写看起来很简单,但是对于新手来说会有很多坑,实际上这个专题大部分也是用来介绍JNI相关的内容。
官方入门指南
请先阅读Android官方 NDK 入门指南。(英文不太好的同学可以切到中文。)
关于构建脚本
官方入门指南中介绍了构建Native代码有两种方式:
- ndk-build脚本
- CMake脚本
推荐初学者选择使用CMake脚本构建。CMake是开源的跨平台构建工具,是构建C++项目的利器。学会CMake后便在能各个系统构建相应系统的库。
也就是说你可以使用CMake使用同一套脚本构建MAC、Windows、Linux、Android和iOS等系统适用的库。而ndk-build脚本仅仅只可以用来构建Android的库。
关于学习CMake,github上有个开源项目learning-cmake,我们刚开始只需要简单的入门,不必太深入,因为对于构建大型项目来说,掌握CMake本身就需要花很长时间。