zoukankan      html  css  js  c++  java
  • NDK编程中如何在C文件中打印调试信息

    1,在Android.mk文件中加上

    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE  :=ndkdemo
    LOCAL_SRC_FILES :=com_app_test_nativeMethod.c
    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
    include $(BUILD_SHARED_LIBRARY)

    2,在要实现的.c文件中引入头文件

    #include <string.h>
    #include <jni.h>
    #include <android/log.h>
    #include <stdio.h>

    3,在需要输出调试信息的地方

     __android_log_write(ANDROID_LOG_DEBUG,"tt","come in jin!!");

    注意前面是两个下划线

    4,下面直接上代码

    #include <string.h>
     #include <stdio.h>
     #include <stdlib.h>
     #include <unistd.h>
     #include <sys/ioctl.h>
     #include <sys/types.h>
     #include <sys/stat.h>
     #include <fcntl.h>


     #include <jni.h>
     #include <android/log.h>

    //在logCat中加上  日志输出标记  native-activity
     #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
     #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))




     /**********传输整数*************


     */
     JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIInt( JNIEnv* env, jobject obj , jint i)
     {
         //找到java中的类
         jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
         //再找类中的方法
         jmethodID mid = (*env)->GetMethodID(env, cls, "callbackInt", "(I)V");
         if (mid == NULL)
         {
             LOGI("int error");
             return;
         }


         //回调java中的方法
         int k=0;
         for(k;k<10;k++){
        (*env)->CallVoidMethod(env, obj, mid ,k);
         }
     }


     /********传输字符串*************
     */
     JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIString( JNIEnv* env, jobject obj , jstring s)
     {
         //找到java中的类
         jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
         //再找类中的方法
         jmethodID mid = (*env)->GetMethodID(env, cls, "callbackString", "(Ljava/lang/String;)V");
         if (mid == NULL)
         {
             LOGI("string error");
             return;
         }
         const char *ch;
         //获取由java传过来的字符串
         ch = (*env)->GetStringUTFChars(env, s, NULL);
         //打印
         LOGI("from java string: %s",ch);
         (*env)->ReleaseStringUTFChars(env, s, ch);
         //回调java中的方法
         (*env)->CallVoidMethod(env, obj, mid ,(*env)->NewStringUTF(env,"你好haha"));


     }


     /********传输数组(byte[])*************
     */
     JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIByte( JNIEnv* env, jobject obj , jbyteArray b)
     {
         //找到java中的类
         jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
         //再找类中的方法
         jmethodID mid = (*env)->GetMethodID(env, cls, "callbackByte", "([B)V");
         if (mid == NULL)
         {
             LOGI("byte[] error");
             return;
         }


         //获取数组长度
         jsize length = (*env)->GetArrayLength(env,b);
         LOGI("length: %d",length);
         //获取接收到的数据
         int i;
         jbyte* p = (*env)->GetByteArrayElements(env,b,NULL);
         //打印
         for(i=0;i<length;i++)
         {
             LOGI("%d",p[i]);
         }


         char c[5];
         c[0] = 1;c[1] = 2;c[2] = 3;c[3] = 4;c[4] = 5;
         //构造数组
         jbyteArray carr = (*env)->NewByteArray(env,length);
         (*env)->SetByteArrayRegion(env,carr,0,length,c);
         //回调java中的方法
         (*env)->CallVoidMethod(env, obj, mid ,carr);
     }

  • 相关阅读:
    递归删除指定目录下的 .git 文件
    mina 字节数组编解码器的写法 I
    爬取大众点评
    使用Scrapy抓取数据
    Redis:默认配置文件redis.conf详解
    Redis:五种数据类型的简单增删改查
    使用python-docx生成Word文档
    IT部门域事件与业务分析
    因为说比做容易,所以要少说慎说
    主要问题
  • 原文地址:https://www.cnblogs.com/maydow/p/4676201.html
Copyright © 2011-2022 走看看