Android技术Android开发Android知识

根据美团Robust原理搭建的热修复框架

2016-12-16  本文已影响630人  heiBIN

github地址:https://github.com/heiBin/RobuFix

RobuFix热修复方案

结合美团Robust原理和Instant Run开发的修复框架。

RobuFix简介

RobuFix通过对项目所有方法进行代码预注入,然后加载生成的补丁包,替换指定方法内容,从而修复问题。目前只支持方法级别的修复,暂不支持新增类,方法,类变量。

主要包括两个部分:

RobuFix修复原理

详细原理可以查看美团热更新方案

RobuFix接入说明

Gradle接入

在项目的build.gradle中应用Gradle插件(目前暂时没有使用依赖库,直接用buildsrc)

apply plugin: com.duoyi.gradle.RobuPlugin

同时在build.gradle中加入robufix自定义变量,robuDir为补丁包和其他文件的输出目录,oldZip为比对包(每次打包都会生成一个比对包,放在robuDir目录下),excludeClass为排除代码注入的类,excludeClass为排除的包名。

robufix{
    robuDir = "E:\\robufix\\RobuFix\\app\\build\\robufix"
    oldZip = "E:\\robufix\\RobuFix\\app\\build\\robufix\\debug\\generate\\generate-161215-161221.zip"
    excludeClass = [ ]
    excludePackage = [ ]
}
核心代码接入

在Application中加入这段代码,建议在attachBaseContext方法中加入。

RobuFix.loadPatch(context, Environment.getExternalStorageDirectory().getAbsolutePath().concat("/patch.jar"));

RobuFix使用说明

打应用包

直接使用Android Studio默认打包工具就可以了,打包后会在之前指定的robuDir目录下生成以下文件:

打补丁包

打补丁包前需要在build.gradle中配置oldZip参数,为原应用对应的对比包路径。

目前是直接使用gradlew generate${variant.name}Patch指令打补丁包,${variant.name}为构建类型(例如Debug或Release),然后会在robuDir目录下生成patch.jar文件

导入补丁包

可以利用adb push指令导入补丁包到模拟器中,例如:

adb push ./app/build/robufix/patch.jar /sdcard/

./app/build/robufix/patch.jar要改成补丁包所在的文件路径,然后重启应用,就可以看到效果了:)

patch.gif
上一篇下一篇

猜你喜欢

热点阅读