background image

Android 编 程 大 PK : NDK  vs. 

RenderScript

Android 平台为应用程序在传统的 Android 应用边界外面运行提供了两种方法。第一种、

也 是 应 用 最 广 泛 的 方 法 是 使 用 原 生 开 发 工 具 包

(NDK) 。 第 二 种 方 法 是 使 用

RenderScript(RS),这是一种低级的高性能编程语言。这两种机制都适用于 3D 渲染和处理器
密集型计算。

我们在本文中将比较

NDK 和 RS,帮助你决定何时使用其中一种方法。

NDK vs. RenderScript:编程语言和可移植性

NDK 让开发人员可以用 C 或 C++编程,并通过 Java 原生接口(JNI)机制与 Android 应用

程序进行联系。可用的库是标准库,基本上不需要变更,就可以常常移植现有的

C/C++代码。

此外,

C++与 Java 区别不是很大,许多开发人员同时精通这两种语言。

RenderScript 则采取了不同的方法,它使用 C99 语法(标准 C 来自 1999 年,最新标准是

C11,来自 2011 年),新的应用编程接口(API)最终编译成原生代码。虽然这种语法广为人知,
但是使用这套系统面临一个学习过程,因为其

API 并非广为人知。

最终的可移植性体现在有没有在种类最广泛的设备和平台上使用的库。

NDK 让你可以

利用现有的

C/C++库,你可能已经在其他平台上使用这些库。RenderScript 无法从其他 C 应

用程序移植过来,不过它在

Android 设备上比 NDK 更为常见。比如说,RenderScript 可在谷

歌电视

(Google TV)设备上运行,但是目前 NDK 还缺少对谷歌电视平台的支持,即使它运

Android。

NDK vs. RenderScript:编译和调试

NDK 编写的代码必须事先针对每一个目标原生平台来编译。如果应用程序在架构未

得到支持的平台上运行,应用程序的

NDK 代码部分就无法正常运行。RenderScript 在你的开

发机器上进行第一遍编译,然后在目标设备上进行最后一遍编译,因而带来了更高效的原
生二进制代码。这意味着,凡是支持

RenderScript 的设备都可以运行你的代码,不管采用什

么架构。

目前,

RenderScript 带来的代码只能在主处理器上运行,它会自动生成可以利用多个核