android 自动打印出来,Android:签名打包后关闭Log打印
楔子
log在发布版本中打印会出现极大的安全问题,但在debug版本中确是不可缺少的。
需求
自动判断当前版本类型,选择是否输出log
实现
查阅了stormzhang的文章,提出使用BuildConfig.DEBUG和自定义BuildConfig字段,网上还有第三种方法通过 ProGuard 优化掉 Log 代码
stormzhang的文章地址
一.BuildConfig.DEBUG
首先在Gradle脚本中默认的debug和release两种模式BuildCondig.DEBUG字段分别为true和false,而且不可更改。该字段编译后自动生成,在Studio中生成的目录在 app/build/source/BuildConfig/Build Varients/package name/BuildConfig 文件下。
if (BuildConfig.DEBUG) {
Logger.d(Xml);
}
需要注意的事,并不是通过条件判断去除的log。而是通过编译器优化的原理,因为BuildConfig.DEBUG是一个常量,所以这整段代码都会在编译时删除。
二.自定义BuildConfig字段
三.通过 ProGuard 优化掉 Log 代码
四.一个可能遇到的问题
可以看到stormzhang的文章下有个被顶起来的问题没有得到解答。小僧不才,斗胆一试。
问题出现原因
大的项目一般不会只有一个主模块,会抽取出一些公用类和方法放在子模块,主模块依赖子模块。而BuildConfig是根据模块来生成的,每个模块都有一个。
那么他们的BuildConfig.DEBUG就毫无相关性了。也失去了这段代码的意义。
解决问题
主模块由于依赖可以直接使用子模块的方法和属性。但是子模块想得到主模块的变量就要依靠java的神器,反射。
//主模块方法
public static boolean isDebug(){
return BuildConfig.DEBUG;
}
//子模块通过反射调用主模块的debug属性
public static boolean getGotobusIsDebug() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
return (boolean) Class.forName(classGotobusConfig).getMethod("isDebug").invoke(null);
}
参考
android 自动打印出来,Android:签名打包后关闭Log打印相关推荐
- android 自动 键盘,关于Android中的软键盘
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系 ...
- android自动创建快捷方式,Android开发之生成桌面快捷方式细则(原创)
本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 申明,标题里的快捷方式不是指开发人员使用频率极高的Ctrl+C和Ctrl+V:也不是IDE里Ctrl+D.Ctrl+F等常用快捷键.这 ...
- android自动夜间模式,Android实现日夜间模式的深入理解
在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...
- Android 自动搜索频道,Android自定义收音机搜台控件RadioRulerView
前言:像这类的自定义控件有非常多的开源项目,但还是没有找到我项目想要的,所以简单实现了一个,下面简单讲讲实现原理. 效果图: 实现思路: 首先画固定背景尺子,而实现这个则要计算刻度线的宽度.刻度线间的 ...
- android自动添加包,android nfc写入应用程序包名与网址 自动打开应用程序与网址...
安卓手机大部分手机提供了NFC芯片 可以根据NFC传递数据 NFC卡与手机 手机与手机数据等交互 非常好的功能,这篇文章教大家如何向NFC卡或标签写入功能. 用法 : 点击包名 将N ...
- Android自动伸展动画,android – 如何实现平滑的展开/折叠动画
我指的是在这里找到的扩展/折叠动画代码. 虽然这样做不好,动画不顺利. 我做一些登录代码. public static void expand(final View v) { v.measure(Me ...
- android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...
本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...
- android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...
- android 自动挂断,android实现接通和挂断电话
本文实例为大家分享了android实现接通和挂断电话的具体代码,供大家参考,具体内容如下 关键代码:[PhoneUtils类] package com.ebupt.phonerecorddemo.se ...
最新文章
- 统一异常处理+错误编码设计方案
- 扎克伯格“气哭”了:Meta搞元宇宙巨亏,股价暴跌市值蒸发2000多亿美元
- VScode操作记录
- JS类的封装及实现代码
- java高并发(八)不可变对象
- 重构javascript_JavaScript代码清理:如何重构以使用类
- Flask 中的数据库迁移
- 触发器 创建 删除 等操作
- [转载] Python快速编程入门课后程序题答案
- php模板和框架,php模板和框架的区别的区别是什么
- 在你公司Code Review是一种形式,还是一种开发文化?
- 20道常见的kafka面试题以及答案
- 微信小程序地图和百度地图定位位置不一样
- kali linux暴力破解wifi密码
- ios睡眠分析 卧床 睡眠_使用Swift在HealthKit中进行睡眠分析
- Redis分布式锁真的安全吗?
- 优动漫PAINT的变形文字工具教程
- html 播放amr ios,关于iOS设备以amr格式播放音频文件
- 第三方框架Masonry的基本使用
- 扫码签到突破100000用户
热门文章
- JDBC连接数据库的步骤
- PHP中ob系列函数讲解(浏览器缓存技术)
- 浅析希区柯克的悬念电影:以《惊魂记》为例
- 所有C#程序员必须知道的13件事
- 沙发家具网站源码_小户型装修不会选家具?大湾网推荐你了解这些装修风格家具,装修省心空间大!...
- spark java 案例_Spark入门案例
- python星号什么意思_Python星号*与**用法分析
- Python+OpenCV:二维直方图(2D Histograms)
- TensorFlow:曼德布洛特(Mandelbrot)集合
- 机器视觉基本设计因素有哪几点?