上文中讲了腾讯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),如下图:
这个文件的内容就是你要打的包的渠道信息,如下图:
如何获取渠道信息
在需要渠道等信息时可以通过下面代码进行获取
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的方式生成渠道包,这种方式会删除之前执行打渠道包命令时生成的渠道包
2、点击Android Studio右侧Gradle,选择项目package目录下的assembleReleaseChannels选项进行多渠道打包,这种方式不会删除之前执行多渠道打包命令生成的渠道包
如下图:
这两种方式生成渠道包都很快,基本上几十秒一分钟左右就能完成20个左右的渠道包,这些渠道包默认在build——>outputs——>channels文件夹下,如下图:
在执行多渠道打包命令的时候,也会自动打出Bugly热更新的基准包,就跟正常打Bugly热更新基准包的步骤是一样的,基准包也是在build——>bakApk目录下,如下图:
下面就可以以这个基准包为标准打出补丁了,流程跟正常的打补丁包的过程是一样的,这里就不再介绍了。
当然你可以选择使用Bugly统计渠道信息:
//获取渠道信息
String channel = WalleChannelReader.getChannel(this);
Bugly.setAppChannel(this, channel);
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId,调试时将第三个参数设置为true
Bugly.init(this, "811fdaa3d7", true);
我从channels文件夹下,随便选了四个渠道包安装在我的测试机上,上传补丁后,均修复成功,也均统计到了相应的渠道信息!
到这里Bugly一个补丁修复所有渠道就介绍完了。
祝大家新的一年,生活愉快,工作顺利!