美团热更新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 -- ...
随机推荐
- SQL Server 索引中include
SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 开文 ...
- Django ImageField 上传图片并保存到数据库
转自:http://logic0.blog.163.com/blog/static/188928146201371235435974/ Form代码: class ImageUploadForm(fo ...
- Nunit 2.6 无法调试.Net Framework 4.0
<configuration> <!-- The GUI only runs under .NET 2.0 or higher. The useLegacyV2RuntimeActi ...
- java代码分解质因数
总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...
- java代码异常处理
总结:运用throw和throws抛出异常,在哪一种情况下该怎么抛出异常.重要 package com.b; //异常中throwe和throws的用法 public class yz { publi ...
- Tortoisesvn 如何在资源管理器中断开连接
你在这个文件夹下打开“工具—文件夹选项—查看”,勾选“显示隐藏的文件夹”选项,可以看到在SVN所在的文件夹下面, 有一个.svn文件夹,把它删除了,刷新一下就可以了.
- Socket编程, 在server端read()函数调用后显示错误:Transport endpoint is not connected (犯了低级错误)
for(;;){ socklen_t len = sizeof(client_address); connfd = accept(listenfd, (struct sockaddr *)&c ...
- CSS——常用
1.超链接样式 a:link {color: #FF0000} /* 未访问的链接 */a:visited {color: #00FF00} /* 已访问的链接 */a:hover {color: ...
- select 动态添加option函数
转自:https://lym6520.iteye.com/blog/309937 经常会用到select动态添加元素,写了个方法,方便调用! ... /** * 功能:select对象动态添加Opt ...
- [Python Study Notes]水平柱状图绘制
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...