导图社区 NDK开发环境知识点学习笔记
NDK开发简介 ndk代码中特有部分,AS中为JAVA有loadlibrary与native函数 public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on appli...
网店详情页排版方法分享~包括中心页面组成,优质详情必备,详情页的排版参考方法。感兴趣的小伙伴可以看看哦~
喷绘色彩基础培训方案,内容涵盖色彩基础,喷绘写真。框架清晰,内容丰富,希望对小伙伴有所帮助哦~
酒窖营销计划方案,包括结果目标,过程目标。框架清晰,内容丰富,有需要的小伙伴可以看看哦~ 可供大家参考,借鉴,交流。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
NDK开发环境知识点学习笔记
概述
背景
Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。不过,Google也表示,使用原生SDK编程相比Dalvik虚拟机也有一些劣势,Android SDK文档里,找不到任何JNI方面的帮助。即使第三方应用开发者使用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍。比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用
NDK全称:Native Development Kit
NDK是一系列工具的集合
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的
NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so
NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作
类似于JDK;只是一套工具,它可以帮助开发者在android开发中,它使用的是JNI机制.
NDK提供了一份稳定、功能有限的API头文件声明
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog
JNI全称:Java Native Interface
它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。
驱动开发 实时渲染的游戏上,音视频处理,文件压缩,人脸识别
两者的区别
JNI Java Native Interface java调用本地接口 的技术名词
NDK Native Developer Kit 谷歌给开发人员的工具包
作用
NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式
使用NDK,我们可以将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。使用NDK,我们可以将需要保密的应用逻辑使用C开发。毕竟,Java包都是可以反编译的。
NDK将是Android平台支持C开发的开端
NDK提供了的开发工具集合,使开发人员可以便捷地开发、发布C组件
优缺点
优点
代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。
可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。
提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。
便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用
缺点
开发麻烦复杂
难度相对较高
开发应用场景
依赖so文件
直接开发c
注意
使用NDK大部分情况需要将一些已有的C函数库移植到Android平台的所选择的快捷方法,如视频解码、图像处理OpenVC等,直播,图片压缩等
NDK开发环境的搭建
下载安装Android NDK
http://developer.android.com/sdk/ndk/index.html(官网翻墙)
http://www.androiddevtools.cn/(国内镜像)
配置环境变量
新建:NDK_HOME,如[你的路径名]\ndk-bundle
在path中增加%NDK_HOME%
构建方式
CMake
下载安装cygwin
由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了
下载地址:http://www.cygwin.com
下载CMake:
外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
下载LLDB:
Android Studio 上面调试本地代码的工具。
MK
创建NDK工程
在 Configure your new project 选项中,勾选 Include C++ Support 选项。
点击 Next,后面的流程和创建普通的 Android studio 工程一样。
在 Customize C++ Support 选项卡中。你有下面几种方式来自定义你的项目:
C++ Standard:点击下拉框,可以选择标准 C++,或者选择默认 CMake 设置的 Toolchain Default 选项。
Exceptions Support:如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -fexcetions 标志。
Runtime Type Information Support:如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的 cppFlags 中添加 -frtti 标志。