今天研究热更新的时候研究了微信的Tinker热更新框架,后来发现Bugly的升级SDK已经封装好了Tinker。
而且提供一站式服务,还免费 :-D
步骤如下:
-
1、引用Bugly升级SDK.
在app module中添加如下引用compile 'com.android.support:multidex:1.0.1'// 多dex配置 compile 'com.tencent.bugly:crashreport_upgrade:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本
在工程项目bulid.gradle中添加以下代码:
classpath "com.tencent.bugly:tinker-support:latest.release"
为app module添加依赖:
apply from: 'tinker-support.gradle'
-
2、配置tinker-support.gradle
在app目录下创建一个tinker-support.gradle文件。
apply plugin: 'com.tencent.bugly.tinker-support'def bakPath = file("${buildDir}/bakApk/") def appName = "app-0118-15-09-30" /** * 对于插件各参数的详细解析请参考 */ tinkerSupport { // 开启tinker-support插件,默认值true enable = true // 指定归档目录,默认值当前module的子目录tinker autoBackupApkDir = "${bakPath}" // 是否启用覆盖tinkerPatch配置功能,默认值false // 开启后tinkerPatch配置不生效,即无需添加tinkerPatch overrideTinkerPatchConfiguration = true // 编译补丁包时,必需指定基线版本的apk,默认值为空 // 如果为空,则表示不是进行补丁包的编译 // @{link tinkerPatch.oldApk } baseApk = "${bakPath}/${appName}/app-release.apk" // 对应tinker插件applyMapping baseApkProguardMapping = "${bakPath}/${appName}/app-release-mapping.txt" // 对应tinker插件applyResourceMapping baseApkResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 唯一标识当前版本 tinkerId = "1.0.1-patch" // 是否开启代理Application,设置之后无须改造Application,默认为false enableProxyApplication = true }
-
3、生成基准包和补丁包
按照文档配置好需要的权限,在Application中做好BuglySDK的初始化后我们就可以开始热更新测试了。
通过build中的assembleRealse生成基准包
如果您的代码使用了混淆功能还会生成一个mapping文件。
修改tinker-support.gradle中的tinkerId为新版本的标识符。appName为你生成基准包的目录。
然后使用
即可生成补丁,然后通过Bugly后台
上传补丁即可。