我即将开始进行Android应用程序开发。
从什么是NDK?文档中,我无法提取以下信息:
相比SDK,使用NDK是否会引入新功能?
我对此很感兴趣,因为使用NDK会大大增加应用程序的复杂性,如果我对性能提升不感兴趣,是否还有其他原因选择NDK?
我的意思是,例如:
-重新启动手机
- (我知道SDK和NDK都不允许这样做,我只是用它作为我的问题所指的示例)假设Java SDK不允许这样做,但某些本地库可以-那么我的问题的答案将是是,NDK确实添加了一些功能
先感谢任何有帮助的回答。
我即将开始进行Android应用程序开发。
从什么是NDK?文档中,我无法提取以下信息:
相比SDK,使用NDK是否会引入新功能?
我对此很感兴趣,因为使用NDK会大大增加应用程序的复杂性,如果我对性能提升不感兴趣,是否还有其他原因选择NDK?
我的意思是,例如:
-重新启动手机
先感谢任何有帮助的回答。
除非你有很好的理由使用NDK,否则你应该使用SDK。好的理由可能各不相同,但是例如,你可以使用NDK:
如果你想在Android 2.1(爱克莱尔)中使用OpenGL ES 2.0,则只能通过NDK来实现。SDK对OpenGL ES 2.0的支持始于Froyo版本。
如果你想使用Renderscript
如果你的应用程序逻辑的大部分都是用C/C++编写的
在功能方面,NDK要受到很大的限制。
你可以从NDK中获得的是使用C++编写应用程序并将其编译为本地ARM代码的能力。如果你更喜欢C++而不是Java,如果你有一个现有的C++应用程序想要移植到Android上,或者如果你只需要本地代码才能提供的额外性能,那么你应该使用NDK。
我自己没做过这个,但另一种选择是编写混合应用程序,在这种应用程序中,大部分应用程序都是用Java编写的,而选定的一些函数则是用C++编写的,并且从Java代码中调用。
我认为了解NDK对移动应用开发至关重要。特别是如果您想开发多平台应用程序,NDK在此领域无可匹敌。由于针对Android编写的相同C++代码可以轻松移植并以不改变原始代码的方式在iOS、Windows或任何其他平台上运行,因此可以节省大量开发应用程序所需的时间;比如游戏和其他经典应用程序。这是SDK无法做到的。
本地方法是平台特定的代码。它们通常用诸如C或C ++的语言编写,并包含在库(dll)中。可以创建一个混合Java应用程序,从这些库中获益。
使用本地方法的原因
通常,NDK的好用例是CPU密集型应用程序,例如游戏引擎,信号处理和物理模拟。
主要缺点是您将没有跨平台能力。
如果您不知道什么是本地代码,则可能不需要使用本地代码。 Android NDK文档解释得很好:
……,您应该了解NDK对大多数应用程序没有好处。作为开发人员,您需要在其优点与缺点之间取得平衡。特别是,在Android上使用本机代码通常不会导致明显的性能改进,但它始终会增加应用程序的复杂性。总的来说,只有在必要时才应使用NDK,而不是仅仅因为您更喜欢使用C / C ++编程。在检查是否应该使用本机代码时,请考虑您的要求并查看Android框架API是否提供所需功能。