Gradle构建控制Log开关——BuildConfig\自定义

2023-11-09 18:59

本文主要是介绍Gradle构建控制Log开关——BuildConfig\自定义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/50553945 文章出自:薛瑄的博客

你也可以查看我的其他同类文章,也会让你有一定的收货!

关于使用Gradle来控制版本和生成不同版本的代码,我总结了三篇文章,网上关于这些知识,都比较零散,我在学习这些的之前,根本不知道还有这样的方法。所以说不知道并不可怕,可怕的是不知道自己不知道。相信这三篇文章,会给你不少灵感

Gradle构建控制Log开关——BuildConfig\自定义

使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中 < meta-data>变量的值

Gradle编译生成不同的版本,动态设定应用标题 / 应用图标 / 替换常量

在Android开发中,很多时候我们会自己封装一个Log类,里面设置一个开关,

  • 在开发的时候将所有级别的Log全部打开输出。
  • 在发布应用前,把Log.i和Log.d这类级别的Log关闭,仅留下Log.e类型的输出。

这样做是为了防止别人通过log来研究我们的代码,同时也可以把一些不必要给别人看的信息过滤掉。

方案1:通过BuildConfig类来关闭

当你使用Android Gradle插件打包,执行默认的build任务时,会在build/intermediates/classes/release中自动生成一个BuildConfig.class


有class就应该有java源代码文件啊,那么这个class文件对应的java文件在哪里呢?

答案是app/build/generated/source/buildConfig/下。

关于这个生成的类文件,我们可以通过在build.gradle脚本中的buildTypes闭包中指定参数,使得这个类生成出来的时候包含一个我们自定义的boolean类型的静态常量ENABLE_DEBUG,直接上代码:

buildTypes {release {// 不显示logbuildConfigField "boolean", "ENABLE_DEBUG", "false"...}debug {// 显示LogbuildConfigField "boolean", "ENABLE_DEBUG", "true"...}}

按照上面的脚本编写之后,

  • 生成的release版BuildConfig类中就会多出一个常量,即
 public static final boolean ENABLE_DEBUG = false;;
  • 而debug版的BuildConfig类中的常量值则为true,即
public static final boolean ENABLE_DEBUG = true;。

你可以分别在源代码中调用这两个常量,最后这两个类分别也会被打包到release和debug版各自的apk文件当中。

当你修改build.gradle脚本以后,按照Android Studio的提示,点击Gradle Sync,就可以在之前我们自定义的UncleNought测试类中调用BuildConfig类中常量,可以看到ENABLE_DEBUG这个类已经自动生成出来了。下面是一段调用的示例:

package com.nought.hellolib;import android.util.Log;public class UncleNought {public static void Output() {if (BuildConfig.ENABLE_DEBUG) {Log.i(UncleNought.class.getSimpleName(), "I'm a library!");}}
}

方案2:自定义Log开关

假设我们不想把BuildConfig打包进来,只想在自己的类中定义一个常量,然后在release的时候修改这个动态去常量,应该怎么做呢?这个时候就可以利用gradle强大的能力了,话不多说,一步步看代码。

首先在测试类的代码里添加一个常量ENABLE_DEBUG

package com.nought.hellolib;import android.util.Log;public class UncleNought {public static boolean ENABLE_DEBUG = true;public static void Output() {if (ENABLE_DEBUG) {Log.i(UncleNought.class.getSimpleName(), "I'm a library!");}}
}

然后修改build.gradle文件,添加:

def enableLoggerDebug(boolean flag) {def loggerFilePath = "src/main/java/com/qq/e/comm/util/GDTLogger.java"def updatedDebug = new File(loggerFilePath).getText('UTF-8').replaceAll("DEBUG_ENABLE\\s?=\\s?" + (!flag).toString(), "DEBUG_ENABLE = " + flag.toString())new File(loggerFilePath).write(updatedDebug, 'UTF-8')println(flag ? 'GDTLogger.DEBUG_ENABLE : [true]' : 'GDTLogger.DEBUG_ENABLE : [false]')
}preBuild {}.doFirst {if (('jarMyLib' in gradle.startParameter.taskNames)) {enableLoggerDebug(false)}
}jarMyLib {}.doLast {enableLoggerDebug(true)
}

前面我提过,Gradle兼容Java的语法,所以我就想到,可以用正则表达式替换掉原来代码中的true,让它变成false。

  • 要保证这该替换必须发生在complileReleaseJavaWithJavac之前,
  • 然后在打包彻底完成以后,再把Log开关打开,即再false变回true,使得开发环境一直都是可以输出Debug Log的。

打包前执行下面这条语句,得出的结果是:public static boolean ENABLE_DEBUG = false;

gradle jarMyLib

参考:
Gradle实践之自定义打包jar+Log开关自动关闭

http://www.cnblogs.com/kangyi/p/4448398.html

关注我的公众号,轻松了解和学习更多技术
这里写图片描述

这篇关于Gradle构建控制Log开关——BuildConfig\自定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378006

相关文章

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen