热修复

热修复-----使用Bugly和tinkerPatch集成笔记,

2017-12-23  本文已影响618人  CROAD

   以前在有道云上做笔记,今天第一次在简书做笔记,也许有很多错误,但是不管做什么都需要尝试!今天的主题,我要说一下,最近项目开发集成热修复Bugly和tinkerPacth的过程中出现的梗,遇到的坑,注意:TinkerPatch是收费的,Bugly基于tinker做的修复,稳定免费的,但是有问题,!

Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。

一、TinkerPacht 集成使用及坑

使用集成

  1. 在平台http://tinkerpatch.com/Docs/SDK上注册,
    • 注意注册时请选择免费版,日下载量<1w;如果使用标准版,有30天试用期;如果是小众app建议使用免费版;
  2. 接入依赖(详细过程参考tinkePatch平台文档,和demo)
    a. 在项目android studio2.3项目中根项目builde.gradle中集成,
buildscript {
   repositories {
       jcenter()
   }
   dependencies {
       // TinkerPatch 插件
       classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.1.4"
   }
}

b. 在app的gradle文件app/build.gradle中

dependencies {
    // 若使用annotation需要单独引用,对于tinker的其他库都无需再引用
    provided("com.tencent.tinker:tinker-android-anno:1.7.7")
    compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.1.4")
}

c. 在主项目app文件下创建创建tinkerpatch.gradle,将demo中的该文件源码拷贝进来修改;
d. 在app目录下的bulide.gradle中添加,apply from: 'tinkerpatch.gradle'

apply from: 'tinkerpatch.gradle'

e. 修改tinkerpatch.gradle中配置的参数;

g. 打开Studio右侧的Gradle,选择assemableRelease打正式包进行打包生成备份基准包(打开build -> bakApk -> app-1.0.0-0330-21-40-52 (根据时间命名)),修改tinkerpatch.gradle中的tinkerpatchSupport -> appVersion;
打开Gradle,如下选择tinkerPatchRelease生成补丁包,补丁包将位于 build/outputs/tinkerPatch 中,这里只需要用到patch_signed_7zip.apk;


SIFH)E3G2_Q47QN9BL(S}RR.png

h. 将刚生成的补丁包,在平台上对应版本号中添加补丁发布即可,重新打开或者卸载重装app就可以;

  1. 需要防止的坑
设置app自动重启,
.setPatchRollbackOnScreenOff(true)      //设置收到后台回退要求时,锁屏清除补丁,默认是等主进程重启时自动清除
.setPatchRestartOnSrceenOff(true)    //设置补丁合成成功后,锁屏重启程序,默认是等应用自然重启

.setPatchResultCallback //监听app下载成功回调,


new Handler(getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent mStartActivity = new Intent(getApplicationContext(), MainActivity.class);
        int mPendingIntentId = 123456;
        PendingIntent mPendingIntent = PendingIntent.getActivity(getApplicationContext(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager mgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, mPendingIntent);
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(0);
    }
}, 10);

4. // 每隔3个小时去访问后台时候有更新,通过handler实现轮训的效果,时间设置为0<t<24h,不能 为0,24h,否则无法更新,崩溃,
new FetchPatchHandler().fetchPatchWithInterval(2);

二、Bugly 热修复使用,遇到的坑

准备工作:

  1. Bugly注册账号,熟悉文档
  2. 参考资料:Bugly让热修复变得如此简单

使用

参照demo,不细说了;

历数bugly的修复坑

// 自动生成tinkerId, 你无须关注tinkerId,默认为false
    autoGenerateTinkerId = true

注释掉tinkerId;其中补丁tinkerId根据基准包和时间自动生成,

上一篇 下一篇

猜你喜欢

热点阅读