2023-01-20 338
我试图调用我的Android代码中C中实现的函数.代码流是这样的:
在我的主要活动的ongreate()中,我有:
TestClass tc = new TestClass();
tc.act();
这是TestClass:
package bar.foo;
public class TestClass {
static {
System.loadLibrary("testclass");
}
public native void doStuff1(String s);
public native void doStuff2(String s1, String s2);
TestClass() { }
public void act() {
doStuff1 ("Foo");
doStuff2 ("Bar", "Baz");
}
}
和testClass.c是:
#include <stdio.h>
#include <string.h>
#include <jni.h>
#include <android/log.h>
#define alprint __android_log_print
#define METHOD_SIGNATURE_1 Java_bar_foo_TestClass_doStuff1
#define METHOD_SIGNATURE_2 Java_bar_foo_TestClass_doStuff2
void METHOD_SIGNATURE_1(JNIEnv* env, jstring s) {
const char *ns;
int jsLen;
/* Extract strings */
ns = (*env)->GetStringUTFChars(env, s, NULL);
jsLen = (*env)->GetStringUTFLength(env, s);
alprint(6, "doStuff1", "Text = %s [%d]\n", ns, jsLen);
(*env)->ReleaseStringUTFChars(env, s, ns);
return;
}
void METHOD_SIGNATURE_2(JNIEnv* env, jstring s1, jstring s2) {
const char *ns1;
const char *ns2;
int js1Len;
int js2Len;
/* Extract strings */
ns1 = (*env)->GetStringUTFChars(env, s1, NULL);
js1Len = (*env)->GetStringUTFLength(env, s1);
ns2 = (*env)->GetStringUTFChars(env, s2, NULL);
js2Len = (*env)->GetStringUTFLength(env, s2);
alprint(6, "doStuff2", "Text(1) = %s [%d]\n", ns1, js1Len);
alprint(6, "doStuff2", "Text(2) = %s [%d]\n", ns2, js2Len);
(*env)->ReleaseStringUTFChars(env, s1, ns1);
(*env)->ReleaseStringUTFChars(env, s2, ns2);
return;
}
这可以很好地编译,并在我的Android设备上启动(一个Nexus 5运行Android 5.1),但在启动时崩溃了:
JNI DETECTED ERROR IN APPLICATION: jstring has wrong type: bar.foo.TestClass
完整的崩溃转储在这里: http://pastebin.com/c0m98uzb
自昨天晚上以来,我就一直在脑子里摔倒了.有人知道这是什么吗?
JNI函数中的第二个参数是对Java对象的引用本机方法被调用(或静态函数的类).因此,您只需要在函数声明中添加thiz参数:
void METHOD_SIGNATURE_1(JNIEnv* env, jobject thiz, jstring s)
void METHOD_SIGNATURE_2(JNIEnv* env, jobject thiz, jstring s1, jstring s2)
以上所述是小编给大家介绍的当调用一个字符串参数时,JNI崩溃,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25959.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态