刚接触Android的人,可能对Gradle有点茫然。Gradle是什么?有效的管理Gradle有什么用?
随着项目的不断壮大,我们每天在build,签名,打包(分渠道),发布,甚至项目依赖的更替,差异管理花费的时间越来越多了。都说程序员擅长“偷懒”,擅长写脚本(听说有人要消灭这些破坏世界和平的人?哈哈哈。。),那么有没有一种工具可以帮我们简化这个过程,把这个过程用代码的方式描述出来?
如何有效的管理我们的Gradle脚本?
版本号与依赖管理
对项目的版本以及依赖库的版本号进行统一管理,这里不做详细说明,具体可参考http://www.jianshu.com/p/edd495d8efc8
构建类型(BuildTypes)
默认情况下,会创建release和debug两个版本,我们可以在里面配置我们想要的构建环境,例如:
-
配置debug Build Type,以便release和debug两个版本同时存在到一个设备上
buildTypes{ debug { applicationIdSuffix ".debug" } }
-
开启混淆
(混淆原则可参考http://blog.csdn.net/chen930724/article/details/49687067)buildTypes{ release { minifyEnabled true //如果为true,对应的task会被创建 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
-
控制输出(这里以修改输出apk包名为例)
applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 输出apk名称为Test_v1.0_2016-09-22_GooglePlay.apk,可任意组合 def fileName = "Test_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk" output.outputFile = new File(outputFile.parent, fileName) } } }
在打包的时候,可根据自己的需要,生成自己想要的输出。
variant类的更多属性可参考https://chaosleong.gitbooks.io/gradle-for-android/content/advanced_build_customization/manipulating_tasks.html
- 分渠道(Android应用的发布一般针对多个市场,我们称为渠道)
首先在AndroidManifest.xml里配置PlaceHolder
<meta-data android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
可在defaultConfig中配置渠道的默认值
defaultConfig {
manifestPlaceholders = [ CHANNEL_VALUE:"GooglePlay" ]
}
接下来定义我们需要的多个渠道
productFlavors {
GooglePlay{}
huawei{}
xiaomi{}
baidu{}
}
效果如下:
配置签名信息(SigningConfigs)
签名一个应用需要(debug使用默认的)以下文件
storeFile 签名文件
storePassword 密码
keyAlias 别名
keyPassword key密码
配置release版本的签名信息:
release {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android" }
签名是个很敏感的东西,在具体项目的使用中建议用配置文件来保存各种签名的信息,需要的时候进行读取。
其他
添加java8支持
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8}
去除不想添加到apk的配置文件
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1' }
Android Studio 2.2版本引入新的apk分析功能,感兴趣的童鞋可以去研究研究自己应用的结构
最后
关于Gradle配置的内容还有很多,欢迎小伙伴们补充~