热更新|android 热更新的实现

最近由于项目越做越大,每次更新还得上传至少七八个市场,非常繁琐,于是我找遍网络,找到了不少热更新方案,其中一个名叫Robust的热修复非常给力。
这是美团点评在github上的一个开源项目:https://github.com/Meituan-Dianping/Robust。
经过几天的学习,和在小编的帮助下,终于在自己的项目中跑了一遍,现在分享一下心得,将这几天踩得坑分享一下,避免你再走老路,(其实我也是看了issues里面有人问过的问题)
1首先在总的build.gradle中的dependencies中添加

classpath 'com.meituan.robust:gradle-plugin:0.3.7' classpath 'com.meituan.robust:auto-patch-plugin:0.3.7' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'


现在最新的更新到了0.3.7。
2在app的build.gradle中
apply plugin: 'com.android.application'


之后添加
【热更新|android 热更新的实现】

//apply plugin: 'auto-patch-plugin'---标记1 待会要回来 apply plugin: 'robust'


在buildTypes中把混淆开了,我跟人觉得不加混淆之后一系列会变得很奇怪,当然你可以试一下不加混淆,那么之后就不必为mapping文件的问题烦了,不过我没试通过。

3.把原项目中的那个gradle_mvn_push.gradle加上,不让报错

还要在gradle.properties文件中添加,尽量跟原项目一致,还有一些附加的也加上,可以通过控制变量法排除你不需要的。

VERSION_NAME=0.3.7 GROUP=com.meituan.robust


hotfixPackage

4把robust.xml文件复制过来,我是修改了


hotfixPackage和patchPackname

把包名改自己的,并且在PathManipulateImp中的setPatchesInfoImplClassFullName方法中包名保持一致,类名用PatchesInfoImpl


到这就配置好了,之后你直接在terminal中输入

gradlew cleanassembleRelease --stacktrace --no-daemon

回车,就可以等一段时间,直到发现build success,完成第一步的操作,将outputs中mapping.txt和methodsMap.robust复制到src平级

目录robust中。将标记1 代码段打开,之后(以下是我的简单修改),我是将按钮点击方法中的toast弹出信息修改了一下,在方法的上面修改

@Modify,并且在最外面的方法中加上@Modify,之后再在terminal中输入老一句话, 回车之后的等待一段时间,出现build faild 你就可能成功了,再看一下

有没有 java.lang.RuntimeException:auto patch end successfully,表示成功了。你可以看一下在outputs文件夹下有没有出现patch.jar文件,出现表示成功,你先安装之前一下出现的app,运行一下,看原来的弹出信息,之后利用手机助手之类的将patch文件复制到sd卡的robust文件夹下,没有就自己创建。在运行一下那个修复按钮吗,按钮对应

的方法

new PatchExecutor(getApplicationContext(), new PatchManipulateImp(),new Callback()).start();

之后看一下那个弹出信息的点击是否已经修改了弹出信息了。

有问题可以留言,也可以直接去美团点评的github上去issurs,那边的小编很热情的。

最后再感谢一个美团点评的技术团队,这个功能真是太棒了。






    推荐阅读