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

Android NDK __android_log_print在自定义线程内无法输出日志问题

问题排查与解决办法
  • Logcat线程过滤限制
    Android Studio默认Logcat过滤器仅展示当前应用主线程/渲染线程的日志,你自行创建的逻辑线程日志会被默认隐藏。
    排查方式:将Logcat过滤器切换为No Filters,或在自定义过滤器中仅绑定你的日志TAG、不限制线程,即可看到子线程输出的日志。
  • 厂商系统日志拦截
    小米、华为等国产ROM默认会拦截优先级低于INFO的Debug/Verbose级别日志,如果你__android_log_print使用的优先级是ANDROID_LOG_DEBUG或ANDROID_LOG_VERBOSE,可能出现子线程日志被随机拦截的情况。
    解决方式:将日志优先级调整为ANDROID_LOG_INFO及以上,或在设备开发者选项中开启允许Debug日志输出的开关。
  • 子线程JNI绑定异常(可选排查)
    若你的Native日志逻辑存在间接通过JNI调用Java层日志接口的操作,自定义线程需要先绑定JVM才能正常调用JNI接口。你可以在逻辑线程Native执行逻辑前补充JNI绑定逻辑:
Engine.logicThread = new Thread(new Runnable() {
    @Override
    public void run() {
        // 若Native层需要JNI操作,先绑定JVM,可在Native层内部实现Attach逻辑
        while(Engine.isRunning) {
            Engine.NativeUpdate();
            try{ Thread.sleep(16); }
            catch(InterruptedException e) { e.printStackTrace();}
        }
    }
});

注:原生__android_log_print本身是线程安全的,不需要额外适配多线程环境,你确认无线程局部存储的情况下,90%以上的概率是前两个配置问题导致的日志不显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:03:00