Studio中基于 umeng 统计的多渠道打包。
1.配置友盟环境
在AndroidMainfest.xml的
...
2.配置签名信息
在app
的module
中的build.gradle
添加下列信息:别名、别名密码、签名文件地址和签名密码
signingConfigs {
release {
keyAlias 'xxx'
keyPassword 'xxx'
storeFile file('C:/Users/Administrator/Desktop/xxx.jks')
storePassword 'xxx'
}
}
3.设置buildTypes
的签名配置
因为要打release
包,所以需要设置buildTypes
为release
的签名配置,如下
buildTypes {
// 设置debug版本默认渠道设置
debug {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng_channel"]
}
// 正式版本签名设置
release {
zipAlignEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release // 加上这句话即可
}
}
4.配置渠道信息
渠道号是自己定的,比如wandoujia(豌豆荚)等。不要使用数字开头的命名方式,也不要使用 unknow
这样的名字 。build.gradle(Module:app) 设置productFlavors。xml 中的渠道号占位符${UMENG_CHANNEL_VALUE}
,这里就是要动态的替换占位符的内容,配置信息如下:
android {
productFlavors {
kuan {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
qh360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
}
}
5.执行打包命令
gradlew clean
gradlew assembleRelease
3.sycn project一下再打包即可,Build-->Generate signed APK,Flavors中多选,选择需要的渠道
5.完成,注意生成目录
6.隐藏签名信息
签名信息这种东西属于私密的信息,应该保护起来,最好不要明文写到 build.gradle 里,更不要上传到代码仓库中去。应该放在单独的文件中,在 build.gradle 里去引用这个文件读取签名信息。
清空 signingConfigs
// TODO
7.跟踪打包过程
建议在命令后面加上 --stacktrace
参数,这样万一命令执行失败,可以看到详细的出错信息
gradlew clean --stacktrace
gradlew assembleRelease --stacktrace
8.定制 apk 的文件名:app_版本名称_版本号_日期_渠道号.apk
def packageTime() {
return new Date().format("yyyyMMdd-HHmmss", TimeZone.getTimeZone("UTC"))
}
android {
applicationVariants.all { variant ->
variant.outputs.each { output ->
// 重命名产出的apk文件
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"
} else {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
}
}
}
输出的目录:app/build/outputs/apk
9.删除冗余的unaligned apk
文件
在 app/build/outputs/apk 文件夹中,可以看到一些文件名末尾带有 unaligned 文字的冗余文件,这些文件没有用,可以删掉,只需要在 build.gradle 中添加下列命令就好了
applicationVariants.all { variant ->
variant.outputs.each { output ->
// 重命名产出的apk文件
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
if (variant.buildType.name == "release") {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"
} else {
fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
// 删除unaligned apk
if (output.zipAlign != null) {
output.zipAlign.doLast {
output.zipAlign.inputFile.delete()
}
}
}
}