【发布时间】:2011-10-03 09:19:35
【问题描述】:
什么是 Android NDK(原生开发工具包)?如何使用它?为什么要使用它?
【问题讨论】:
-
试试这个链接:What is the NDK?
-
Use Of Android NDK的可能重复
标签: android android-ndk
什么是 Android NDK(原生开发工具包)?如何使用它?为什么要使用它?
【问题讨论】:
标签: android android-ndk
NDK(本机开发工具包)是一种工具,可让您使用 C/C++ 为 Android 设备进行编程。它旨在与 SDK 集成(它被描述为“配套工具”)并且仅用于项目的性能关键部分。请参阅here 了解更多信息。
【讨论】:
NDK 可能会提高应用程序的性能。这对许多人来说通常是正确的 处理器绑定的应用程序。许多多媒体应用程序和视频游戏使用 用于处理器密集型任务的本机代码。 性能改进可以来自三个来源。首先将原生代码编译成二进制代码直接在OS上运行,而Java代码被翻译成Java 字节码并由 Dalvik 虚拟机 (VM) 解释。在 Android 2.2 或更高版本中, Dalvik VM 中添加了 Just-In-Time (JIT) 编译器,用于分析和优化 Java 程序运行时的字节码(例如,JIT 可以编译 在执行之前将字节码转换为二进制码)。但在很多情况下,原生代码仍然 运行速度比 Java 代码快。
Java 代码由 Android 上的 Dalvik VM 运行。 Dalvik VM 是专门设计的 对于硬件资源受限的系统(内存空间、处理器 速度等)。
NDK 性能改进的第二个来源是本机代码允许 开发人员利用 Android SDK 无法访问的一些处理器功能, 例如 NEON,一种单指令多数据 (SIMD) 技术,允许多个 要并行处理的数据元素。一个特定的编码任务示例是颜色 转换为视频帧或照片。假设我们要转换一张 1920x1280 的照片 从 RGB 颜色空间到 YCbCr 颜色空间的像素。天真的方法是应用 每个像素(即超过两百万像素)的转换公式。 借助 NEON,我们可以一次处理多个像素以减少处理时间。
第三个方面是我们可以在汇编级别优化关键代码,这是一个 桌面软件开发中的常见做法。
缺点
NDK 无法直接访问 Android SDK 中提供的大量 API,使用 NDK 开发总是会引入额外的复杂性 进入您的应用程序。
【讨论】:
Android NDK 是 Android SDK 的配套工具,可让您使用本机代码构建应用的性能关键部分。它提供了标题和库,允许您在使用C 或 C++ 编程时构建活动、处理用户输入、使用硬件传感器、访问应用程序资源等。如果您编写本机代码,您的应用程序仍会打包到 .apk 文件中,并且它们仍会在设备上的虚拟机内运行。基本的 Android 应用程序模型没有改变。
以下链接也回答了您的问题:
【讨论】:
Android NDK 是一个工具集,可让您嵌入组件 在您的 Android 应用程序中使用本机代码。
Android 应用程序在 Dalvik 虚拟机中运行。 NDK 允许 您使用本机代码实现部分应用程序 C 和 C++ 等语言。这可以为某些人带来好处 应用程序类,以重用现有代码的形式和 某些情况下会提高速度。
来源:http://developer.android.com/sdk/ndk/overview.html
Android NDK 是 Android SDK 的配套工具,可让您 使用本机代码构建应用程序的性能关键部分。它 提供允许您构建活动的标头和库, 处理用户输入,使用硬件传感器,访问应用程序资源, 等等,在使用 C 或 C++ 编程时。如果您编写本机代码,您的 应用程序仍然被打包到一个 .apk 文件中并且它们仍然运行 设备上的虚拟机内部。基本的安卓 应用模型不会改变。
【讨论】:
NDK 只是一组工具,可让您为您的应用程序编写 C/C++ 代码。例如,假设您想为您的应用程序添加一个关键功能/性能,并且您想用 C/C++ 编写它然后 eclipse或任何其他 IDE 都不允许您编写 C/C++,在这种情况下,您必须使用 NDK 并将其集成到您的应用中。
【讨论】:
NDK 是一个工具集,可让您使用 C 和 C++ 等本机代码语言实现应用的某些部分......查看此https://developer.android.com/tools/sdk/ndk/index.html
【讨论】:
Android NDK(原生开发工具包)
Android Native Development Kit (NDK) 是开发人员使用 C/C++ 编写代码并编译为原生代码
为什么要使用它?
源代码被直接编译为 CPU 的机器代码(而不是像 Java 那样的中间语言),然后开发人员能够获得最佳性能
如何使用它?
这里最好的教程
https://developer.android.com/ndk/index.html
https://www.androidauthority.com/android-ndk-everything-need-know-677642/
https://www.ntu.edu.sg/home/ehchua/programming/android/Android_NDK.html
【讨论】: