我即将开始Android应用程序开发。
从What is NDK?文档中我无法提取以下信息:
使用NDK实际上是否会引入与SDK相比的新功能?
我对此感兴趣,因为使用NDK会大大增加应用程序的复杂性,所以如果我对性能提升不感兴趣,还有其他理由去NDK吗?
我的意思是例如:
-restart phone
提前填写任何有用的答案。
答案 0 :(得分:17)
你真的应该使用SDK,除非你有充分的理由使用NDK。好的理由可能会有所不同,但例如,您可以使用NDK:
如果您想使用OpenGL ES 2.0 for Android 2.1(Eclair),它只能通过NDK使用。对OpenGL ES 2.0的SDK支持始于Froyo版本。
如果您想使用Renderscript
如果您的应用程序逻辑的很大一部分用C / C ++编写
答案 1 :(得分:13)
NDK在功能方面受到更多限制。
您从NDK获得的是能够用C ++编写应用程序并将其编译为本机ARM代码的能力。如果您比C ++更喜欢C ++,如果您想要移植到Android的现有C ++应用程序,或者您只需要本机代码可以提供的额外性能,那么无论如何都应该使用NDK。
我自己没有这样做,但另一种选择是编写混合应用程序,其中应用程序主要使用Java编写,选择的函数用C ++编写,从Java代码调用。
答案 2 :(得分:9)
据我所知,使用NDK的唯一原因是从应用程序中挤出额外的性能并接近裸机。如果您不需要执行上述任何一项操作,则应该远离NDK。
另请注意,Dalvik VM已经具有非常出色的性能并且相对简单。
答案 3 :(得分:9)
对我而言,我认为了解NDK是非常重要的,NDK是移动应用程序开发中的强大工具。特别是如果你想开发一个多平台应用程序,NDK在这个领域是无与伦比的。由于使用C ++ for Android编写的相同代码可以在iOS,Windows或任何其他平台上轻松移植和运行,而无需更改原始代码。这实际上节省了大量时间用于开发在多个平台上运行的应用程序;作为游戏和其他经典应用程序。你无法使用SDK。
答案 4 :(得分:1)
本机方法是特定于平台的代码。它们通常用C或C ++等语言编写,并包含在库中(dll' s)。可以创建一个受益于此类库的混合Java应用程序。
使用原生方法的原因
通常,NDK的良好用例是CPU密集型应用程序,如游戏引擎,信号处理和物理模拟
本机方法的主要缺点是您不具备跨平台功能。
现在,如果您不知道原生代码是什么,那么您可能不需要使用本机代码。 Android NDK文档很好地解释了这一点:
...,您应该明白NDK不会使大多数应用受益。如 开发人员,您需要平衡其优势与缺点。 值得注意的是,在Android上使用本机代码通常不会导致 显着的性能提升,但它总是会增加您的应用程序 复杂。通常,只有在必要时才应使用NDK 到您的应用程序 - 从不因为您只是喜欢用C / C ++编程。什么时候 考虑是否应该使用本机代码进行开发 关于您的要求,看看Android框架API是否提供 您需要的功能。