zoukankan      html  css  js  c++  java
  • Use logCat in android native

    Android NDK发布后,java+C的编程方式成为android上性能编程的首选。
    但在C中调试困难,因此能使用logcat成为必须的要求。
     
    关于在Native代码中使用logcat,网上有很多说法,大部分有所欠缺,有的根本是错的。
     
    要使用logcat,首先在代码中要引入 log的头文件。
    #include <android/log.h>
     
    然后你可以简单的通过
    __android_log_write(ANDROID_LOG_ERROR,"Tag","Message"); 方法向logcat输出。
    log 级别有很多  :
        ANDROID_LOG_UNKNOWN,
        ANDROID_LOG_DEFAULT,   
        ANDROID_LOG_VERBOSE,
        ANDROID_LOG_DEBUG,
        ANDROID_LOG_INFO,
        ANDROID_LOG_WARN,
        ANDROID_LOG_ERROR,
        ANDROID_LOG_FATAL,
        ANDROID_LOG_SILENT,
     
    这样写完以后,如果直接编译,就会报 __android_log_write 方法undefined.
    怎么回事呢?关键是在设置编译选项上面。
    在Android.mk文件里,可以指定一个LOCAL_LDLIBS的参数。如果不指定,那么编译的时候,只会引入默认的几个重要的lib,比如libc之类的。
    如果要用log,那就要把 liblog给引进来。
    网上很多的写法是 LOCAL_LDLIBS := -llog ,这在build static lib的时候没什么问题。如果是build shared lib,就会报个 cannot find -llog的错误。意思是找不到liblog.so这个库文件。
    因此需要改成 LOCAL_LDLIBS :=  -L$(SYSROOT)/usr/lib -llog 才可以正常编译。
    其中-L参数是指定了搜索lib的路径。
    下面是一个android.mk的内容的例子:
    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE    := TestNdkNetwork
    LOCAL_SRC_FILES := HttpConnection.cpp
    LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
    include $(BUILD_SHARED_LIBRARY)
     
    #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "hello-ndk", __VA_ARGS__))
  • 相关阅读:
    python -- 内存与垃圾回收源码分析
    机器学习:决策树
    leetcode -- 树操作
    树:基本树形
    树:遍历算法
    查找:字符串匹配算法 -- KMP
    Java 8 新特性
    Java学习书籍推荐
    Guava基本工具--Throwables:简化异常和错误的传播与检查
    Guava基本工具--排序: Guava强大的”流畅风格比较器”
  • 原文地址:https://www.cnblogs.com/qiengo/p/2563390.html
Copyright © 2011-2022 走看看