大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述JNI_OnLoad通常用于Android NDK吗?相关的知识,希望能为你提供帮助。
我是android NDK的新手,我在Android开发者网站上阅读these tips。它建议使用JNI_OnLoad
注册您的本机方法,但没有详细说明如何做到这一点。
搜索Google's NDK sample repo on GitHub只出现了JNI_OnLoad
的一种用法,它没有调用RegisterNatives
。搜索网络也没有太多关于如何做到这一点。
我觉得我错过了什么。据Google称,这应该是正确的方法,但他们自己的例子使用“发现”方法命名方法。
【JNI_OnLoad通常用于Android NDK吗()】这可能是一种古老的做法,那不是真的已经完成了吗?
答案在Android上完全支持RegisterNatives,正确的方法来自JNI_OnLoad,它也运行良好并且是shown prominently in NDK documentation。使用RegisterNatives与通常通过名称匹配自动解析本机方法的原因很少(总是使用javah来获取正确的名称)。
- 当您拥有许多本机方法时,您可能不希望在共享库中拥有庞大的导出函数表。
- 使用自动匹配可以更轻松地进行逆向工程和黑客攻击共享库。
- 您可以构建自定义逻辑以在运行时匹配本机方法。
@CriticalNative
方法必须在RegisterNatives中注册,而不是依赖于动态JNI链接。
推荐阅读
- 在Android Studio 3.0中构建PIE和非PIE可执行文件
- Android Studio 3.0.1在Android.mk中注释掉行
- Android Studio 3.0.1忽略Application.mk中的APP_ABI()
- Android NDK将参数传递给本机方法
- 有没有办法在Android NDK上使用__int128_t()
- 从.aar文件Android中提取代码
- TravisCI中的NDK,CMake和Android
- 如何使用cmake和Android NDK在C ++中加载线程支持
- 不构建时Android Studio高CPU使用率