我希望将我的本机代码(在C中)的printf语句的输出打印到android屏幕上.由于我希望在Android屏幕上看到许多输出,我想要的东西比JNI函数末尾的返回语句更多,每个函数都打印一个文本.怎么去呢?
编辑:
例如,在我的C代码中,如果我希望在“Hello World”这样的函数中打印一些东西,我该怎么办?现在,我可以打印“只返回!”在Android屏幕上使用setText方法.
jstring Java_com_example_encryptString( JNIEnv* env, jobject thiz)
{
printf("Hello World");
return (*env)->NewStringUTF(env, "only from return!");
}
我知道一种方法,我从Java类调用此方法,并使用TextViews在Android屏幕上打印它.但是,这可以只打印和打印函数返回的值而不打印任何其他值.我不能打印该函数未返回的任何其他值吗?
谢谢.
注意:我不是在寻找logcat中的android日志.
解决方法:
如果我正确理解你的问题,你的意思是从c代码在TextView中设置文本,对吗?
如果是这样,你可以这样做.您需要将TextView作为参数传递给您的本机方法.然后在您的本机代码调用中找到它的setText方法并调用它.
您将本机方法更改为以下内容:
jstring Java_com_example_encryptString( JNIEnv* env, jobject thiz, jobject jtextViewObject, ...)
{
//getting set text method
jclass clazz = (*env)->FindClass(env, "android/widget/TextView");
jmethodID setText = (*env)->GetMethodID(env, clazz, "setText", "(Ljava/lang/CharSequence;)V");
... do stuff ...
//set text to text view
jstring jstr = (*env)->NewStringUTF(env, "This comes from jni.");
(*env)->CallVoidMethod(env, jtextViewObject, setText, jstr);
... do stuff ...
return (*env)->NewStringUTF(env, "only from return!");
}
您还需要在java代码中更改本机方法的签名,以在params中添加TextView.
标签:android,android-ndk
来源: https://codeday.me/bug/20190702/1357188.html