先贴出官方文档以及比较全的网友的,我是一开始照着文档来的,然后有些配置不太清楚,参考了下网友了。
Meituan-Dianping/Robust - 照着文档说明,可以先把基本配置高了。有不明白的地方可以看美团的技术博客 Android热更新方案Robust
美团Robust热修复接入说明文档 - 网友的,不过已经是老的版本了。
GaoXiaoduo/gxd-robust - 别人的demo工程,可以下载下来自己改下配置照着流程就可以搞定这个。不过demo还是不够简洁,只提供一个方法修复,简洁就好。。你可以自己精简。。
我目前的版本是:
AS 3.4.1
implementation 'com.meituan.robust:robust:0.4.90'
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.meituan.robust:gradle-plugin:0.4.90'
classpath 'com.meituan.robust:auto-patch-plugin:0.4.90'
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
签名这些都配置上吧,别后面出幺蛾子 - 反正一切按照规范来,或许能省去很多坑..
折腾我几天,一直出在打patch包失败的问题上面。而这个打patch包又一直卡在我的某个方法类添加Modify的问题上:
折腾我几天,一直出在打patch包失败的问题上面。而这个打patch包又一直卡在我的某个方法类添加Modify的问题上:
NeedFixFunction.java
package com.skl.hotfixtest;
public class NeedFixFunction {
/**
* 一个错误的方法,我们实现了
* @param mimi
* @return
*/
public float getMaxNumber(float mimi){
return mimi / 0;
}
}
-- 比如这个方法类,我添加了@Modify,打补丁包就会直接炸裂:
....
@Modify
public float getMaxNumber(float mimi){
return mimi / 0;
}
}
出问题啦
但是为什么,我在其他的工具类的方法添加就可以打包了?如下:
/*
*@Description: 文件操作辅助类
*@Author: hl
*@Time: 2019/3/1 14:17
*/
public class FileUtil {
@Modify
public static String copyFilesFromAssets(Context context, String assetsPath, String savePath, String lastName) {
try {
.......
这样没问题呀。。。> auto patch end successfully
接着看错误日志,我发现如下打印信息 - 我发现我的NeedFixFunction类的相关信息都没有被探知(我猜想应该是这样,导致打patch的时候找不到了吧???):
================method singure to methodid is printed below================
key is com.skl.hotfixtest.FileUtil.copyFilesFromAssets(android.content.Context,java.lang.String,java.lang.String,java.lang.String) value is 1
key is com.skl.hotfixtest.MainActivity.onCreate(android.os.Bundle) value is 2
key is com.skl.hotfixtest.MainActivity.getFuction(android.view.View) value is 3
key is com.skl.hotfixtest.MainActivity$1.fetchPatchList(android.content.Context) value is 4
key is com.skl.hotfixtest.MainActivity$2.onPatchListFetched(boolean,boolean,java.util.List) value is 5
key is com.skl.hotfixtest.MainActivity$2.onPatchFetched(boolean,boolean,com.meituan.robust.Patch) value is 6
key is com.skl.hotfixtest.MainActivity$2.onPatchApplied(boolean,com.meituan.robust.Patch) value is 7
key is com.skl.hotfixtest.MainActivity$2.logNotify(java.lang.String,java.lang.String) value is 8
key is com.skl.hotfixtest.MainActivity$2.exceptionNotify(java.lang.Throwable,java.lang.String) value is 9
key is com.skl.hotfixtest.SystemUtils.getCacheDirectory(android.content.Context,java.lang.String) value is 10
key is com.skl.hotfixtest.SystemUtils.getExternalCacheDirectory(android.content.Context,java.lang.String) value is 11
key is com.skl.hotfixtest.SystemUtils.getInternalCacheDirectory(android.content.Context,java.lang.String) value is 12
上面这个问题,我再试试看,回头过来补...谁有很了解的,指点一下吧...
TODO 待填的坑?!!!
DO 第二天早上,我来了,我又重新尝试了下,新建了一个类,然后修改apply plugin: 'auto-patch-plugin'模式打包patch,发现又可以了:
BadClass.java
难道是之前的NeedFixFunction类,一直没有被robust插件所记录到么??也是问了很多人,都不清楚,没遇到过。github issue了,估计大佬们都很忙。。。先这样吧。大概知道可能可以直接重新新建构建应该就可以了。。。。
实践工程地址:https://gitee.com/heyclock/doc/tree/master/HotFixTest
目前可用的Activity里面修改方法的版本是修复其中的点击事件:
旧版本的方法:
下载打包运行后你就会发现,实际方法以及被修复,并且有日志“修复方法这里调用”。表明我们的方法修复生效了。。其他的补丁打包实践,就照着教程来就好了。。。
先这样吧。。后面肯定还是要加强机制原理的学习的,也是刚看完mooc网的热修复教学视频,涉及到原理,机制,tinker,andrfix等的接入学习以及他们的原理等。另外还有关于热修复git分支的管理,受益匪浅。。。感谢。。。后面快速试下tinker。。。然后要开始原理,源码以及一些其他知识的加强了。。。怎么感觉这么老火鸭。。。┭┮﹏┭┮
坑:
〔两行哥〕带你踩坑Robust热修复
https://blog.csdn.net/qq_35849743/article/details/102562335