最近需要在项目中使用热修复框架,在这里以美团的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的踩坑之旅-使用篇的更多相关文章

  1. Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...

  2. [代码修订版] Python 踩坑之旅 [进程篇其四] 踩透 uid euid suid gid egid sgid的坑坑洼洼

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 公 ...

  3. Python 踩坑之旅进程篇其四一次性踩透 uid euid suid gid egid sgid的坑坑洼洼

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 技术关键字 1.5 坑后思考 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 代码示例: 菜 ...

  4. [代码修订版] Python 踩坑之旅进程篇其五打不开的文件

    目录 1.1 踩坑案例 1.2 填坑和分析 1.2.1 从程序优化入手 1.2.2 从资源软硬限入手 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: ...

  5. Python 踩坑之旅文件系统篇其一文件夹也是个文件

    目录 1.1 案例 1.2 分析 1.3 扩展 1.4 技术关键字 下期预告 代码示例支持 平台: Mac OS Python: 2.7.10 代码示例: - wx: 菜单 - Python踩坑指南代 ...

  6. Python踩坑之旅其一杀不死的Shell子进程

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...

  7. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

  8. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  9. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

随机推荐

  1. 最好最实用的二次开发教程 cms

    ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...

  2. Android获取SD卡路径及SDCard内存的方法

    这篇文章主要介绍了Android获取SD卡路径及SDCard内存的方法,较为详细的分析了Android针对SD卡操作所涉及的类及其具体函数功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了A ...

  3. flutter 生命周期

    前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情, flutter中的State生命周期和android以及React Native的生命周期类似. 先看一 ...

  4. oracle 手动打jar 包

    1.到loracle 的安装目录,D:\ProgramFiles\oracle\product\11.2.0\dbhome_1\jdbc\lib,找到文件 ojdbc6.jar,复制到 D 盘. 2. ...

  5. java基础(九) 可变参数列表介绍

    一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型...(三个点) 例如: void printArray(Object...) 注意: 每个方法最多只有一个可变 ...

  6. 【涨姿势】Prince2和PMP的区别,大多数人都没搞清楚!

    项目管理领域有2个流行的知识体系:      ☑ 一个是美国项目管理协会(PMI)开发的“项目管理知识体系(PMBOK,Project Management Body of Knowledge)”,目 ...

  7. 6.Spring MVC SSM整合问题总结

    1.Cannot find class [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter] for ...

  8. 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26

    记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...

  9. d3js layout 深入理解

    D3 layouts help you create more advanced visualisations such as treemaps: D3 layouts帮助您创造更加高级复杂的可视化图 ...

  10. windows 下安装nodejs 要怎么设置环境变量

    windows 下安装nodejs 了,也安装了npm, 但是有时候切不能直接用request(‘ws’)这一类的东西.我觉得是确实环境变量或其他设置有问题,能否给个完整的设置方案: 要设置两个东西, ...