Bugly多渠道(Walle)热更新解决方案

上文中讲了腾讯Bugly热更新的接入和具体使用,还没使用热更新的小伙伴可以移步去看一下:

一、Bugly热更新接入和使用

二、Bugly热更新+Walle(瓦力)多渠道打包解决方案

三、Bugly热更新+Walle(瓦力)多渠道打包+应用加固解决方案

这篇文章接着上一篇讲一下多渠道热更新解决方案,这里安利一下Walle(瓦力):Android Signature V2 Scheme签名下的新一代渠道包打包神器,如果想了解更多关于瓦力渠道打包的信息,可以查看这里:新一代开源Android渠道包生成工具Walle

这里默认大家已经接入了Bugly热更新,这篇文章就介绍一个补丁修复所有渠道的解决方案。

一、接入Walle:

Gradle插件使用方式

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

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

并在当前App的 build.gradle 文件中apply这个插件,并添加上用于读取渠道号的AAR

apply plugin: 'walle'

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

并在当前App的 build.gradle 文件中配置插件

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")
}

配置项具体解释:

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为’ a p p N a m e − {appName}- appName{buildType}-${channel}.apk’

可使用以下变量:

projectName - 项目名字
appName - App模块名字
packageName - applicationId (App包名packageName)
buildType - buildType (release/debug等)
channel - channel名称 (对应渠道打包中的渠道名字)
versionName - versionName (显示用的版本号)
versionCode - versionCode (内部版本号)
buildTime - buildTime (编译构建日期时间)
fileSHA1 - fileSHA1 (最终APK文件的SHA1哈希值)
flavorName - 编译构建 productFlavors 名

channelFile:包含渠道配置信息的文件路径。 具体内容格式详见:渠道配置文件示例,支持使用#号添加注释,也就是在你的项目moudle下新建一个文件,命名为channel(moudle上鼠标右键——>New——>File),如下图:
Bugly多渠道(Walle)热更新解决方案_第1张图片
这个文件的内容就是你要打的包的渠道信息,如下图:
Bugly多渠道(Walle)热更新解决方案_第2张图片
如何获取渠道信息

在需要渠道等信息时可以通过下面代码进行获取

String channel = WalleChannelReader.getChannel(this.getApplicationContext());

如何生成渠道包

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

用法示例:

生成渠道包: gradlew clean assembleReleaseChannels
支持 productFlavors生成渠道包: gradlew clean assembleMeituanReleaseChannels

生成渠道包有两种方式:

1、点击打开Terminal,通过输入命令gradlew clean assembleReleaseChannels的方式生成渠道包,这种方式会删除之前执行打渠道包命令时生成的渠道包

如下图:
Bugly多渠道(Walle)热更新解决方案_第3张图片

2、点击Android Studio右侧Gradle,选择项目package目录下的assembleReleaseChannels选项进行多渠道打包,这种方式不会删除之前执行多渠道打包命令生成的渠道包

如下图:
Bugly多渠道(Walle)热更新解决方案_第4张图片
这两种方式生成渠道包都很快,基本上几十秒一分钟左右就能完成20个左右的渠道包,这些渠道包默认在build——>outputs——>channels文件夹下,如下图:
Bugly多渠道(Walle)热更新解决方案_第5张图片
在执行多渠道打包命令的时候,也会自动打出Bugly热更新的基准包,就跟正常打Bugly热更新基准包的步骤是一样的,基准包也是在build——>bakApk目录下,如下图:
Bugly多渠道(Walle)热更新解决方案_第6张图片
下面就可以以这个基准包为标准打出补丁了,流程跟正常的打补丁包的过程是一样的,这里就不再介绍了。

当然你可以选择使用Bugly统计渠道信息:

//获取渠道信息
String channel = WalleChannelReader.getChannel(this);
Bugly.setAppChannel(this, channel);
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId,调试时将第三个参数设置为true
Bugly.init(this, "811fdaa3d7", true);

我从channels文件夹下,随便选了四个渠道包安装在我的测试机上,上传补丁后,均修复成功,也均统计到了相应的渠道信息!

到这里Bugly一个补丁修复所有渠道就介绍完了。

祝大家新的一年,生活愉快,工作顺利!

你可能感兴趣的:(多渠道打包加固热更新解决方案)