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__))
  • 相关阅读:
    zbb20181205 springboot_aop
    zbb20181204 GIT RM -R --CACHED 去掉已经托管在GIT上的文件
    zbb20181129 eclipse查看jar乱码问题
    反编译
    zbb20181116 验证 map list 是否存在空 null 字段信息
    zbb20181109 git 服务器上的 Git
    zbb20181023 idea,IntelliJ中的main函数和System.out.println()快捷键
    zbb20181023 idea,IntelliJ IDEA 2017.3-2018.1 全系列汉化包
    struts2拦截器(四)
    struts2OGNL表达式(三)
  • 原文地址:https://www.cnblogs.com/qiengo/p/2563390.html
Copyright © 2011-2022 走看看