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演示的更多相关文章

  1. 美团热修复Robust的踩坑之旅-使用篇

    最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...

  2. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)

    我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作 ...

  3. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour

    继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...

  4. Android 美团Robust热更新 使用入门

    Android热更新方案Robust 相信很多人都认识了解过 热修复.热更新.热补丁(对于这个技术也没有特别标准的一种叫法,下面我统一叫热更新),之后的一年里,各种热更新方案如雨后春笋般出现,比较耳熟 ...

  5. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析

    如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...

  6. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

    onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并 ...

  7. 实时更新数据的jQuery图表插件DEMO演示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. (原创)cocos lua 热更新从零开始(一)最简单demo

    开发环境:WIN7 + cocos2dx 3.10 lua版本 0.学习这篇内容的基础是你要会创建并运行一个cocos lua项目 1.热更新的思想所谓的热更新,就是在线更新代码和资源.热更新的过程首 ...

  9. Unity 3D中 Ulua-UGUI简单的Demo——热更新的具体流程、使用说明

    Ulua热更新具体流程.使用说明 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 -- 未完 1 -- ...

随机推荐

  1. SQL Server 索引中include

    SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 开文 ...

  2. Django ImageField 上传图片并保存到数据库

    转自:http://logic0.blog.163.com/blog/static/188928146201371235435974/ Form代码: class ImageUploadForm(fo ...

  3. Nunit 2.6 无法调试.Net Framework 4.0

    <configuration> <!-- The GUI only runs under .NET 2.0 or higher. The useLegacyV2RuntimeActi ...

  4. java代码分解质因数

    总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...

  5. java代码异常处理

    总结:运用throw和throws抛出异常,在哪一种情况下该怎么抛出异常.重要 package com.b; //异常中throwe和throws的用法 public class yz { publi ...

  6. Tortoisesvn 如何在资源管理器中断开连接

    你在这个文件夹下打开“工具—文件夹选项—查看”,勾选“显示隐藏的文件夹”选项,可以看到在SVN所在的文件夹下面, 有一个.svn文件夹,把它删除了,刷新一下就可以了.

  7. Socket编程, 在server端read()函数调用后显示错误:Transport endpoint is not connected (犯了低级错误)

    for(;;){ socklen_t len = sizeof(client_address); connfd = accept(listenfd, (struct sockaddr *)&c ...

  8. CSS——常用

    1.超链接样式 a:link {color: #FF0000}  /* 未访问的链接 */a:visited {color: #00FF00} /* 已访问的链接 */a:hover {color: ...

  9. select 动态添加option函数

    转自:https://lym6520.iteye.com/blog/309937 经常会用到select动态添加元素,写了个方法,方便调用!  ... /** * 功能:select对象动态添加Opt ...

  10. [Python Study Notes]水平柱状图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...