You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android NDK编译的C语言ELF二进制文件如何通过API输出日志到Logcat?

Android NDK编译的C语言ELF文件输出日志到Logcat的方法

当然有对应的API可以实现,Android NDK原生提供了专门用于输出日志到Logcat的函数集,核心是__android_log_print系列函数,具体用法如下:

  • 所需头文件与库依赖
    首先需要引入头文件 <android/log.h>,并且在编译时链接NDK的log库,否则会出现未定义符号错误。

  • 常用日志函数示例
    通常会定义宏来简化日志调用,按日志级别封装更方便:

    #include <android/log.h>
    
    // 自定义日志标签,方便在Logcat中过滤
    #define LOG_TAG "NativeModule"
    // Debug级别日志宏
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
    // Error级别日志宏
    #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
    // Info级别日志宏
    #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
    
    void native_function() {
        // 输出带参数的Debug日志
        LOGD("用户ID:%d,用户名:%s", 1001, "test_user");
        // 输出Error日志
        LOGE("文件读取失败,路径:%s", "/data/local/tmp/test.txt");
        // 输出Info日志
        LOGI("原生模块初始化完成");
    }
    
  • 编译时链接log库

    • 若使用Android.mk构建,需添加:
      LOCAL_LDLIBS += -llog
      
    • 若使用CMakeLists.txt构建,需在目标链接时添加log库:
      target_link_libraries(your-native-library-name log)
      
  • 其他日志函数
    除了__android_log_print,还有更基础的__android_log_write函数,直接指定日志级别、标签和内容:

    #include <android/log.h>
    
    void simple_log() {
        __android_log_write(ANDROID_LOG_WARN, "NativeModule", "这是一条警告日志");
    }
    

注意:如果是已经编译完成的ELF二进制文件,若编译时未链接log库且未调用上述日志函数,无法直接通过修改ELF文件添加日志能力,需要重新编译代码时引入上述逻辑并链接log库。

内容的提问来源于stack exchange,提问作者August Vrubel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:56:50