zoukankan      html  css  js  c++  java
  • android studio 中jni底层日志的打印

    1 添加ndk对log支持
    若需要添加ndk对log的支持,只需要通过以下2步即可实现。


    1.1 修改Android.mk
    如生成的库文件是“.so文件”,则在Android.mk中添加如下内容:
    LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib -llog
    如生成的库文件是“.a文件”,则在Android.mk中添加如下内容:
    LOCAL_LDLIBS:=-llog

    1.2 在.c或.cpp文件中引用log头文件
    添加如下内容:
    // 引入log头文件
    #include  <android/log.h>
    // log标签
    #define  TAG    "这里填写日志的TAG"
    // 定义info信息
    #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__)
    // 定义debug信息
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
    // 定义error信息
    #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)

    ANDROID_LOG_INFO:是日志级别;
    TAG:是要过滤的标签,可以在LogCat视图中过滤。
    __VA_ARGS__:是实际的日志内容。
    完成上面2步之后,我们就可以在.c/cpp文件中添加LOGI、LOGD、LOGE去打印信息!使用LOGI、LOGD、LOGE的方法和使用printf一样

    1.3日志类型
    1)Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v(,);
    2)Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择
    3)Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
    4)Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
    5)Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

    如:

    LOGI("user info----name:%s, age:%d, sex:%s.", "xxx", 18, "男");

    执行上句代码可以再logcat中打印出相应日志。

    注意:log打印的方法中不能传入jstring,必须将jstring转为c中的字符数组在传入到方法里面打印,否则会报错。

    特别需要强调的是在android studio 通过上层配置之后,运行的时候会报错:

    提示

    如何解决了,在app的gradle配置文件中设置:

    ldLibs "log"
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "23.0.3"
        defaultConfig {
            applicationId "im.weiyuan.com.jni"
            minSdkVersion 16
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            ndk{
                moduleName "hello"  //设置库(so)文件名称
                abiFilters "armeabi", "armeabi-v7a", "x86"
                ldLibs "log"
            }
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
    
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.2.0'
        testCompile 'junit:junit:4.12'
    }
  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7065213.html
Copyright © 2011-2022 走看看