Gradle构建控制Log开关——BuildConfig\自定义
来源:互联网 发布:阿里云盒子root 编辑:程序博客网 时间:2024/05/17 10:38
转载请标明出处: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 { // 不显示log buildConfigField "boolean", "ENABLE_DEBUG", "false" ... } debug { // 显示Log buildConfigField "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\自定义
- Gradle自定义BuildConfig
- BuildConfig:Gradle自定义你的BuildConfig
- BuildConfig:Gradle自定义你的BuildConfig
- BuildConfig:Gradle自定义你的BuildConfig
- BuildConfig:Gradle自定义你的BuildConfig
- Gradle自定义你的BuildConfig
- Gradle自定义你的BuildConfig
- Gradle自定义你的BuildConfig
- Gradle全局变量设置、自定义BuildConfig
- GRADLE自定义你的BUILDCONFIG
- Gradle实践之自定义打包jar+Log开关自动关闭
- 安卓Studio学习笔记---gradle自定义BuildConfig.DEBUG实现在调试输出Log,正式的时候不输出Log
- log开关控制
- Gradle之使用BuildConfig自定义常量
- Gradle之使用BuildConfig自定义常量
- Gradle之使用BuildConfig自定义常量
- <Android>自定义Log开关
- 64位Ubuntu12.04下安装arm-linux-gdb,以及解决no termcap library found的方法
- 关于assetbundle的详解等
- 链接
- 线索二叉树
- 八皇后问题
- Gradle构建控制Log开关——BuildConfig\自定义
- Android Battery一些信息获取方法
- is not allowed to connect to this MySQL server解决办法
- verilog-for 语句实例
- git 命令(1)
- 欢迎使用CSDN-markdown编辑器
- 滑动返回上一个界面的实现
- 改善 ASP.NET MVC 代码库的 5 点建议
- 宏正ATEN发行最新款双滑轨PS/2-USB双界面LCD控制端