PS:实际上,这是有效的,我有另一个问题,我很快就会更新这个问题。
我有以下本机代码:
JNIEXPORT void JNICALL Java_com_rmsdk_wrapper_RMServices_init(JNIEnv *env, jobject thiso,
jstring prodName, jstring version) {
jclass thisClass = env->GetObjectClass(thiso);
__android_log_print(ANDROID_LOG_DEBUG, "APP", "[findMethodId]");
jmethodID getDeviceName = env->GetMethodID(thisClass, "getDeviceName", "()Ljava/lang/String;");
__android_log_print(ANDROID_LOG_DEBUG, "APP", "[invoke]");
jstring dvcName = (jstring) env->CallObjectMethod(thiso, getDeviceName);
__android_log_print(ANDROID_LOG_DEBUG, "APP", "[strings retrivied]");
以及Java类中的相应方法
public String getDeviceName() {
String deviceName = Build.MODEL;
LogU.v("APPServices", "getDeviceName("+deviceName+")");
return deviceName;
}
但当运行以下内容时:
D/RMSDK:DRM(3717): [findMethodId]
D/RMSDK:DRM(3717): [invoke]
I/DEBUG(27674): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG(27674): Build fingerprint: 'MOTO/PORTLA/wifi_hubble:3.2/H.6.6-27/1317781165:user/ota-rel-keys,release-keys'
I/DEBUG(27674): pid: 3717, tid: 3717 >>> br.com.abril.iba <<<
I/DEBUG(27674): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG(27674): r0 00000000 r1 40c33038 r2 5651b1ec r3 be86444c
I/DEBUG(27674): r4 0000008c r5 8282a018 r6 82805e28 r7 826f0a68
方法正在被找到,但它们在调用时崩溃(任何方法都会崩溃),我该如何修复?我不知道为什么它不起作用。
PS:同样的错误发生在Android NDK5&NDK7B
您的代码在我的HTC Desire Z上运行良好,我使用android-ndk-r7b编译了本机部分。您确定在执行init(String s1, String s2);
的同一类中有方法getDeviceName()
吗?我使用了以下java代码:
public class HelloJni extends Activity {
public native void init(String s1, String s2);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init("","");
}
static {
System.loadLibrary("hello-jni");
}
public String getDeviceName() {
String deviceName = Build.MODEL;
Log.v("APPServices", "getDeviceName("+deviceName+")");
return deviceName;
}
}