
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1 为so添加交互:使用JNI接口编写md5方法
在编写调用JNI接口实现md5方法之前,我们先用Java实现md5方法,以便作为示例来指导编写。相关代码如下所示。编译好后运行,运行结果无误。


之后我们依靠Java版示例,定义本地方法md52(),并使用<Alt+Enter>快捷键让Android Studio帮我们创建相应函数的空实现。
依照Java相关代码,使用JNI接口调用Java层的MessageDigest等类的方法完成相关方法的调用,最后代码如下所示。


这是根据Java代码的流程使用JNI接口仿写了一遍。JNI接口代码的编写流程与Java的反射类似,通过FindClass()方法找到类,通过GetStaticMethodID()等方法获得方法的jmethodID,然后通过CallStaticObjectMethod()等系列方法来执行方法得到结果。