Android 中多渠道打包的一些坑坑洼洼
在Android开发完成时通常需要进行打包,由于有许多应用市场,比如360应用市场,小米应用市场,华为市场等等。那么一份代码打多个包,发布到不同应用市场是非常必要的。因此今天就来说说在Android 中关于多渠道打包的问题。
首先,要做到一份代码打多个包,我们就要保证每个包的包名不一样,那包名指的是什么呢?你可能会把packageName与applicationId弄混了,简而言之packageName作为R资源,四大组件的路径; applicationId作为应用唯一标识。因此若要做到一份代码打不同的包就要在build.gradle中的多渠道中配置不同的applicationId。
在build.gradle中的productFlavors中配置,如图所示:
配置不同的applicationId由于在不同的应用市场还需要不同的渠道参数,因此可以利用manifestPlaceholders 来配置,如图所示,由于LZ开发的是定制版APP,因此配置的是渠道参数不是关于应用市场的。
配置渠道参数传统打包通常会在Build Variants中选择不同的版本进行打包如图,然后点Build APK,这样打包的时间会比较久,效率较低。如果是打一个包还好,往往实际情况是一次性打多个包。而且有的公司对包名有着严格的要求,那么要如何完成这两个需求呢。
Build Variants首先在gradle中写获取时间的字段:
获取时间的字段然后写打包的字段:
applicationVariants.all { variant -> //批量修改Apk名字
variant.outputs.all { output ->
if (!variant.buildType.isDebuggable()) {
//获取签名的名字 variant.signingConfig.name
//要被替换的源字符串
def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
//替换的字符串
def replaceFile = "V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}_${releaseTime()}"
outputFileName = output.outputFile.name.replace(sourceFile, replaceFile)
}
}
}
}
以上完成打包名称的替换,通过刚才的步骤以后打出来的包名称为:版本号+包名+日期
最后是如何一次性将多个渠道的包一次性打出来,在这里,LZ写了一个脚本,下载Git,然后运行脚本,就可以一次性打出渠道下所有的包,需要脚本的评论拿。
至此,填完渠道打包的坑~~
Android彭于晏睡觉去啦~~~~