美团热修复Robust的踩坑之旅-使用篇
最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程。
一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解。
一、美团Robust的使用
首先我们在编写代码前需要做如下准备
配置文件读写权限,6.0以上需要手动获取
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在project的gradle文件中编写如下代码

在module的gradle文件中编写如下代码


同时我们将从github上下载的美团Robust的例子中的robuts.xml复制到我们的项目中
将下面两个地方改为我们的包名,其他地方不建议在新手测试的时候进行修改。


同时要记得将App的混淆打开,原因在后面会提到

到目前为止,我们可以开始代码方面的编写了
首先给大家看一下目录结构

首先我们看MainActivity的代码

界面很简单,一个TextView和两个Button,图片在后面
这里面重要的就是这个newPatchExecutor,传入了我们写的PatchManpulateImp,和一个回调。
我们接下来看PatchManpulateImp这个类。
这里我们可以将美团的PatchManpulateImp类复制下来,稍微修改一下就可以了

这里改为“你的包名”+PatchesInfoImpl即可

RobustActivity里面的代码很简单如下

这里全部完成后我们可以开始生成apk了,这里要注意要生成带签名的apk-release。

这里要注意的是生成带签名的release apk时,要同时勾选v1,v2。不然一会通过adb命令想genymotion安装App时会报错。
生成Apk后我们通过adb命令将apk安装到模拟器上,这里有的同学可能发现adb无法使用,需要在系统中设置环境变量,adb工具在androidsdk中自带,可以在sdk中去找。



接下来是补丁生成的流程
生成apk后我们可以看到Robust给我们生成了如下文件。新建一个与src同级的文件夹robust,将这两个文件复制过去,这里要注意我们在前面如果没配置混淆的话,这两个文件是不会出现的。


将我们前面的gradle文件打开,修改如下

然后修改RobustActivity中的代码如下

在terminal中调用如下命令
gradlew clean assembleRelease --stacktrace --no-daemon
生成补丁包
这里会build失败,不影响,有下列即为成功,我们可以看到这里已经生成了补丁包

现在我们把补丁包push到我们的模拟器中
这里面我们push jar包到我们在PatchManpulateImp中设置的地址的前一级

现在我们开始运行程序,先点击加载jar包,这里要注意Anroid6.0以上要手动开启读取写入权限。


这样我们就成功了。若是运行失败,建议去看一看打印出的异常,具体分析原因。
二、小结
在接下来的分析中,将会分析美团Robust的原理。
美团热修复Robust的踩坑之旅-使用篇的更多相关文章
- Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...
- [代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...
- Python 踩坑之旅进程篇其四一次性踩透 uid euid suid gid egid sgid的坑坑洼洼
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 菜 ...
- [代码修订版] Python 踩坑之旅进程篇其五打不开的文件
目录 1.1 踩坑案例 1.2 填坑和分析 1.2.1 从程序优化入手 1.2.2 从资源软硬限入手 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: ...
- Python 踩坑之旅文件系统篇其一文件夹也是个文件
目录 1.1 案例 1.2 分析 1.3 扩展 1.4 技术关键字 下期预告 代码示例支持 平台: Mac OS Python: 2.7.10 代码示例: - wx: 菜单 - Python踩坑指南代 ...
- Python踩坑之旅其一杀不死的Shell子进程
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...
- 微信小程序之mpvue+iview踩坑之旅
因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- vue+ vue-router + webpack 踩坑之旅
说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案 老司机可以忽略下面的内容了 1)起因 考虑到数据分离的问题 因为server是express搭的 自然少 ...
随机推荐
- vue实现上传上删除压缩图片
<script> import {Config} from '@/config.js' import {mapState} from 'vuex' import {LocalData, t ...
- css过渡笔记
3D http://fangyexu.com/tool-CSS3Inspector.html <!DOCTYPE html> <html lang="en" ...
- gotop(返回顶部)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- c# 将秒数转换成时,分,秒的方法
TimeSpan ts = , ,Convert.ToInt32( duration)); string str = ""; ) { str = ts.Hours.ToString ...
- scp远程传输文件和ssh远程连接
ssh使用方法 如果从一台linux服务器通过ssh远程登录到另一台Linux机器, 这种情况通常会在多台服务器的时候用到. 如用root帐号连接一个IP为192.168.1.102的机器,输入:“ ...
- tomcat报错相关问题
action1:tomcat7w.exe里面path to executable不是当前所用的tomcat(可执行文件路径是你以前使用过的tomcat路径,导致启动服务报错:找不到可执行文件) 解决办 ...
- [Asp.net mvc]Asp.net mvc 使用Json传递数据
在之前的练习中一直是直接传递的Model到后台或是单个数据到后台,今天在使用中遇到了点问题,不能使用Model传递到后台,但又要实现多个数据到后台,实验了多次有了以下的解决方案,给自己留个笔记. 功能 ...
- 树莓派2 raspyberry Pi2 交叉编译app
Pi 使用的是ARMV7架构的BCM2836, 下载交叉编译器 arm-linux-gnueabihf-gcc 即可. 本地环境: Ubuntu14 + x86_64 1. 下载编译器地址: 1). ...
- [WinCE] Win CE 屏幕截图
VS2005自带了这个工具,这个工具的名称为:“远程放大”,其路径为:"C:\Program Files\CE Remote Tools\5.01\bin\cczoom.exe" ...
- Winform 多个窗口编辑同一条数据同步的实现
场景: 一个主窗口中,可以在列表(DataGridView)里选中一条记录编辑,打开一个编辑窗口(非模态窗口),编辑窗口保存后需要刷新父窗口,由于编辑窗口是非模态窗口,如果打开了多个窗口,并且都是编辑 ...