Android NativeActivity

dzh*_*lil 10 android native-code android-ndk

Android的NDK刚刚显著扩大到包括完全在本地C/C++代码编写Android应用程序的支持.现在人们可以捕捉使用原生代码,键盘和触摸屏上输入事件,并且还实现在C/C++使用新的NativeActivity的类的应用程序生命周期.

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

Lud*_*rin 8

NDK本身不是原生的.它在很大程度上是围绕Android SDK的JNI包装器.使用NativeActivity为您提供了一种处理某些应用程序生命周期事件的便捷方式,并在顶部添加您自己的本机代码.ALooper,AInputQueue等都是Java SDK对应物的JNI包装器,其中一些包含私有且无法访问真实应用程序的其他代码.

在Android开发方面,没有完全用本机C++编写应用程序的事情 - 你会(在我认为的每个真实应用案例中)总是需要使用Android API:s,这在很大程度上纯Java.您通过NDK提供的包装器或您自己创建的包装器使用这些包装器并不能真正改变它.

所以,回答你的问题:不,这是不值得的,因为你最终会为SDK调用编写JNI包装器,而不是将JNI包装器写入你自己的Java方法,这些方法做同样的事情,代码更少,代码更简单,更快的代码.例如,显示使用"pure c ++"的对话框涉及很多JNI调用.只是通过JNI调用Java方法做同样的事情将为您提供更快的代码(一个JNI调用),并且可以说,代码更容易维护.

要完全了解您可以做什么,您必须检查Android源代码.从NDK中提供的native_app_glue.c开始,然后继续使用AActivity,ALooper,AInputQueue等操作系统实现.谷歌代码搜索是一个很好的帮助.:-)

如果在Java中很容易做,并且包含许多调用,则通过JNI调用一个方法来完成所有操作,而不是编写所有额外的代码来执行多个JNI调用.保留尽可能多的现有C++代码是合理的.

  • 如果您正在创建不需要对话框的OpenGL游戏,并且其UI在100%OpenGL中绘制,那该怎么办?使用NativeActivity会更有意义吗? (7认同)
  • 在那种情况下,它将是完美的意义. (7认同)