2017-07-20 29 views
1

我是Android NDK的新手,我在Android开发人员网站上阅读了these tips。它建议使用JNI_OnLoad来注册您的本地方法,但没有提供如何做到这一点的详细信息。JNI_OnLoad通常用于Android NDK吗?

搜索Google's NDK sample repo on GitHub唯一止跌回升的JNI_OnLoad一个用途,它不叫RegisterNatives。搜索网络并没有太多关于如何做到这一点。

我觉得我失去了一些东西。据Google称,这应该是正确的做法,但他们自己的例子使用“发现”方法命名方法。

这也许做的老办法,这不是真正做到了吗?

回答

2

RegisterNatives完全支持Android和做是正确的方式,从JNI_OnLoad,这也运作良好,并为shown prominently in NDK documentation。有几个原因使用RegisterNatives与通过名称匹配(始终使用javah以获得正确名称)本机方法通常的自动解决方案。

  1. 当你拥有的本地方法许多,你可能不希望有一个巨大的导出函数表中的共享库。

  2. 使用自动匹配,使反向工程和黑客攻击的共享库更容易。

  3. 您可以创建自定义的逻辑,以匹配在运行时的本地方法。

  4. @CriticalNative方法必须与RegisterNatives而不是依赖于动态链接JNI进行注册。

这些原因都不适用于how-to样本和入门教程。

+0

是的,你所提供的链接是我指的是文档的同一部分。我会更新我的链接,直接指向该小节。尽管如此,还是缺少很多细节,而且我一直无法在我的在线搜索中将它们打开;这让我想知道为什么会这样。你能指点我一个详细的例子或教程,其中使用了'JNI_OnLoad'吗?不过,我会接受这个答案,因为它回答了所述的问题。感谢您的见解。 – orodbhen

+0

不是教程,但是很多开源的:[简单](https://android.googlesource.com/platform/development/+/master/samples/SimpleJNI)或[更先进](HTTPS://chromium.googlesource。 COM /外部/的WebRTC/+ /主/模块/ audio_device /机器人/ audio_manager.cc)。 –