android - 如何从 NDK 中的 native 代码打印到 android 屏幕上?

标签 android android-ndk

我希望将 native 代码(C)中的 printf 语句的输出打印到 android 屏幕上。因为我有许多我希望在 android 屏幕上看到的输出,所以我想要的不仅仅是 JNI 函数末尾的 return 语句,它为每个函数打印一个文本。怎么办?

编辑:

例如,在我的 C 代码中,如果我想在函数中间打印一些内容,如“Hello World”,我应该怎么做?现在,我可以使用 setText 方法在 android 屏幕上打印“only from return!”。

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 作为参数传递给您的 native 方法。然后在您的 native 代码调用中找到它的 setText 方法并调用它。

您可以阅读更多关于此 thread on SO 的信息或者这个 page .

您将把您的原生方法更改为如下所示:

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 代码中 native 方法的签名,以在参数中添加 TextView

关于android - 如何从 NDK 中的 native 代码打印到 android 屏幕上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606822/

相关文章:

android - 在设备上调试 Android 应用程序

android - 如何使用自定义适配器设置 ListView ?自定义适配器如何在下面给出的代码中工作?

android - IndexNotReadyException - Android Studio

安卓 ndk-r8 "error trying to exec ' cc1plus' : execvp: No such file or directory"

android - 我可以在不属于那些选项卡的情况下在 TabHost 下进行 Activity 吗

javascript - Google Maps Android Studio - 如何禁用 map 控件?

Android网络共享,如何禁用dhcp

c++ - stringstream << 运算符在循环中消耗大量内存

android - 将 jlong​​ 转换为 long 是否安全?

Android 应用程序无法加载 native 库