Android NDK学习系列——第一篇(持续更新)
NDK学习系列--第一篇
简介:
这是作者本人学习ndk开发的一个文章系列,因为本人Android开发出身,最近需要提升音视频开发能力,而音视频必须使用到ndk,所以记录一下学习的要点,在简书上分享给一起学习的朋友们。希望能对大家有所帮助。本人水平有限,如果有错误的地方,还请大家海涵,帮我指点一二。
NDK介绍
(英语:native development kit,简称NDK)是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。[维基百科]
NDK是一系列工具的集合
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的.
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
为什么要NDK开发
NDK开发具有以下优点:
1. 项目需要调用底层的一些C/C++的一些东西(java无法直接访问到操作系统底层(如系统硬件等)),或者已经在C/C++环境下实现了功能代码(大部分现存的开源库都是用C/C++代码编写的。),直接使用即可。NDK开发常用于驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。
2. 为了效率更加高效些。将要求高性能的应用逻辑使用C/C++开发,从而提高应用程序的执行效率。但是C/C++代码虽然是高效的,在java与C/C++相互调用时却增大了开销;
3. 基于安全性的考虑。防止代码被反编译,为了安全起见,使用C/C++语言来编写重要的部分以增大系统的安全性,最后生成so库(用过第三方库的应该都不陌生)便于给人提供方便。(任何有效的代码混淆对于会smail语法反编译你apk是分分钟的事,即使你加壳也不能幸免高手的攻击)
4. 便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。
开发HelloWorld
开发环境:Android Studio4.0 gradle版本5.4.1
第一步:new project,选择下图中native c++,点击Next
第二步:点击finish即可创建项目,创建后的项目等编译成功即可运行。运行后可以看到Hello World!。恭喜你,迈出了ndk的第一步,只要坚持下去,升职加薪,迎娶白富美就在明天。
第一篇结语
俗话说万事开头难,但是ndk的第一个项目跑起来还是很简单的呀,既然不难那就继续坚持学习吧!下一篇开始分析Android ndk项目的结构。敬请期待!