我在博客上发表一些我的NDK学习心得,希望对大家能有帮助。
这一篇我们讲述如何在so中调用java层的函数
介绍
首先,之前写的文章中通过一个简单的例子来使用了一下NDK,编写了调用so中方法,返回一个字符串的功能,该方法是从Java层调用Native方法。
下面,我们要介绍的是如何从Native中调用Java方法。
问题
废话不多说,直接开始。
首先,Java方法简单可以分为两种,静态方法和非静态方法。
先给一个Java类,其中包含上述两种方法
public class MyJni {
...
private static void getvalue1(int value) {
Log.d("123", "" + value);
}
private void getvalue2(int value) {
Log.d("123", "" + value);
}
}
需要实现从 静态&非静态 Native方法中调用上述两个方法。
实践
在jni.h中定义了Call***Method()函数,通过这些函数,我们可以从Native中调用Java函数。
// 静态函数
jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
jobject (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
jobject (*CallStatic