大家好,这是我入行以来第一次写帖子,有点激动,不知道写帖子有什么规则,也不知道该怎么写,而且我好久好久没有写过这么长的文字了,可能写的不太好比较杂乱。如若使您的眼睛受到了伤害亦或内心受到了重创,还望您能多多包涵。
我以前做的项目至多上两三个市场,所以这种情况下可以在主项目的gradle中配置多个flavor,不需要任何第三方工具也不需要恼人的命令行或者脚本,只需要多次打包就好了。这方面我并不是特别精通,而且简书上一搜一大堆,所以我就不班门弄斧了。
我现在做的项目需要上应用宝、百度、华为等等共18个市场,如果像上面那种方式,一个一个配置然后一个一个打包,要等到打包完成估计是要等到光年以外了。
我作为一个很懒的程序员,断然不会做这种事情,而且听各位大神说过自动化多渠道打包,一直想尝试一下的,总是被各种理由拦住。今天终于下定决心试一试,毕竟,如果不尝试一下,你都不知道你真的可以把所有事情都搞砸!
1.AndroidMultiChannelBuildTool:这种方式不支持v2签名(可以看这里);
2.瓦力只支持v2,更多介绍的话可以点击上面的链接有详细介绍和教程。我用的时候按照官方文档gradle方式无法打包,总是报各种奇怪的错误,我无心一一解决就放弃了这种方式,随后采用jar+命令的方式,但是打包后获取不到channel也很奇怪;
3.极速渠道打包工具 是一位大佬告诉我的,我最初采用v1.0.4打包后无法安装提示应用已损坏,随后更新到最新版本按照官方的教程便成功了;
buildscript {
repositories {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
//添加这一行
classpath 'com.mcxiaoke.packer-ng:plugin:2.0.1'
}
}
//一定不要忘了这一行啊!
apply plugin: 'packer'
dependencies {
// 添加 packer-helper
compile 'com.mcxiaoke.packer-ng:helper:2.0.1'
}
packer {
archiveNameFormat = '${buildType}-v${versionName}-${channel}'
archiveOutput = new File(project.rootProject.buildDir, "apks")
//1.渠道列表的方式
//channelList = ['*Douban*', 'Google/', '中文/@#市场','Hello@World','GradleTest', '20070601!@#$%^&*(){}:"<>?-=[]; \',./']
//2.指定渠道列表文件,file类型
channelFile = new File(project.rootDir, "markets.txt")
//3.根据productFlavor指定不同的渠道列表文件
//channelMap = [
// "Cat" : project.rootProject.file("channels/cat.txt"),
// "Dog" : project.rootProject.file("channels/dog.txt"),
// "Fish": project.rootProject.file("channels/channels.txt")
// ]
}
注意:channelList / channelMap / channelFile 不能同时使用,根据实际情况选择一种即可,三个属性同时存在时优先级为: channelList > channelMap > channelFile,另外,这三个属性会被命令行参数 -Pchannels 覆盖;
我使用了第二种方式
signingConfigs {
//add
releaseConfig {
keyAlias 'alias'
keyPassword 'password'
storeFile file('...itheima.jks')
storePassword 'password'
//支持v2签名,这行不要忘!!
v2SigningEnabled true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//这就是上面配置的
signingConfig signingConfigs.releaseConfig
}
}
// 如果没有找到渠道信息或遇到错误,默认返回的是""
// com.mcxiaoke.packer.helper.PackerNg
final String channel = PackerNg.getChannel(Context)
flavor_360 #360
flavor_baidu
flavor_xiaomi
...
gradle -P market=markets.txt clean apkRelease
注意:如果你已经配置了flavor,比如说:
productFlavors{
flavor_release {
applicationId "com.example.app"
}
}
那么你需要在这里指定flavorName:
gradle -P market=markets.txt clean apkFlavor_releaseRelease
这里flavor_release首字母需要大写哦!
好了,不到一分钟时间,等读条完成你就可以在输出目录里面看到apk了,那么本次多渠道自动化打包完成了!
当时看到打包成功之后,心里真的挺开心的,非常感谢帮助我的大佬!!遗憾的是瓦力打包打包完成获取不到渠道信息,我这两天有时间还会再尝试的。
我一直没有尝试就是因为潜意识里觉得这个很难,很复杂,更不敢去尝试,如此恶性循环。然而现在看到自己通过努力(瞎搞)终于成功了,真相就是这样:有时候觉得自己不会做,努力之后才发现,原来不是难,是因为自己蠢
不瞎掰扯了,睡觉了。。
非常感谢您耐着性子看完我这篇帖子,再次申明:如果这篇帖子使得您的眼睛受到了伤害亦或内心受到了重创————睡一觉就好了!哈哈哈哈哈哈
如果不小心使您做了噩梦————那还不是因为你做了亏心事啊,哈哈哈哈哈哈哈