前言
bugly 热修复使用的是微信的tinker,然后封装好了,不需要在进行后台开发,简化了步骤,简单几部就可以集成了。
热修复:在用户不知情的情况升级补丁,修复bug~~~ 告别重新下载安装App
微信提供的tinker,没得说上亿的用户摆在那
Android Studio IDE环境设置
tinker不支持instant run模式,你需要找到File->Settings->Build,Execution,Deployment->instant run并关闭,日常调试可以tinker关闭来使用instant run。
相关资源
bugly 热修复及官方方文档
1 | https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20180119105842 |
tinker 源码
1 | https://github.com/Tencent/tinker |
下面是集成及使用的详细过程
####一、 Bugly 热修复集成
1.根目录gradle配置1
2// 只需配置tinker-support插件依赖,无需再依赖tinker插件
classpath "com.tencent.bugly:tinker-support:1.1.1"
2.在app module的“build.gradle”文件中添加依赖库
1 | compile 'com.android.support:multidex:1.0.1' |
1 | // 依赖插件脚本 |
3.tinker-support.gradle文件上代码,多渠道的
1 | apply plugin: 'com.tencent.bugly.tinker-support' |
二、初始化sdk,这里使用不改造Application的方式,直接在application中初始化
1 | @Override |
三、自定义重启合并补丁提示界面
bugly 热修复提供自定ui布局方式
https://bugly.qq.com/docs/user-guide/advance-features-android-beta/?v=20170912151050
修改重启提示1
Beta.tipsDialogLayoutId = R.layout.dialog_tinker_tips;
dialog_tinker_tips是自定义对话框
注意:因为要保持接口统一,需要用户在指定控件按照以下方式设置tag,否则会影响您的正常使用:
标题:beta_title,如:android:tag=”beta_title”
提示信息:beta_tip_message 如: android:tag=”beta_tip_message”
取消按钮:beta_cancel_button 如:android:tag=”beta_cancel_button”
确定按钮:beta_confirm_button 如:android:tag=”beta_confirm_button”
1 | <?xml version="1.0" encoding="utf-8"?> |
四、使用刚刚集成的bugyly热修复打包及打补丁包
1.打debug包
调试不需要在该任何配置。
2.打release包
需要把app/build/bakApk
下面对应的备份的文件夹保存起来,这个就是基准包目录,用来以后以这些文件为基准包打补丁包。
#####3. 打补丁包
1.找到之前打release
包时候,保存下来的文件夹,放在app/build/bakApk
下面
2.修改配置
修改tinker-support.gradle
中baseApkDir
等于基准包目录(刚刚放在bakApk
下的某个文件夹)
修改tinkerId = "base-${version_name}"
, base
改成patch
,${version_name}
改成对应基准包的版本号
3.点击右上角gradle
点开Tasks
,找到tinker-suport
就是打补丁的,比如点击buildTInkerPatchXqcDevRelease
就是打开发环境release的补丁包,
4.登陆bugly后台-应用升级-发布补丁,上传app/build/outputs/patch
目录下的patch_signed_7zip.apk
补丁包并上传,
发布补丁之前,必须需要有人运行过了之前的基准包apk,否则会上传不了补丁包
5.客户端每次启动会检测,并且合并补丁
注意:用户更新补丁包需要重启两次,一次获取补丁包,一次合并补丁重启生效
经测试补丁包可以合并类,资源,so库
补丁包是 加了新图片,并替换,修改资源文件,修改了类,加了个新的so动态库,并调用动态库native方法,重启之后如下