Android知识进阶(遥远的重头开始)

Android-美团Robust热修复接入实践问记录

2019-10-28  本文已影响0人  MonkeyLei

先贴出官方文档以及比较全的网友的,我是一开始照着文档来的,然后有些配置不太清楚,参考了下网友了。

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

签名这些都配置上吧,别后面出幺蛾子 - 反正一切按照规范来,或许能省去很多坑..

image

折腾我几天,一直出在打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;
    }
}

出问题啦

image

但是为什么,我在其他的工具类的方法添加就可以打包了?如下:

/*
 *@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

image

接着看错误日志,我发现如下打印信息 - 我发现我的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

image

难道是之前的NeedFixFunction类,一直没有被robust插件所记录到么??也是问了很多人,都不清楚,没遇到过。github issue了,估计大佬们都很忙。。。先这样吧。大概知道可能可以直接重新新建构建应该就可以了。。。。

实践工程地址https://gitee.com/heyclock/doc/tree/master/HotFixTest

目前可用的Activity里面修改方法的版本是修复其中的点击事件:

image

旧版本的方法:

image

下载打包运行后你就会发现,实际方法以及被修复,并且有日志“修复方法这里调用”。表明我们的方法修复生效了。。其他的补丁打包实践,就照着教程来就好了。。。

先这样吧。。后面肯定还是要加强机制原理的学习的,也是刚看完mooc网的热修复教学视频,涉及到原理,机制,tinker,andrfix等的接入学习以及他们的原理等。另外还有关于热修复git分支的管理,受益匪浅。。。感谢。。。后面快速试下tinker。。。然后要开始原理,源码以及一些其他知识的加强了。。。怎么感觉这么老火鸭。。。┭┮﹏┭┮

坑:

〔两行哥〕带你踩坑Robust热修复

https://blog.csdn.net/qq_35849743/article/details/102562335

上一篇下一篇

猜你喜欢

热点阅读