Android NDK - NativeActivity 与 JNI 库

2024-03-19

两年前,我开发了一个增强现实框架android-7(闪电泡芙) http://developer.android.com/about/versions/android-2.1.html。由于 AR 应用程序是计算密集型任务,因此我开发了一个 JNI C++ 库,供 Java 活动使用来渲染和注册虚拟环境。在Java中获取的传感器读数被传递到underline c++库来计算虚拟环境的注册。三维对象由从调用的本机绘制函数渲染GL表面视图 http://developer.android.com/reference/android/opengl/GLSurfaceView.html。这会导致大量 JNI 调用。

现在我想将应用程序移植到android-15(冰淇淋三明治) http://developer.android.com/about/versions/android-4.0.3.html。从...开始android-9(姜饼) http://developer.android.com/about/versions/android-2.3.html安卓允许使用本地活动 http://developer.android.com/reference/android/app/NativeActivity.html.

我想了解开发 AR 应用程序的更好方法。由于每个 JNI 调用都会带来开销,因此最好避免它们。可以使用NativeActivity吗?我没有找到解释 NativeActivity 如何工作的详尽指南,但阅读这个文件 http://en.wikibooks.org/wiki/OpenGL_Programming/Android_GLUT_Wrapper#Android_Events无论如何,它似乎会导致大量 JNI 调用。是否有任何架构文档解释 NativeActivity 的工作原理? NativeActivity 只是一个避免 java 代码的“JNI 包装器”吗?关于性能,使用 NativeActivity 代替我之前使用的 JNI 库有什么优势吗?

多谢。


NativeActivity 不会提高您的框架的性能。它仍然使用 JNI 与系统通信,只是在幕后。

此外,有充分的理由不使用它。如果我正确理解您的目的,您希望其他应用程序利用您的代码。通过强迫他们使用 NativeActivity,您会严重减少他们的自由,并要求他们在不太熟悉的环境中挣扎。 NativeActivity 有许多限制,例如它无法加载多个 JNI 库。

最后,如果您寻求 AR 框架的优化,我会建议一个完全不同的方向:您可以使用新的设置预览纹理() http://developer.android.com/reference/android/hardware/Camera.html#setPreviewTexture%28android.graphics.SurfaceTexture%29 API.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android NDK - NativeActivity 与 JNI 库 的相关文章

随机推荐