Anroid Studio 中Rocoo热修复

Rocoofix热修复功能

现在我们在网上可以找到很多的这种热修复的功能[Rocoofix][6]热修复就是其中的一种,因为现在还没有google官方的一些支持,所以目前基本上除了一些大的公司(阿里巴巴,腾讯)有自己的热修复框架,其他的都是看的别人写的一些,下面就来看看我看的一个RocooFix 热修复:
可以看看这个:https://github.com/dodola/RocooFix
但是这个里面确实还有许多的坑在里面!我通过一段时间的研究,总结了一些bug ,可以让你们少走弯路!但是这个本人还没有在项目正式的线上使用,因为这个毕竟不是官方的!你们自己可以试试!


整个流程:

两种模式

(1)静态修复某种情况下需要重启应用。
(2)动态修复,无需重启应用即可生效。
但是我这边不讲动态修复,主要讲的是静态修复

主要代码

Application的配置

代码如下:

public class RocooApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        //打补丁
        RocooFix.init(this);
    }
}
这个别忘了在AndroidManifest.xml文件中加入
<application
        android:name=".RocooApplication"
        ......>
</application>
静态启用补丁

代码如下:

静态启用,一般在Application里加载补丁
/**
  * 从Assets里取出补丁,一般用于测试
  *
  * @param context
  * @param assetName
  */
RocooFix.initPathFromAssets(Context context, String assetName);
 /**
   * 从指定目录加载补丁
   * @param context
   * @param dexPath
   */
RocooFix.applyPatch(Context context, String dexPath);

注意:dexPath这个路径是有讲究的!一般是放到Android/ceche/项目名/patch.jar这样的目录
     Android 6.0 以上版本 你还得需要加入的 读取SD卡  的动态权限判断
在Root中的Build.gradle配置
在repositories 配置如下
repositories {
        jcenter()
        maven {
            url "http://dl.bintray.com/dodola/maven"
        }
    }
在dependencies 里面配置如下:
dependencies {
     classpath 'com.android.tools.build:gradle:2.1.0'
     classpath 'com.dodola:rocoofix:1.1’
    }
  注意:  不是 2.1.0版本的,有可能 6.0以上系统不支持
在你项目的build.gradle文件里添加如下配置
apply plugin: 'com.dodola.rocoofix'

repositories {
    maven {
        url  "http://dl.bintray.com/dodola/maven"
    }
}

rocoo_fix {
    includePackage = ['com/dodola/rocoofix']//限制需要制作补丁的package
    excludeClass = ['BaseApplication.class']//将不需要加到patch里的类写在这里

    preVersionPath = '1'//注意:此项属性只在需要制作补丁的时候才需开启!!如果不需要制作补丁则需要去掉此项

    enable = true//注意:关掉此项会无法生成Hash.txt文件

    scanref=true//默认为 false,开启这个选项会将与补丁 class 相引用的 class 都打入包中来解决 ART 虚拟机崩溃问题,功能 Beta 中
}


在 dependencies 里面 加入:
dependencies {
    compile 'com.dodola:rocoo:1.0'
} 


注意:
    scanref =true 直接配置在项目里面会报错缺包!你需要加入一个buildsrc 的项目进去(在我的博客最前面的地址中下载最新的buildsrc项目)
    这里主要介绍一下preVersionPath这个属性的作用。
rocoo_fix将制作补丁的步骤透明化,用户无需手动备份hash.txt文件,插件会自动根据当前的versionCode生成hash.txt和mapping.txt文件到指定目录,比如:

    上一个版本发布的时候版本号是1,那么生成的文件会放在app源码目录/rocooFix/version1/[debug]|[release]的目录下,如果需要制作补丁那么在配置里指定preVersionPath 属性,它的值是上一个版本的版本号,这里的值是1,

    然后将build.gradle的versionCode的号码修改,这里修改成2,只要和之前的版本不同就可以,没有具体值的要求。
在你的项目里面配置 proguard-rules.pro配置如下

-keep class com.dodola.rocoofix.* {;}
-keep class com.lody.legend.* {;}

这是起到混淆的作用

其中的配置都已经全部完成!

整个项目的使用方法,下面详细的说一下:

第一步:新建一个类
   public class Test2 {
        public static String getString(){
            return "test 2";
        }
}
第二步: 在Application中 加入 获取assets目录内容代码
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    RocooFix.init(this);

    //这个是放在assets目录中使用的
    RocooFix.initPathFromAssets(this, "patch.jar");    
}
第三步:在MainActivity里面调用 Test类
@Override
    protected void onCreate() {
        super.onCreate();

        TextView  textview = (TextView)findViewById(R.id.textview);

        StringBuffer  stringBuffer=new StringBuffer();
        stringBuffer.append(Test.getA());

        textview.setText(stringBuffer);
    }
第四步 build.gradle 中修改
   ***注意了:  把这个preVersionPath = '1' 注销***

rocoo_fix {
    includePackage = ['com/orliu/rocoo']//限制需要制作补丁的package
    excludeClass = []//将不需要加到patch里的类写在这里

    preVersionPath = '1'//注意:此项属性只在需要制作补丁的时候才需开启!!如果不需要制作补丁则需要去掉此项

    enable = true//注意:关掉此项会无法生成Hash.txt文件

    scanref=true//默认为 false,开启这个选项会将与补丁 class 相引用的 class 都打入包中来解决 ART 虚拟机崩溃问题,功能 Beta 中
}
第五步:以上四步把 bug版本配置好了!现在可以运行打包

第一个版本会生成hash.text文件和mapping.txt文件
这里写图片描述

第六步:修改MainActivity

把Activity 修改一下代码,例如把里面的Test 内容修改 一下!
然后修改 当前项目的versionCode (比如之前是1 现在改成2),说明这个是一个升级版。
然后 把第四步 里面的修改 的preVersionPath = ‘?’ 这个里面是放你上一个版本的versionCode 并 打开!

这样就会生成 patch.jar 的文件

第七步:把path.jar文件放到 assets 目录里面

然后把之前修改的Test类里面的内容都还原,把第六步的操作也都还原了!然后再打一个包,这样就会显示出效果来!

备注

这里面坑很多,反正仔细点就应该没有啥问题![^footnote].

(1)注意点:放到本地服务器上面跑的时候 你需要把parch.jar 文件 替换了,最好还是重启一下 Tomcat !不然这也是加载不出效果的;(放到正式环境里面应该是没有问题的)

(2)注意: 是6.0以上系统得把修改过的类以及引用他的类都放进patch ,这样才会有效果!不然很可能都是没有效果(例如:MainActivity调用了 Test 类,Test类修改了,但是MainActivity 没有修改,这样可能出不来效果)
(3)访问SD 卡的时候:6.0的时候还是需要加入动态权限的哟!
(4)如果是放到SD 卡中还是需要注意的 放的位置也会影响的 (这个方法从SD 卡中得到RocooFix.applyPatch();)
(5)放到Android/ceche/项目包/patch.jar 这个路径下(试过了,可以通过)

(6)这里你没有配置好的话有可能打包也会出错,或者patch.jar生成不了
buildTypes {
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值