Android中Log.d和Log.v如何实现在release版本不输出

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战 本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。 阅读详情

 Android 开发文档中说明Log.d和Log.v只有在开发版本中输出,在Release版本中无输出。那么这个功能是如何实现的呢?Android中Log.d和Log.v在Java和Native Code有不同的实现,需要分别说明。

1. native code中实现

    我们知道C/C++版本编译的时候会有release/debug 编译参数可以选择,所以在native code中可以根据不同的编译宏开关参数实现。

#ifndef LOGV
#if LOG_NDEBUG
#define LOGV(...)   ((void)0)
#else
#define
LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#endif
#endif

2. Java代码中实现

Java的编译器就没有C/C++编译宏参数的功能,所以只能通过最原始的方法,写两个不同实现文件,在Make File 中根据编译参数不同进行COPY源代码的动作。大家可以在frameworks/base/Android.mk中查找实现方法。

其实在Java代码中,如果使用直接使用Log.v的方式输入trace,那么无论是Debug版本还是Release版本都还是会有Log输出的。文档所讲的,在Release版本中Verbose是不输出,在Android原始代码中使用下面的方式实现。

 if (Config.LOGV) Log.v(TAG, "<<< Releasing cursor " + this);

Config.LOGV的最值是最终是根据ConfigBuildFlags.java文件,而ConfigBuildFlags.java是在Android.mk中进行控制的。

 

# Include a different set of source files when building a debug build.
# TODO: Maybe build these into a separate .jar and put it on the classpath
#       in front of framework.jar.
# NOTE: Do not use this as an example; this is a very special situation.
#       Do not modify LOCAL_SRC_FILES based on any variable other
#       than TARGET_BUILD_TYPE, otherwise builds can become inconsistent.
ifeq ($(TARGET_BUILD_TYPE),debug)
  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/debug)
else
  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/ndebug)
endif

 

即使在Android2.2之后有增加Slog.java这样的类,在实现Log.v的控制的时候也是采用了Config.LOGV来做判断条件。由于每次写输出Log的时候都需要加上这样的判断,还真是有点痛苦哦。是否可以将Log.java 和 Slog.java进行下面的优化。

 

  public static int v(String tag, String msg) {

       if (Config.LOGV)
        return Log.println_native(Log.LOG_ID_SYSTEM, Log.VERBOSE, tag, msg);

       else 

       return 0;
    }

    public static int v(String tag, String msg, Throwable tr) {

        if (Config.LOGV) 
        return Log.println_native(Log.LOG_ID_SYSTEM, Log.VERBOSE, tag,
                msg + '\n' + Log.getStackTraceString(tr));

      else

       return 0;
    }

 

 

Unity Shader实战:用Matcap给你的低模角色快速换上‘次世代’材质(附完整Shader代码) 本文详细介绍了Unity中Matcap技术的实战应用,通过Shader代码实现低模角色的次世代材质表现。Matcap技术利用预烘焙光照贴图,显著提升材质质感同时保持极低性能消耗,特别适合移动游戏和独立开发。文章包含完整Shader代码、平面模型着色优化方案及动态环境反射增强技巧,帮助开发者快速提升低模视觉效果。 阅读详情

相关推荐

AI 编程助手新玩法:用 Claude Code 一键调用国产大模型(DeepSeek/Kimi/GLM 对比)

本文深入评测了Claude Code与三大国产大模型(DeepSeek、Kimi、智谱GLM)的集成效果,详细对比了它们在代码生成质量、响应速度和特殊场景支持度等方面的差异。通过实测数据和实战技巧,帮助开发者选择最适合的AI编程助手组合,提升开发效率。

weixin_30955617的博客 487

android输出log,Android开发 Release情况下也能输出log

一般我们开发程序都是在debug模式下开发,打log很方便,什么log.v、log.d、log.i都热别好使,但是到了要发布时我们通常要打release版包,在release版下做测试也是必需的,为了更好的调试,我们需要主动开启输出log功能,默认情况release下为了安全是不输出log的。这要是在下面2个地方加上几行代码。AndroidManifest.xml里标签下增加这句话,默认是fals...

weixin_32687283的博客 2323

Vue项目实战:海康WebControl插件从安装到预览功能全流程(附RSA加密避坑指南)

本文详细介绍了在Vue项目中集成海康威视WebControl插件的全流程,从环境准备、插件部署到核心功能实现。重点解析了使用JS_RequestInterface获取RSA公钥并进行加密参数初始化的关键步骤与常见避坑指南,帮助开发者高效完成监控视频预览功能的开发与调试。

linux6sysadmin的博客 1227

Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性-[Android取经之路]

[Android取经之路] 的源码都基于Android-Q(10.0) 进行分析 [Android取经之路] 系列文章: 《系统启动篇》 Android系统架构 Android是怎么启动的 Android 10.0系统启动之init进程 Android10.0系统启动之Zygote进程 Android 10.0 系统启动之SystemServer进程 Android 10.0 系统服务之ActivityMnagerService Android10.0系统启动之Launcher(桌面)启动流程 And

纸上得来终觉浅,绝知此事要躬行 6215

金融级IT架构-数字银行的云原生架构解析

最近断断续续花了差不多2到3周的时间阅读完由电子工业出版社出版的《金融级IT架构:数字银行的云原生架构解密》的这本书,作者是作者是网商银行技术编委会。 本书契合了当前银行业分布式架构转型趋势,内容是经过实践检验的领先技术介绍了网商银行IT技术架构演进路线,涵盖了分布式、单元化、弹性混合云、云原生多个基础架构领域,同时介绍了技术风险、安全可信、业务架构等多方面的技术实践经验。 对于这本书实际很早搜索云原生相关书籍的时候就搜索到,但是一看标题是金融IT架构方面的因此没有引起太多的重视,后面由华章...

年少有为 4064

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 408

Androrid应用打包release版时关闭log日志输出

方法一:封装Log类 可以自己封装一个Log类,可以实现条件判断,也可以设置输出的log级别。 public class Logger { public static int LOG_LEVEL = 0; public static int ERROR = 1; public static int WARN = 2; public static int IN

zhizhuodewo6的博客 958

HITS算法详解及代码实现

占坑

蓁蓁尔的博客 7462

Android APP的Gradle详解(二)

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 34.2.1.List描述 List是有序的

听海的博客 963

[金仓数据库V8R6]更换授权

上传授权,使用mv license_xxx_0.dat /home/kingbase/KingbaseES/license.dat替换每个授权,并使用ls -l license.dat确保替换前后属主和权限不变。根据步骤1的数据目录位置,执行/home/kingbase/KingbaseES/Server/bin/sys_ctl -D /home/kingbase/KingbaseES/data reload使新的授权文件生效。该参数意义为授权剩余有效天数,查询结果为新授权中有效期间的天数即为替换成功。

l04050924的博客 3712

龙腾CMS downloadFile接口任意文件读取漏洞复现 [附POC]

大连网龙网络科技有限公司专注于在信息科技领域中向客户提供商业解决方案,是专业的互联网服务解决方案提供商和网络营销服务专家,为用户提供一体化的网络营销整体解决方案,龙腾CMS downloadFile接口存在任意文件读取漏洞。

薛定谔嘚喵博客 720

Android中Log机制

Android中Log机制写Log过程 首先从Java层入手 下面是定义的Log级别: public static final int VERBOSE = 2; public static final int DEBUG = 3; public static final int INFO = 4; public static final int WARN

我叫王菜鸟 3850

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3850

Android中Release版本去掉Log的方法

一、自定义BuildConfig字段 在gradle配置文件中,定义LOG字段,默认为true buildConfigField "boolean", "LOG", "true" 同步一下工程,查看app/build/generated/source/BuildConfig/Build Varients/package name/BuildConfig 文件。 可以看到自动添加了一个L...

欢迎关注微信公众号:DroidMind 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android log输出控制

1. java层java层打印log由类android.util.Log类实现,该类定义于文件:frameworks/base/core/java/android/util/Log.java (APP 框架层)对应的JNI层代码在文件:frameworks/base/core/j

zgolee的专栏 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

重写Android Log的输出,只在debug的时候输出,release 的版本不输出

package com.example.kodulf.utilsdemo.utils; import com.example.kodulf.utilsdemo.BuildConfig; /** * Created by Kodulf on 2017/5/13. */ public class Log { public static void v(String tag,Strin

Kodulf_007的博客 1531

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Android】在Release版本中如何关闭Debug版本中的log

之前在程序中有打了很多的log,当初打log的方式也没有统一,删掉肯定不行,统一修改也挺麻烦的。今天在stackoverflow上面看到有对这个的讨论 主要有以下三种方式关闭log信息http://stackoverflow.com/questions/2446248/deactivate-any-calls-to-log-before-publishing-are-there-tools-

YING 8008

android去掉log,Android中Release版本去掉Log的方法

一、自定义BuildConfig字段在gradle配置文件中,定义LOG字段,默认为truebuildConfigField "boolean", "LOG", "true"同步一下工程,查看app/build/generated/source/BuildConfig/Build Varients/package name/BuildConfig 文件。可以看到自动添加了一个LOG字段// Fie...

weixin_33036495的博客 971

终极指南:MPAndroidChart的Release版本配置——彻底关闭调试日志输出

MPAndroidChart是一款功能强大的Android图表库,支持折线图、柱状图、饼图等多种图表类型,以及缩放、平移和动画效果。在开发阶段,调试日志对于问题排查非常有帮助,但在发布版本中保留这些日志可能会影响性能并泄露敏感信息。本文将详细介绍如何在MPAndroidChart的Release版本中正确配置以关闭调试日志输出。 ## 为什么需要在Release版本关闭调试日志? 调试日志在开

gitblog_00399的博客 777

android去掉所有log日志,Android两步去掉Release版本Log日志

在APP项目的release配置中开启混淆配置,已经开启的就不用管了:buildTypes {debug {}release {// Enables code shrinking, obfuscation, and optimization for only// your project's release build type.minifyEnabled true// Enables resou...

weixin_29266749的博客 936

android封装log设置开关,Android编程:Android应用打包release版时关闭log日志输出

本文主要介绍了Android编程中的Android应用打包release版时关闭log日志输出,希望对大家学习Android编程有所帮助。方法一:封装Log类可以自己封装一个Log类,可以实现条件判断,也可以设置输出的log级别。publicclassLogger{publicstaticintLOG_LEVEL=0;publicstaticintERROR=1;publ...

weixin_39670545的博客 1032

Android:release版本删除所有debug code

尝试使用proguard来屏蔽,还是不能自动去掉debug code(Log.v/Log.d/....)的代码。 #-assumenosideeffects class android.util.Log { *; } 通过定义一个变量来切换: public final class Constants { public static final boolean DEBUG_

混迹于移动互联网和手机行业 2427

Log.d and Log.v for Android

http://blog.csdn.net/chb2000/article/details/6598361 Android 开发文档中说明Log.d和Log.v只有在开发版本中输出,在Release版本中无输出。那么这个功能是如何实现的呢?Android中Log.d和Log.v在Java和Native Code有不同的实现,需要分别说明。 1. native code中实现 ...

weixin_30617797的博客 95

android 混淆移除log,关于安卓代码混淆和Release版本中去除Debug信息

我也不知道今天哪门子的心思看到这方面去了,这其实也就是一些固定东西的使用。怎么说呢,因为有些坑以前忽略了,今天记起来的就干掉吧。以前优化apk的时候,网上查下来,基本上就是去掉无用的资源buildTypes {release {//Zipalign优化zipAlignEnabled true// 移除无用的resource文件shrinkResources true}}但是这样会提示一个错误:Er...

weixin_33784572的博客 900

Android输出Log优化

Android自定义Log,使输出的Log安全更有保障~

qq_16551423的专栏 647
上一篇: Android本地化简称对应表
下一篇: Android Java混淆(ProGuard)
小元宝
博客等级 码龄25年 25粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值