los*_*110 5 java-native-interface android android-ndk
我有一个纯本机应用程序,因为我使用android_native_app_glue,因此我应用程序的入口是
android_main(..)
Run Code Online (Sandbox Code Playgroud)
我也有一个Java helper类型类:
package abc.def.ghi
public class MyJavaClass extends Activity
{
public void callback()
{
Log.v(TAG, "In MyJavaClass");
}
}
Run Code Online (Sandbox Code Playgroud)
我想从本地调用“回调”方法。我这样做是:
jclass myClass = env->FindClass("abc/def/ghi/MyJavaClass");
if( myClass == NULL )
LOGI("myClass null");
jmethodID mid = m_pEnv->GetMethodID(myClass, "callback", "()V");
if( mid == NULL )
LOGI("MID null");
m_pEnv->CallVoidMethod(myClass, mid);
Run Code Online (Sandbox Code Playgroud)
但是,这导致一条消息,提示myClass为null。我的“ env”指针应该可以,因为当我在FindClass中传递“ android / os / build”时,它找到了,但是找不到我的自定义类。
在LOGCAT中,我看到:“ JNI警告:无法调用Labc / def / ghi;对Ljava / Lang / Class的实例进行回调;”
我认为这意味着我的CallVoidMethod的第一个参数有问题。我在其他示例中注意到,大多数人使用javah生成的签名在函数内执行CallVoidMethod,并且他们obj在其参数中使用参数CallVoidMethod:
JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s)
Run Code Online (Sandbox Code Playgroud)
但是我不能使用它,因为我的应用程序的入口点是本地的。
然而,这会导致一条消息:myClass 为空。我的“env”指针应该没问题,因为当我在 FindClass 中传递“android/os/build”时,它会找到它,但找不到我的自定义类。
这表明您的自定义类不在类路径上。
请注意,当您创建虚拟机时,您可以传递选项,包括设置类路径以包含当前目录(或您喜欢的任何位置)。
| 归档时间: |
|
| 查看次数: |
4394 次 |
| 最近记录: |