美团热更新Robust Demo演示
1、Android Studio clone 远程Robust项目源码

gradle 同步依赖资源,可能需要半个小时左右。
2、生成样例apk包
配置app module下build.gradle 插件 如下:

执行命令 gradlew clean assembleRelease --stacktrace --no-daemon
3、生成的mapping.txt和methodsMap.robust放到app/robust目录下

4.自动生成补丁
1)修改源码(这里为了方便查看效果,修改SecondActivity getTextInfo方法)
getTextInfo修改前:

getTextInfo修改后:

2)配置app module下build.gradle 插件 如下

执行命令 gradlew clean assembleRelease --stacktrace --no-daemon,判断生成补丁成功,在控制台中有 打印 auto patch end successfully
奇怪的是执行gradlew clean assembleRelease --stacktrace --no-daemon后,生成了补丁,并可以正常使用这个补丁,但是没有看到 auto patch end successfully,
而gradlew clean assembleRelease 就有打印

奇怪的是,补丁生成后,为啥用这暴力方式 抛出异常错误来终止后续apk构建,ps :猜想 可以用清空后续tasks来结束后续apk构建,友好些。
生成补丁patch.jar路径如下:

jadx查看补丁patch.jar(jar里面实际是dex文件)源码
执行命令 (修改相应apk路径)
jadx-gui -d out E:\workspace\android_studio\Robust\app\build\outputs\apk\app-release.apk
全局搜索 getTextInfo,结果如下

5.push 补丁到手机上
adb push E:\workspace\android_studio\Robust\app\build\outputs\robust\patch.jar /sdcard/robust/patch.jar
2)安装样例并运行apk
(1)点击patch按钮,使用android 6.0版本的手机安装,会出现如下问题:

看log,可以知道权限管理问题,在android 6.0以上版本权限需要手动申请,6.0下版本不会出现以上问题。
(2)patch成功后,跳转到SecondActivity界面
显示如下图,说明补丁修复成功:

否则修复失败,查看logcat
com.meituan.robust.sample W/System.err: Suppressed: java.lang.ClassNotFoundException: Didn't find class "com.meituan.sample.robusttest.p"
on path: DexPathList[[zip file "/data/app/com.meituan.robust.sample-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
可能是 在生成样例apk,源码发生变动,没有同步 把生成的mapping.txt(源码发生变动,同一个类混淆后的类名可能跟上次混淆后的类名不一样)和methodsMap.robust放到app/robust目录下,或者重新push patch.jar到手机上。
参考:
https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md
美团热更新Robust Demo演示的更多相关文章
- 美团热修复Robust的踩坑之旅-使用篇
最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)
我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour
继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...
- Android 美团Robust热更新 使用入门
Android热更新方案Robust 相信很多人都认识了解过 热修复.热更新.热补丁(对于这个技术也没有特别标准的一种叫法,下面我统一叫热更新),之后的一年里,各种热更新方案如雨后春笋般出现,比较耳熟 ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析
如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...
- ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解
onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l 环境搭建 l 创建demo并 ...
- 实时更新数据的jQuery图表插件DEMO演示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- (原创)cocos lua 热更新从零开始(一)最简单demo
开发环境:WIN7 + cocos2dx 3.10 lua版本 0.学习这篇内容的基础是你要会创建并运行一个cocos lua项目 1.热更新的思想所谓的热更新,就是在线更新代码和资源.热更新的过程首 ...
- Unity 3D中 Ulua-UGUI简单的Demo——热更新的具体流程、使用说明
Ulua热更新具体流程.使用说明 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 -- 未完 1 -- ...
随机推荐
- Linux网络编程学习路线
转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程 1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...
- Operating System-进程/线程内部通信-管程(Monitor)介绍,实现以及应用
本文主要内容: 管程(Monitor)介绍 管程实现 管程应用 一.管程(Monitor)介绍 1.1 管程 前一篇文章介绍了信号量以及使用,信号量已经提供了一个方便且高效的进程同步机制,但是信号量有 ...
- cpu高的问题的快速定位
功能问题,通过日志,单步调试相对比较好定位. 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底. 58到家架构部,运维部,58速运技术部联合进行了一次线上 ...
- Web中的安全性问题
根据2010年OWASP发布的Web应用程序安全风险主要是SQL注入攻击.跨网站脚本.伪造客户端请求.Cookie盗取,传输层保护不足. 1 SQL注入攻击 随着B/S框架结构在系统开发中的广泛应用 ...
- 任意输入3个数,判断能否组成三角形(python)
任意输入3个数,判断能否组成三角形. 三角形:两边之和大于第三边 直角三角形:勾股定理 代码如下: # 输入合法性检查,必须输入正数,不支持科学计数法'''try: <语句>except ...
- python使用pyodbc连接sql server 2008
一.PyODBC的下载地址: http://code.google.com/p/pyodbc/ 二.测试语句 import pyodbccnxn = pyodbc.connect(DRIVER='{S ...
- JavaScript语言基础-对象与数组
- linux命令-fdisk分区
fdisk -l 查看分区状况,也可查看指定分区 Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 26 ...
- django的render的说明
return render(request,"homesite.html",locals()) homesite.html页面中的所有内容都可以被渲染,不论是标签还是js代码,包括 ...
- spring分模块开发