我是Android NDK的新手,我正在Android开发者网站上阅读these tips。它建议使用JNI_OnLoad
注册您的本机方法,但没有提供有关如何执行此操作的详细信息。
搜索Google's NDK sample repo on GitHub仅显示JNI_OnLoad
的一次使用,并且它不会调用RegisterNatives
。在网上搜索也没有太多关于如何做到这一点。
我觉得我错过了什么。据谷歌称,这应该是正确的做法,但他们自己的例子使用了"发现"方法命名方法。
这可能是一种古老的做法,那不再是真的了吗?
答案 0 :(得分:3)
RegisterNatives ,正确的方法是来自 JNI_OnLoad ,这也很有效,并且是shown prominently in NDK documentation。使用 RegisterNatives 与通常通过名称匹配自动解析本机方法(总是使用 javah 来获取正确的名称)的原因很少。
当你有许多本机方法时,你可能不希望共享库中有一个庞大的导出函数表。
使用自动匹配功能可以更轻松地进行逆向工程和黑客攻击。
您可以构建自定义逻辑以在运行时匹配本机方法。
@CriticalNative
方法必须使用 RegisterNatives 进行注册,而不是依赖于动态JNI链接。
这些原因都不适用于操作样本和入门教程。