示例代码如下:
==============================================================================================static jobject g_obj,g_ctorID, g_mid = NULL;
static jclass g_cls, g_strclass = NULL;JNIEXPORT jstring JNICALL Java_com_test_HelloWorld_helloDisplay
(JNIEnv *env, jobject cls)
{
LOGD("-----1-----");
jclass strclass = (*env)->FindClass(env, "java/lang/String");
if(strclass == NULL){
LOGD("FindClass strClass error!\n");
return;
}
g_strclass =(*env)->NewGlobalRef(env, strclass);
LOGD("-----2-----");
jmethodID ctorID = (*env)->GetMethodID(env, strclass, "<init>", "([BLjava/lang/String;)V");
if(ctorID == NULL){
LOGD("FindClass ctorID error!\n");
return;
}
LOGD("-----3-----");
jmethodID mid = (*env)->GetMethodID(env,strclass,"getBytes","(Ljava/lang/String;)[B");
if(mid == NULL){
LOGD("GetMethodID mid error!\n");
return;
}
LOGD("-----4-----");
g_mid = (*env)->NewGlobalRef(env, mid);
LOGD("-----5-----");
g_ctorID = (*env)->NewGlobalRef(env, ctorID);
LOGD("-----6-----");
return (*env)->NewStringUTF(env, "Hello World!");
}
=============================================================================================当对一个方法 NewGlobalRef()全局化与勇士就报警告,log如下:------------------------------------------------------------------------------W/Hello ( 361): -----1-----
W/Hello ( 361): -----2-----
W/Hello ( 361): -----3-----
W/Hello ( 361): -----4-----
W/dalvikvm( 361): JNI WARNING: 0x5692c750 is not a valid JNI reference
W/dalvikvm( 361): in Lcom/test/HelloWorld;.helloDisplay:()Ljava/lang/String; (NewGlobalRef)
I/dalvikvm( 361): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm( 361): | group="main" sCount=0 dsCount=0 obj=0x409dc460 self=0x12800
I/dalvikvm( 361): | sysTid=361 nice=0 sched=0/0 cgrp=default handle=1074082952
I/dalvikvm( 361): | schedstat=( 223000000 335000000 88 ) utm=15 stm=7 core=0
I/dalvikvm( 361): at com.test.HelloWorld.helloDisplay(Native Method)
I/dalvikvm( 361): at com.test.HelloWorld.onCreate(HelloWorld.java:19)
I/dalvikvm( 361): at android.app.Activity.performCreate(Activity.java:4465)
I/dalvikvm( 361): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
I/dalvikvm( 361): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
I/dalvikvm( 361): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
I/dalvikvm( 361): at android.app.ActivityThread.access$600(ActivityThread.java:123)
I/dalvikvm( 361): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
I/dalvikvm( 361): at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm( 361): at android.os.Looper.loop(Looper.java:137)
I/dalvikvm( 361): at android.app.ActivityThread.main(ActivityThread.java:4429)
I/dalvikvm( 361): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm( 361): at java.lang.reflect.Method.invoke(Method.java:511)
I/dalvikvm( 361): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
I/dalvikvm( 361): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
I/dalvikvm( 361): at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm( 361):
E/dalvikvm( 361): VM aborting
F/libc ( 361): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
分不多,真心向各位大侠求教。是不是在 NewGlobalRef()对一个方法全局化引用处理方式不正确还是其他原因?(这种引用方式在hisi的平台上运行是OK,但是在amlogic平台和模拟器上运行上不通过)
==============================================================================================static jobject g_obj,g_ctorID, g_mid = NULL;
static jclass g_cls, g_strclass = NULL;JNIEXPORT jstring JNICALL Java_com_test_HelloWorld_helloDisplay
(JNIEnv *env, jobject cls)
{
LOGD("-----1-----");
jclass strclass = (*env)->FindClass(env, "java/lang/String");
if(strclass == NULL){
LOGD("FindClass strClass error!\n");
return;
}
g_strclass =(*env)->NewGlobalRef(env, strclass);
LOGD("-----2-----");
jmethodID ctorID = (*env)->GetMethodID(env, strclass, "<init>", "([BLjava/lang/String;)V");
if(ctorID == NULL){
LOGD("FindClass ctorID error!\n");
return;
}
LOGD("-----3-----");
jmethodID mid = (*env)->GetMethodID(env,strclass,"getBytes","(Ljava/lang/String;)[B");
if(mid == NULL){
LOGD("GetMethodID mid error!\n");
return;
}
LOGD("-----4-----");
g_mid = (*env)->NewGlobalRef(env, mid);
LOGD("-----5-----");
g_ctorID = (*env)->NewGlobalRef(env, ctorID);
LOGD("-----6-----");
return (*env)->NewStringUTF(env, "Hello World!");
}
=============================================================================================当对一个方法 NewGlobalRef()全局化与勇士就报警告,log如下:------------------------------------------------------------------------------W/Hello ( 361): -----1-----
W/Hello ( 361): -----2-----
W/Hello ( 361): -----3-----
W/Hello ( 361): -----4-----
W/dalvikvm( 361): JNI WARNING: 0x5692c750 is not a valid JNI reference
W/dalvikvm( 361): in Lcom/test/HelloWorld;.helloDisplay:()Ljava/lang/String; (NewGlobalRef)
I/dalvikvm( 361): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm( 361): | group="main" sCount=0 dsCount=0 obj=0x409dc460 self=0x12800
I/dalvikvm( 361): | sysTid=361 nice=0 sched=0/0 cgrp=default handle=1074082952
I/dalvikvm( 361): | schedstat=( 223000000 335000000 88 ) utm=15 stm=7 core=0
I/dalvikvm( 361): at com.test.HelloWorld.helloDisplay(Native Method)
I/dalvikvm( 361): at com.test.HelloWorld.onCreate(HelloWorld.java:19)
I/dalvikvm( 361): at android.app.Activity.performCreate(Activity.java:4465)
I/dalvikvm( 361): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
I/dalvikvm( 361): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
I/dalvikvm( 361): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
I/dalvikvm( 361): at android.app.ActivityThread.access$600(ActivityThread.java:123)
I/dalvikvm( 361): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
I/dalvikvm( 361): at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm( 361): at android.os.Looper.loop(Looper.java:137)
I/dalvikvm( 361): at android.app.ActivityThread.main(ActivityThread.java:4429)
I/dalvikvm( 361): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm( 361): at java.lang.reflect.Method.invoke(Method.java:511)
I/dalvikvm( 361): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
I/dalvikvm( 361): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
I/dalvikvm( 361): at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm( 361):
E/dalvikvm( 361): VM aborting
F/libc ( 361): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
分不多,真心向各位大侠求教。是不是在 NewGlobalRef()对一个方法全局化引用处理方式不正确还是其他原因?(这种引用方式在hisi的平台上运行是OK,但是在amlogic平台和模拟器上运行上不通过)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货