Android NDK 只是大大扩展了,以包括对本机C/C ++代码完全编写Android应用程序的支持。现在,可以使用本机代码在键盘和触摸屏上捕获输入事件,还可以使用新的Nativeactivity类以C/C ++实现应用程序生命周期。

鉴于所有扩展的本机功能,是否值得完全绕过Java并用本机代码编写Android应用程序?

有帮助吗?

解决方案

NDK不是本地人。它在很大程度上是Android SDK周围的JNI包装器。使用Nativeactivity可以为处理某些应用程序生活周期事件的方便方式,并在顶部添加自己的本机代码。 Alooper,Ainputqueue等是Java SDK对应物的所有JNI包装器,有些具有私有代码,对于真实应用程序而言是无法访问的。

当涉及到Android开发时,没有完全在本机C ++中编写应用程序的事情 - 您将(在我能想到的每个实际应用程序中)总是需要使用Android API:S,这在很大程度上是纯Java。无论您是通过NDK提供的包装器或您创建自己创建的包装器的包装器并没有真正改变这一点。

因此,要回答您的问题:不,这是不值得的,因为您最终会为SDK调用编写JNI包装器,而不是将JNI包装器写入您自己的Java方法,这些方法可以使用相同的操作,使用更少的代码,更简单的代码和更简单的代码和更简单的代码和更快的代码。例如,使用“纯C ++”显示对话框,涉及很多JNI调用。只需通过JNI调用JAVA方法,该方法可以为您提供更快的代码(一个JNI调用),并且可以说是更易于维护的代码。

要充分了解您可以做什么,您确实必须检查Android源代码。从NDK中可用的本机_app_glue.c开始,然后继续进行AACTIVITY,ALOOPER,AINPUTQUEUE等的OS实现。Google代码搜索对此有很大帮助。 :-)

如果在Java中很容易执行操作,并且包含许多呼叫,请通过JNI调用一种方法可以完成所有操作,而不是编写所有额外的代码来使用多个JNI调用来执行此操作。保留您现有的C ++代码的大部分 合理的.

其他提示

如果您只是在制作标准申请。 Java SDK现在比本地同行更完整,因此您仍然会使事情变得更加困难。

如果您不做需要NDK的事情(阅读:实时性能敏感),请坚持使用Java。

如果可以的话,请坚持使用Java样式应用程序,直到版本的Android支持本机活动占已安装基础的很大一部分。

对于以前难以做的事情 - 尤其是现有代码的端口 - 这可能是一个很大的帮助。

目前尚不清楚什么已经改变了,而只是写自己的薄Java包装器。例如,是否仍然有Dalvik VM的副本在周围徘徊?

只是一些思考的食物,但是如果您在iOS和Android上有一个应用程序,则可能可以共享一些C/C ++代码。显然,iOS OBJ-C和平台特定代码在其他地方无法使用。 (同上特定于Android的东西)。但是您可能可以拥有一些平台中立的共享代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top