29 Android Studio使用技巧
29.1打包介绍
使用AndroidStudio可以很方便的一次编译多个渠道包,步骤如下:
1 在AndroidManifest.xml文件中配置CHANNEL字符串:
android:name="UMENG_CHANNEL"
android:value="${CHANNEL_VALUE}"
tools:replace="android:value"/>
2 在项目中增加各渠道文件夹各相关文件。如不同渠道包连接的服务器地址不同,可以做如下配置:
每个渠道包的strings.xml文件中包含对应的服务器地址:
http://www.xxx.com
3在gradle文件中添加如下代码:
productFlavors{
//编译3个渠道包
demo3 {
}
demo4 {
}
demo5 {
}
//设置每个渠道包中的渠道名称
productFlavors.all { flavor ->
flavor.manifestPlaceholders =[CHANNEL_VALUE: name]
}
//把代码的提交次数+渠道名称作为版本号
applicationVariants.all{ variant ->
if(variant.buildType.name.equals('release')) {
def gitVersion =gitVersionCode()
variant.mergedFlavor.versionCode = gitVersion
variant.mergedFlavor.versionName= gitVersion.toString() +variant.mergedFlavor.manifestPlaceholders.CHANNEL_VALUE
}
}
//按APK名+版本号+编译时间+渠道名称的方式修改编译的APK文件名称
applicationVariants.all{ variant ->
if(variant.buildType.name.equals('release')) {
variant.outputs.each { output ->
def outputFile =output.outputFile
if (outputFile !=null &&
outputFile.name.endsWith('release.apk')){
def fileName =
"xxx_v${variant.mergedFlavor.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = newFile(outputFile.parent, fileName)
}
//删除xxx-unaligned.apk这类没有字节对齐的APK文件
if(output.zipAlign!= null){
output.zipAlign.doLast{
output.zipAlign.inputFile.delete()
}
}
}
}
}
}
//获取Git服务器上的代码提交次数
defgitVersionCode() {
def cmd = 'git rev-list HEAD --count'
cmd.execute().text.trim().toInteger()
}
//得到当前时间的字符串,不能用UTC时区,要用上海所在的时区(也就是北京//时间)
defreleaseTime() {
return newDate().format("yyyyMMddHHmmss",
TimeZone.getTimeZone("Asia/Shanghai"))
}