在app build.gradle下编辑
1.配置不同渠道打包签名:
android {
...
signingConfigs {
debug {
keyAlias ''
keyPassword ''
storeFile file('xxx.keystore')
storePassword 'android'
}
release {
keyAlias ''
keyPassword ''
storeFile file('xxx.keystore')
storePassword ''
}
v1 {
keyAlias ''
keyPassword ''
storeFile file('xxx.keystore')
storePassword ''
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
v1SignRelease {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.v1
}
v1SignDebug {
signingConfig signingConfigs.v1
}
}
...
}
使用gradlew :app:assembleV1SignDebug或者gradlew :app:assembleV1SignRelease 即可打包自定义渠道签名包
2. 配置不同渠道资源包(applicationId,assets)
android {
...
flavorDimensions "test"
productFlavors {
google {
applicationId "xxx"
manifestPlaceholders.put("UMENG_CHANNEL_VALUE", "google")
}
huawei {
applicationId "xxx"
}
oppo {
applicationId "xxx"
}
vivo {
applicationId "xxx"
}
}
productFlavors.all { flavor ->
manifestPlaceholders.put("UMENG_CHANNEL_VALUE", name)
}
sourceSets {
google {
java {
srcDirs = [
'src/google/java',
'src/google/extra/exclude'
]
excludes = ['file/*.java']
includes = ["xxx.java"]
}
assets.srcDirs = ['src/google/assets']
}
huawei {
assets.srcDirs = ['src/huawei/assets']
}
oppo {
assets.srcDirs = ['src/oppo/assets']
}
vivo {
assets.srcDirs = ['src/vivo/assets']
}
}
...
}
flavorDimensions:和productFlavors搭配使用,用于定义维度,由于productFlavors没有用到任意设置一个值test
manifestPlaceholders:配置可以在 AndroidManifest.xml
中替换的参数
<meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/>
sourceSets可以装载多个sourceSet,google,huawei,oppo,vivo即为sourceSet(需要在模块src目录下创建对应sourceSet名字的文件夹)
sourceSet属性:
1. java
srcDirs:设置 java 代码的存放位置
include:针对我们设置的 “srcDirs” 文件夹路径,设置将哪些类进行编译打包。
默认值:`` /*.java``**(具体规则请查看 PatternFilterable 官方文档),表示包含目录下的所有文件夹以及其下的所有文件。
exclude:针对我们设置的 “srcDirs” 文件夹路径,设置将哪些类不进行编译打包。
2. assets
srcDirs:设置 assets 的存放位置
注:
main为主sourceSet,可设置aidl,jni,jniLibs,mainfest,res,resources的存放位置
设置打包出来的apk命名方式
渠道名-构建类型-版本号-版本名称-编译时间.apk
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "${variant.flavorName}-${variant.buildType.name}-${defaultConfig.versionCode}-v${defaultConfig.versionName}-${buildTime()}.apk"
outputFileName = fileName
}
}
}
def buildTime() {
def date = new Date()
def formattedDate = date.format('yyyy_MM_dd--HHmm')
return formattedDate
}