Android Gradle全局配置、关闭Log、多渠道打包
2017-03-29 10:28
471 查看
Gradle是什么?
官网介绍:Gradle is an advanced build system as well as an advanced build toolkit allowing to create custom build logic through plugins
Gradle是一个先进的构建系统,也是一个允许通过插件创建自定义构建逻辑先进的构建工具。
为什么使用gradle?
Gradle是一个优秀的构建系统和构建工具,它允许通过插件创建自定义的构建逻辑。 基于Gradle以下的一些特点而选择了它:
1、采用了Domain Specific Language(DSL语言)来描述和控制构建逻辑。
2、构建文件基于Groovy,并且允许通过混合声明DSL元素和使用代码来控制DSL元素以控制自定义的构建逻辑。
3、支持Maven或者Ivy的依赖管理。
4、非常灵活。允许使用最好的实现,但是不会强制实现的方式。
5、插件可以提供自己的DSL和API以供构建文件使用。
6、良好的API工具供IDE集成。
不了解Gradle的童鞋可以看下这两篇文章:
1、Gradle从入门到了解
2、Gradle 完整指南(Android)
Gradle全局配置:
一般我们各个module的build.gradle中都有这一段配置:
假如我们项目中有多个module,如果升级targetSdk、buildTool等,那么每个module都需要改值,不仅麻烦,还有可能导致module之间的版本不统一而出现问题,解决方法是Gradle配置全局变量供各个module使用,在你的Project的根目录下的build.gradle定义ext全局变量:
然后在各module中的build.gradle中引用如下:
这样每次修改Project的build.gradle配置就可以实现全局配置了。
在release版本中关闭Log
我们在调试代码的时候希望显示Log日志信息,但是当我们发布到应用市场的时候我们又不希望我们的应用显示Log信息,因为这样会拖慢应用的运行速度甚至是暴露关键信息,那么该怎么办呢?可以通过配置buildTypes来达到在release版本中自动关闭Log的效果:
配置的buildConfigField参数,编译后会在..\app\build\generated\source\buildConfig文件夹下会自动生成对应版本对应module的BuildConfig.java文件,该文件可以在代码中直接使用,上面配置信息中的NOT_SHOW_LOG和SHOW_LOG是在Project的gradle.properties中定义的值:
先来解释下buildConfigField的用法, buildConfigField 使用示例:
buildConfigField 各参数含义:
配置好上面的信息后,在项目中编写一个MyLog.java类如下:
完整类地址:MyLog.java
上面对Log类做了一层封装,根据BuildConfig.IS_SHOW_LOG的值来决定是否打印Log,我们在buildTypes 的release 里面配置的IS_SHOW_LOG是false,在debug 里面配置的IS_SHOW_LOG是true,这样当我们调试的时候会显示log日志,而当我们打的是release 包的时候就会自动屏蔽了Log。
Build Variant 管理,多渠道打包
BuildTypes:定义了编译类型,针对每个类型可以有不同的编译配置(通常在混淆代码、可调试、资源压缩上做一些区分)。默认的有debug、release 类型,除了这两种外还可以手动添加编译类型(如preview)。
ProductFlavors:如果针对同一个BuildType还想编译出多个版本(如友盟多渠道打包,根据不同的meta-data中的值来区分不同的渠道),这时候就需要ProductFlavors了。
所以最后可以编出的APK的个数 = BuildTypes x ProductFlavors,即:
友盟多渠道打包示例:
1、首先在AndroidManifest.xml中定义meta-data:
2、配置buildTypes
可以手写,也可以让Gradle自动生成,步骤:在app上点右键->Open Module Settings->点击Build Types 按钮,即可配置不同的buildType了,如下所示又加了一个preview :
3、配置 productFlavors,可以手写,也可以让Gradle自动生成,步骤:在app上点右键->Open Module Settings->点击Flavors按钮,即可配置不同的Flavors了,如图所示:
最后在生成的productFlavors中给UMENG_CHANNEL_VALUE赋值:
4、修改生成的APK名称
如现在想生成 preview版本,在buildtypes中选择preview,选择我们要打的渠道包,点击finish:
最后生成的渠道包如下,名字即是按我们想要的命名的:
build.gradle 配置地址:build.gradle
参考:
1、Gradle从入门到了解
2、Gradle 完整指南(Android)
3、Android打包的那些事
4、Gradle Android插件用户指南翻译
5、https://www.figotan.org/2016/04/01/gradle-on-android-best-practise/
官网介绍:Gradle is an advanced build system as well as an advanced build toolkit allowing to create custom build logic through plugins
Gradle是一个先进的构建系统,也是一个允许通过插件创建自定义构建逻辑先进的构建工具。
为什么使用gradle?
Gradle是一个优秀的构建系统和构建工具,它允许通过插件创建自定义的构建逻辑。 基于Gradle以下的一些特点而选择了它:
1、采用了Domain Specific Language(DSL语言)来描述和控制构建逻辑。
2、构建文件基于Groovy,并且允许通过混合声明DSL元素和使用代码来控制DSL元素以控制自定义的构建逻辑。
3、支持Maven或者Ivy的依赖管理。
4、非常灵活。允许使用最好的实现,但是不会强制实现的方式。
5、插件可以提供自己的DSL和API以供构建文件使用。
6、良好的API工具供IDE集成。
不了解Gradle的童鞋可以看下这两篇文章:
1、Gradle从入门到了解
2、Gradle 完整指南(Android)
Gradle全局配置:
一般我们各个module的build.gradle中都有这一段配置:
android { compileSdkVersion 25 buildToolsVersion '25.0.0' defaultConfig { minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" } }
假如我们项目中有多个module,如果升级targetSdk、buildTool等,那么每个module都需要改值,不仅麻烦,还有可能导致module之间的版本不统一而出现问题,解决方法是Gradle配置全局变量供各个module使用,在你的Project的根目录下的build.gradle定义ext全局变量:
ext { compileSdkVersion = 25 buildToolsVersion = '25.0.0' minSdkVersion = 15 targetSdkVersion = 25 versionCode = 1 versionName = "1.0" }
然后在各module中的build.gradle中引用如下:
android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode rootProject.ext.versionCode versionName rootProject.ext.versionName } }
这样每次修改Project的build.gradle配置就可以实现全局配置了。
在release版本中关闭Log
我们在调试代码的时候希望显示Log日志信息,但是当我们发布到应用市场的时候我们又不希望我们的应用显示Log信息,因为这样会拖慢应用的运行速度甚至是暴露关键信息,那么该怎么办呢?可以通过配置buildTypes来达到在release版本中自动关闭Log的效果:
buildTypes { release { minifyEnabled false buildConfigField "boolean", "IS_SHOW_LOG", NOT_SHOW_LOG proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false buildConfigField "boolean", "IS_SHOW_LOG", SHOW_LOG } }
配置的buildConfigField参数,编译后会在..\app\build\generated\source\buildConfig文件夹下会自动生成对应版本对应module的BuildConfig.java文件,该文件可以在代码中直接使用,上面配置信息中的NOT_SHOW_LOG和SHOW_LOG是在Project的gradle.properties中定义的值:
org.gradle.jvmargs=-Xmx1536m SHOW_LOG true NOT_SHOW_LOG false
先来解释下buildConfigField的用法, buildConfigField 使用示例:
buildConfigField "boolean", "IS_SHOW_LOG", NOT_SHOW_LOG
buildConfigField 各参数含义:
buildConfigField | 备注 |
---|---|
String type | 要创建的字段类型,如上面的boolean |
String name | 要创建的字段名,如上面的IS_SHOW_LOG |
String value | 创建此字段的值,如上面的NOT_SHOW_LOG(false) |
public class MyLog { public static int v(String tag, String msg) { if (BuildConfig.IS_SHOW_LOG) { return Log.v(tag, msg); } else { return -1; } } ---------其他方法---------- }
完整类地址:MyLog.java
上面对Log类做了一层封装,根据BuildConfig.IS_SHOW_LOG的值来决定是否打印Log,我们在buildTypes 的release 里面配置的IS_SHOW_LOG是false,在debug 里面配置的IS_SHOW_LOG是true,这样当我们调试的时候会显示log日志,而当我们打的是release 包的时候就会自动屏蔽了Log。
Build Variant 管理,多渠道打包
BuildTypes:定义了编译类型,针对每个类型可以有不同的编译配置(通常在混淆代码、可调试、资源压缩上做一些区分)。默认的有debug、release 类型,除了这两种外还可以手动添加编译类型(如preview)。
ProductFlavors:如果针对同一个BuildType还想编译出多个版本(如友盟多渠道打包,根据不同的meta-data中的值来区分不同的渠道),这时候就需要ProductFlavors了。
所以最后可以编出的APK的个数 = BuildTypes x ProductFlavors,即:
Build Variant = BuildTypes x ProductFlavors
友盟多渠道打包示例:
1、首先在AndroidManifest.xml中定义meta-data:
<meta-data android:name="UMENG_CHANNEL" //占位符,在build.gradle中赋值 android:value="${UMENG_CHANNEL_VALUE}" />
2、配置buildTypes
可以手写,也可以让Gradle自动生成,步骤:在app上点右键->Open Module Settings->点击Build Types 按钮,即可配置不同的buildType了,如下所示又加了一个preview :
buildTypes { release { minifyEnabled false buildConfigField "boolean", "IS_SHOW_LOG", NOT_SHOW_LOG proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false buildConfigField "boolean", "IS_SHOW_LOG", SHOW_LOG } preview { minifyEnabled false buildConfigField "boolean", "IS_SHOW_LOG", SHOW_LOG } }
3、配置 productFlavors,可以手写,也可以让Gradle自动生成,步骤:在app上点右键->Open Module Settings->点击Flavors按钮,即可配置不同的Flavors了,如图所示:
最后在生成的productFlavors中给UMENG_CHANNEL_VALUE赋值:
//给AndroidManifest.xml中的UMENG_CHANNEL_VALUE赋值 productFlavors { market_meizu { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"] } market_xiaomi { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"] } market_huawei { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"] } market_wandoujia { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] } market_yingyongbao { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"] } market_360 { manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"] } }
4、修改生成的APK名称
//获取时间戳 def getDate() { def date = new Date() def formattedDate = date.format('yyyyMMddHHmm') return formattedDate }
//修改APK生成名字 通过android.applicationVariants索引来遍历所有的 build variant applicationVariants.all { variant -> variant.outputs.each { output -> def timeNow = getDate() def newName if (variant.buildType.name.equals('debug')) { newName = "android-" + timeNow + "_v${variant.versionName}-debug.apk" } else { newName = "android_${variant.flavorName}_" + timeNow + "_v${variant.versionName}.apk" } output.outputFile = new File(output.outputFile.parent, newName) } }
如现在想生成 preview版本,在buildtypes中选择preview,选择我们要打的渠道包,点击finish:
最后生成的渠道包如下,名字即是按我们想要的命名的:
build.gradle 配置地址:build.gradle
参考:
1、Gradle从入门到了解
2、Gradle 完整指南(Android)
3、Android打包的那些事
4、Gradle Android插件用户指南翻译
5、https://www.figotan.org/2016/04/01/gradle-on-android-best-practise/
相关文章推荐
- Gradle for Android(三)多渠道打包、配置签名信息
- [Android]配置Gradle的productFlavors构建项目用于多渠道打包或多环境运行
- Gradle For Android(二) 多渠道打包与签名配置
- android 多渠道打包,build.gradle文件配置、manifest文件配置
- Gradle for Android(三)多渠道打包、配置签名信息
- Android Studio Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)、配置签名文件
- Android_AndroidStudio多渠道打包及gradle配置签名信息
- AndroidGradle --多渠道打包配置(转发)
- Android使用gradle不同配置多项目打包(升级版)
- Android Studio使用教程(六):Gradle多渠道打包
- Android Studio之Gradle多渠道打包
- MAC下配置gradle用eclipse 打包android程序
- Android中Gradle配置打包运行不同版本
- Android开发之Gradle笔记整理2-Gradle常用命令及UMeng多渠道打包实战
- Android之Android Studio--Gradle多渠道打包
- Android Studio--Gradle多渠道打包
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- as通过gradle实现多渠道打包+使用配置文件进行版本管理+指定apk输出路径和apk文件名
- android开发之Jenkins+Gradle实现android开发持续集成、多渠道打包