热更新Robust自动化补丁简单集成

前言

美团Robust开源,并且支持自动化补丁,果断换掉公司的AOP patch方案。

  • 主要原理:在每个方法前加入一段代码,如果patch.jar存在,则加载patch.jar中的代码片段,否则执行原本的代码片段。(如下图)
    官方链接:http://tech.meituan.com/android_autopatch.html
热更新Robust自动化补丁简单集成_第1张图片
patching.png

实际运用

  1. apk大小
    集成robust前:6.9Mb 后:7.6Mb
  2. 优势:及时生效,rom影响(小),兼容性(99.8%)
    劣势:不能修复.so/res/等文件

简单集成

  1. 添加依赖
    compile 'com.meituan.robust:robust:0.3.3'
  • 集成插件
    apply plugin: 'com.android.application'
    //制作补丁时将这个打开,auto-patch-plugin紧跟着
com.android.application
//apply plugin: 'auto-patch-plugin'
apply plugin: 'robust'
  • 在整个项目的build.gradle加入classpath
 buildscript {
    repositories {
        jcenter()
    }
    dependencies {
         classpath 'com.meituan.robust:gradle-plugin:0.3.3'
         classpath 'com.meituan.robust:auto-patch-plugin:0.3.3'
   }
}
  • 在app/robust下配置robust.xml文件
  • 将prouard-rules.pro下内容拷贝到项目中对应的prouard-rules.pro下
  • Androidmanifest.xml配置sdcard读写权限(一定要记得)

正常打包

注:必须打release包,debug中插入逻辑需要在robust.xml中配置

  1. 调用命令(./gradlew clean assembleRelease --stacktrace --no-daemon)打包一个release.apk
  2. 保存outputs/mapping/mapping.txt 以及outputs/robust/methodsMap.robust文件 (为了记住上次打包时混淆映射的.class文件,DexClass.load("映射到该文件")) 到app/robust/

打补丁姿势:

  1. build.gradle下的auto-patch-glugin插件开启
  2. 在修改的位置方法前插入 @Modify
  3. 重新使用命令打包(会Build Failed构建失败,但是outputs/robust/下会出现一个patch.jar)文件
  4. adb push /Users/a092/Downloads/Robust-test/app/build/outputs/robust/patch.jar /sdcard/robust/patch.jar调用该命令复制到手机对应目录(实际项目中,通过云端进行push)
  5. 加载patch.jar
    5.1 调用该方法new PatchExecutor(getApplicationContext(), new PatchManipulateImp(), new RobustCallBack() ).start();加载patch

说明:PatchManipulateImpl extend PatchManipulate 实现三个方法(具体参考官方demo的PatchManipulateImpl)
RobustCallBack() 该类是补丁加载时回调的操作信息


发现目前Robust自动化补丁方面详细的解释很少,有空笔者会再贴一篇文章进行详细的讲解。

你可能感兴趣的:(热更新Robust自动化补丁简单集成)