使用android_native_app_glue.c时,我可以从java调用本机代码吗
Can I call native code FROM java when using android_native_app_glue.c
我正在查看MoreTeapots示例:
https://github.com/googlesamples/android-ndk/tree/master/MoreTeapots
我发现使用android_native_app_glue.C从C++代码中调用Java方法很容易,方法是:
jclass clazz = jni->GetObjectClass(app_->activity->clazz);
jmethodID methodID = jni->GetMethodID(clazz, "updateCamera", "(FFF)V");
jni->CallVoidMethod(app_->activity->clazz, methodID, x, y, z);
然而,我能在那个样本中做相反的操作吗?
将一个函数声明为java代码,并调用本机代码。请注意,样品使用"胶水";因此,答案不只是这些步骤:
https://developer.android.com/ndk/samples/sample_hellojni.html
这是不同的。我没有看到从java到glue的钩子,只有从glue到java的钩子。我相信胶水是自己流出来的。
有线索吗?
thx!
您可以在本地代码中声明回调
JNIEXPORT void JNICALL Java_package_Activity_nativeCallback(JNIEnv* jenv, jobject obj);
然后从Java代码中,刚刚声明为本地
native void nativeCallback();
请记住,这是在主线程中执行的,您应该向后台线程发送一个命令进行处理。
致以最良好的问候。
这对"胶水"不起作用。如果你看看我提到的样品,那就不一样了。它使用胶水。所以我在java代码中添加了:
public native void nativeCallback();
然后转为本地:
extern "C" {
JNIEXPORT void JNICALL Java_com_sample_moreteapots_MoreTeapotsNativeActivity_nativeCallback(JNIEnv *env, jobject obj);
};
JNIEXPORT void JNICALL Java_com_sample_moreteapots_MoreTeapotsNativeActivity_nativeCallback(JNIEnv *env, jobject obj) {
int i = 0;
return;
}
它进行了编译和链接。但当我试图从Java调用该方法时,我得到了以下信息:
FATAL EXCEPTION: main
Process: com.sample.moreteapots, PID: 31733
java.lang.UnsatisfiedLinkError: No implementation found for void com.sample.moreteapots.MoreTeapotsNativeActivity.nativeCallback()
(tried Java_com_sample_moreteapots_MoreTeapotsNativeActivity_nativeCallback
and Java_com_sample_moreteapots_MoreTeapotsNativeActivity_nativeCallback__)
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我可以通过引用修改常量返回
- 我可以在 C++ 中的函数体之外进行操作吗?
- 我可以重新分配/覆盖std::字符串吗
- 我可以在Apache Ignite计算中混合使用C++和Java吗?
- 我可以创建一个JNI调用以提升从Java的C 光纤
- 我可以通过CPP程序中的数据库调用调用Java程序
- 在C++中,我可以像在Java中一样拥有一个接口变量吗
- 我可以在客户端使用 .cc 原型文件并在服务器端使用 .java proto 文件吗?
- 如何在 NDK 中修改 Android 位图,以便我可以在 Java 端使用它
- 是否有一个可下载的 eclipse 包,我可以将其用于 Java、c++ 和 JS
- C++抽象类的问题(我可以用Java做,但不能用C++!)
- 有人可以帮我用java翻译这行代码吗?
- 我可以得到C/ c++ /Java代码的XML AST而不编译它吗?
- 模板和泛型.为什么我可以在c++中做以下的事情,而不能在Java中做?我该如何克服呢?
- 使用android_native_app_glue.c时,我可以从java调用本机代码吗