使用Android Studio可以很方便地一次编译多个渠道包,具体步骤如下所述。
(1)在AndroidManifest.xml文件中配置CHANNEL字符串。
<meta-data
android:name="UMENG CHANNEL"
android:value="${CHANNEL VALUE}"
tools:replace="android:value"/>
(2)在项目中增加各渠道文件夹的相关文件。如不同渠道包连接的服务器地址不同,可以做如图25-1所示的配置。
每个渠道包的strings.xm1文件中包含对应的服务器地址。
<resources>
<string name="base url">http://www.xxx.com</string
|</resources>
(3)在build.gradle文件中添加如下代码。
|productFlavors{
//编译3个渠道包
demo3{
demo4{
demo5{
//设置每个渠道包中的渠道名称
productFlavors.all{ flavor->
flavor.manifestPlaceholders=[CHANNEL VALUE:n
|ame]
//把代码的提交次数+渠道名称作为版本号
applicationVariants.all { variant->
if(variant.buildType.name.equals('release'))
def gitVersion=gitVersionCode()
variant.mergedFlavor.versionCode=gitVersio
variant.mergedFlavor.versionName=gitVersio
|n.tostring()+variant.mergedFlavor.manifestPlaceholder
s.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.vers
ionName}${releaseTime()}${va
riant.productFlavors[0].name}.a
|pk”
output.outputFile=new File(outputFile.pa
//删除xxx-unaligned.apk这类没有字节对齐的APK|文件
if(output.zipAlign!=null){
output.zipAlign.doLast{
output.zipAlign.inputFile.delete(
}
}
//获取git服务器上的代码提交次数
def gitVersionCode(){
def cmd='git rev-list HEAD--count'
cmd.execute().text.trim().toInteger()
//得到当前时间的字符串,不能用UTC时区,要用上海所在的时区(也就是北京时间)
def releaseTime(){
return new Date().format("yyyyMMddHImmss",
TimeZone.getTimeZone("Asia/Shanghai"))