zoukankan      html  css  js  c++  java
  • 美团热更新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:workspaceandroid_studioRobustappuildoutputsapkapp-release.apk

      全局搜索 getTextInfo,结果如下

     

    5.push 补丁到手机上

       

    adb push E:workspaceandroid_studioRobustappuildoutputs
    obustpatch.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

  • 相关阅读:
    字节码编程,Javassist篇四《通过字节码插桩监控方法采集运行时入参出参和异常信息》
    字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》
    字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
    字节码编程,Javassist篇一《基于javassist的第一个案例helloworld》
    CPU瞒着内存竟干出这种事
    可怕!CPU竟成了黑客的帮凶!
    完了!CPU一味求快出事儿了!
    如果平行宇宙也有编程语言
    你离黑客的距离,就差这20个神器了
    哈希表哪家强?几大编程语言吵起来了!
  • 原文地址:https://www.cnblogs.com/sihaixuan/p/6674377.html
Copyright © 2011-2022 走看看