关于gradle的基础了解,提供一个中文指南,不了解gradle的需要先看指南。
大多数Android用户使用gradle的初始目的很简单,就是多渠道打包,那么我们就来说说多渠道打包的问题(这里以友盟举例)
多渠道打包的关键之处在于,定义不同的product flavor,并把 AndoridManifest中的channel渠道编号替换为对应的渠道名,我们在AndroidManifest文件下的application根节点进
行如下配置:
<meta-data
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_NAME}" />
然后进入你的build.gradle(注意这里是Module gradle,不是Project gradle,本文中提到的build.gradle都是module的)中的android节点下的productFlavors配置:
android {
// 你的其他配置代码
productFlavors {
yingyongbao {
manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]
}
umeng {
manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]
}
wandoujia {
manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]
}
}
// 你的其他配置代码
}
mete-data中的value=“${CHANNEL_NAME}”实际上只是个占位符,它在build.gradle中会根据不同的渠道名称替换成不同的值,由此来实现多渠道打包,不需要在原始的清单
文件下写一堆与项目没多大关系的东西,把构建项目集中到build.gradle中。这里manifestPlaceholders可以用来替换AndroidManifest下的占位符号,当然不只是替换渠道包这么单
一的功能,举个例子比方说我们的清单文件中配置的activity,我们也可以用占位符先占着${activity},然后在不同的渠道中配置不同的activity的完整名称,那么在不同的渠道下就会
加载不同的activity。
下面在介绍一个常用的功能,在每一个gradle构建的项目中都有gradle-wrapper.properties文件,在该文件中配置签名信息:
RELEASE_KEY_PASSWORD=xxxx
RELEASE_KEY_ALIAS=xxx
RELEASE_STORE_PASSWORD=xxx
RELEASE_STORE_FILE=../.keystore/xxx.jks
android {
signingConfigs {
release {
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
}
android {
debug {
manifestPlaceholders = [app_label:"@string/app_name_debug"]
applicationIdSuffix ".debug" //增加id后缀
minifyEnabled false //混淆
signingConfig signingConfigs.debug //使用签名
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
manifestPlaceholders = [app_label:"@string/app_name"]
minifyEnabled true
shrinkResources true //去除无用资源
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
preview{
manifestPlaceholders = [app_label:"@string/app_name_preview"]
applicationIdSuffix ".preview"
debuggable true // 保留debug信息
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.preview
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
android {
// rename the apk with the version name
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
"ganchai-${variant.buildType.name}-${variant.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())
}
}
}
当然如果只是当作一个工具在用的话,看看指南在看看这个帖子,就到这了。如果你很闲或者你很有兴趣推荐一个 gradle博客。