Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android ndk vs sdk-如果涉及功能_Android_Android Ndk - Fatal编程技术网

android ndk vs sdk-如果涉及功能

android ndk vs sdk-如果涉及功能,android,android-ndk,Android,Android Ndk,我即将开始android应用程序开发 从文档中,我无法提取以下信息: 与SDK相比,使用NDK是否真的引入了新功能 我对此很感兴趣,因为使用NDK会大大增加应用程序的复杂性,所以如果我对性能的提高不感兴趣,那么使用NDK还有其他原因吗 我的意思是,例如: -重新启动手机 (我知道SDK或NDK都不允许这样做,我只是用它作为例子来说明我的意思)假设java SDK不允许这样做,但一些本机库允许这样做-那么我的问题的答案是肯定的,NDK确实添加了一些功能 Thanx提供了任何有用的答案。据我所知

我即将开始android应用程序开发

从文档中,我无法提取以下信息:

与SDK相比,使用NDK是否真的引入了新功能

我对此很感兴趣,因为使用NDK会大大增加应用程序的复杂性,所以如果我对性能的提高不感兴趣,那么使用NDK还有其他原因吗

我的意思是,例如:

-重新启动手机

  • (我知道SDK或NDK都不允许这样做,我只是用它作为例子来说明我的意思)假设java SDK不允许这样做,但一些本机库允许这样做-那么我的问题的答案是肯定的,NDK确实添加了一些功能

Thanx提供了任何有用的答案。

据我所知,使用NDK的唯一原因是从应用程序中挤出额外的性能,并更接近裸机。如果你不需要做这两件事,你可能应该远离NDK


还要注意的是,Dalvik虚拟机已经有了一些非常出色的性能,并且相对简单。

NDK在功能上受到了很大的限制

你从NDK中得到的是在C++中编写应用程序并将其编译成本地ARM代码的能力。如果你喜欢C++,比java好,如果你有一个C++的应用程序,你想把它移植到Android,或者如果你只需要额外的性能,只有本地代码可以提供,那么你应该使用NDK。
<>我自己没有做过,但是另一个选择是编写混合应用程序,应用程序主要是用java编写的,C++中选择的函数是java代码调用的。

,你应该使用SDK,除非你有充分的理由使用NDK。好的理由可能会有所不同,但例如,您可以使用NDK:

  • 如果您想在Android 2.1(Eclair)上使用OpenGL ES 2.0,则只能通过NDK使用。OpenGL ES 2.0的SDK支持始于Froyo版本

  • 如果要使用Renderscript

  • 如果应用程序的大部分逻辑都是用C/C编写的++


    • 对我来说,我认为了解NDK很重要,它是开发移动应用程序的强大工具。特别是如果你想开发一个多平台的应用程序,NDK在这个领域是无与伦比的。因为使用C++for Android编写的相同代码可以很容易地移植到iOS、Windows或任何其他平台上,并以相同的方式运行,而无需更改原始代码。这实际上节省了大量开发应用程序的时间,这些应用程序是为在多个平台上运行而开发的;作为游戏和其他经典应用。SDK不能做的事情。

      本机方法是特定于平台的代码。它们通常用C语言或C++语言编写,并包含在库(DLL)中。可以创建一个混合Java应用程序,从这些库中获益

      使用本机方法的原因

    • 访问设备或Android的特殊功能 操作系统
    • 加速
    • 获得对大量现有遗留代码的访问
    • 通常,NDK的良好用例是CPU密集型应用程序,如游戏引擎、信号处理和物理模拟

      本机方法的主要缺点是没有跨平台的能力

      现在,如果您不知道本机代码是什么,那么可能不需要使用本机代码。Android NDK文档很好地解释了这一点:

      …您应该明白,NDK不会使大多数应用程序受益。作为 作为开发人员,您需要平衡其优点和缺点。 值得注意的是,在Android上使用本机代码通常不会导致 显著的性能改进,但它总是增加你的应用程序 复杂性。通常,只有在必要时才应使用NDK 永远不要因为你喜欢用C/C++编程而使用你的应用程序。什么时候 检查是否应该使用本机代码进行开发,请思考 了解您的需求,并查看Android框架API是否提供 您需要的功能


      @谢谢你的接球。编辑我的回答。抱歉这么晚才对这个问题发表评论,但我只是想确定,在C++中写C++是因为你喜欢它不是一个很好的理由使用NDK。@ DealEntEnter,因为没有人应该喜欢C++,或者因为没有人应该使用NDK?@ CorayThan。C++编写纯粹是因为你不想用java写是一个坏的原因。如NDK下载页面所述,“在下载NDK之前,您应该了解NDK不会使大多数应用受益。作为一名开发人员,您需要平衡它的优点和缺点。值得注意的是,在Android上使用本机代码通常不会带来明显的性能改进,但它总是会增加应用程序的复杂性。一般来说,如果NDK对你的应用程序至关重要,你应该只使用它,而不是因为你更喜欢用C/C++编程。“@Alex_Nabu不写Android,也不学新语言吗?@CorayThan我是认真的。你真的会建议花几个月的时间学习一门新语言而不是使用NDK吗?当然缺点并没有那么糟糕。我同意。如今,很难想象任何一款好的应用程序只会被安卓这样的平台所束缚。因此,一般的做法是将UI层之外的所有内容都留给本机代码,以便可以轻松地将它们移植到其他平台,其中一些可能是制造商指定的平台。我看不出这是一个基于观点的问题