Walle实现Android多渠道打包梳理

关于Walle

Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器

瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求。

关于新签名方案和旧签名方案的区别,用一张图概括如下:


区别

github地址:https://github.com/Meituan-Dianping/walle
美团博客地址(Walle原理):http://tech.meituan.com/android-apk-v2-signature-scheme.html

在现有项目中集成

步骤一:配置build.gradle

在位于Android项目的根目录build.gradle(TvTrunkProject) 文件中添加Walle Gradle插件的依赖, 如下:

buildscript {
    dependencies {
        ...
        ...
        classpath 'com.meituan.android.walle:plugin:1.1.6'
    }
}

接着是在当前App的 build.gradle(QQLiveTV_BASE_LINE)文件中apply这个插件,并添加上用于读取渠道号的AAR,如下:

apply plugin: 'walle'

dependencies {
    implementation 'com.meituan.android.walle:library:1.1.6'
}

步骤二:配置插件

build.gradle(QQLiveTV_BASE_LINE) 文件中配置插件,这里的配置可以实现自定义,这里给出的默认值:

walle {
    // 指定渠道包的输出路径
    apkOutputFolder = new File("${project.buildDir}/outputs/channels")
    // 定制渠道包的APK的文件名称
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}

步骤三:配置签名

接着我们需要创建一个Signing config来配置我们的签名jks,如图所示:

配置签名

配置完毕之后会在我们的build.gradle(QQLiveTV_BASE_LINE)中自动生成配置信息:

配置信息

步骤三:踩坑1

在配置完签名信息之后直接sync now,则会报异常:ERROR: A problem occurred configuring project ':app'.

产生原因:buildTypes中没有配置我们刚刚创建的签名信息。

解决方法:buildTypes中添加我们的签名信息:

添加信息

在这里需要注意,我们在配置signingConfig signingConfigs.xxx时,xxx必须和我们之前创建的签名信息的名字以及buildTypes中的名称对应,如果配置了多个签名信息则需要创建多个小闭包:

对应

步骤三:踩坑2

当我们执行gradle指令时,报出错误:Could not initialize class org.codehaus.groovy.runtime.InvokerHelper

产生原因: 是由于jdk版本和gradle版本不匹配。在使用Oracle JDK 14时,所有gradle(6.2.2)任务都会失败。

解决方法: 降低jdk版本或者提高gradle版本到6.3及以上。

步骤四:设置渠道信息

我们在proj.android[QQLiveTV_BASE_LINE]目录下创建一个名为channel的file,并在channel里面设置我们的渠道信息:

channel

步骤四:踩坑1

在创建channel时不能添加后缀.txt,否则执行打包的时候不能读取到渠道信息,即只能打出一个包。

步骤五:执行打包

生成渠道包的方式是和assemble${variantName}Channels指令结合,渠道包的生成目录默认存放在 build/outputs/apk/,也可以通过walle闭包中的apkOutputFolder参数来指定输出目录

用法示例:

生成渠道包 gradlew clean assembleReleaseChannels
支持productFlavors gradlew clean assembleMeituanReleaseChannels
生成单个渠道包 gradlew clean assembleReleaseChannels -PchannelList=anzhuo
生成多个渠道包 gradlew clean assembleReleaseChannels -PchannelList=wandoujia,baidu

正常情况下我们直接执行指令gradlew clean assembleReleaseChannels即可打出所有渠道包。

步骤五:踩坑1

在执行打包指令时报出错误:Task 'assembleReleaseChannels' not found in root project TvTrunkProject ''.

产生原因: 项目之前的打包方式是采用productFlavors进行多渠道打包。

错误解决方法: 在网上查看相关blog,说是直接将productFlavors中相关配置直接注释掉即可,但是经过实测,光注释掉productFlavors相关配置只是治标不治本,后续产生的错误会更多。

正确解决方法: 查看Walle仓库的issue,发现Walle本身是支持在配置productFlavors时一键生成多个渠道包,所以根本原因并不是productFlavors。解决方法描述如下:

可以检查有没有配置productFlavors,如果有,需要在assemble{$flavor.name}ReleaseChannels.另外还可以在AndroidStudio, Gradle->Project->{your app module name} -> package下面找到你可以使用的命令集合。

gradle指令

所以,我们执行这个assembleSNMAPP__10009DebugChannels,就会打包成功。

执行指令

successful
打包成功
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容