关于微信Tinker热修复自己的集成方式以及问题

首页github地址 : https://github.com/Tencent/tinker

1.添加依赖文件,在你project下的build.gradle中添加如下代码:

buildscript {
    dependencies {
        classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.6')
    }
}

在app下的build.gradle下添加:

dependencies {
    //用来自动生成application的,关于添加与否下面会说
    provided('com.tencent.tinker:tinker-android-anno:1.7.6')
    //tinker's main Android lib
    compile('com.tencent.tinker:tinker-android-lib:1.7.6') 
}

当然可以吧版本信息放在gradle.properties文件下进行配置

TINKER_VERSION=1.7.6

然后参考上面github中tinker-sample-android目录下的build.gradle配置自己的build.gradle(大部分都是拷贝过来的)
这里写图片描述

这里写图片描述
这里写图片描述
更多代码我就不贴了,参照tinker-sample-android就可以了。

2.配置Application,这里有两种方式,方式一 :
这里写图片描述
这个时候需要添加上面说的那个依赖,然后会自动生成SampleApplication,但是还是需要在xml里面配置好,虽然配置的时候回报错,等等编译一下就好了。

<application
            android:name=".SampleApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

方式二:自定义Application集成TinkerApplication,指定applicationlike

public class SampleApplication extends TinkerApplication {

    public SampleApplication() {
        super(ShareConstants.TINKER_ENABLE_ALL
                , "com.skin.tinkerdemo.SampleApplicationLike");
    }
}

会有人好奇这个applicationLike是用来干嘛的,我们来看看demo里

  @Override
    public void onBaseContextAttached(Context base) {
        super.onBaseContextAttached(base);
        MultiDex.install(base);

        TinkerManager.setTinkerApplicationLike(this);

        TinkerManager.initFastCrashProtect();
        //should set before tinker is installed
        TinkerManager.setUpgradeRetryEnable(true);

        TinkerManager.installTinker(this);
//        TinkerInstaller.install(this);
    }

很显然就是一些配置,中间那些TinkerManager也在demo里面大家可以看一下,这个地方有一个小提示,如果你用TinkerInstall.install(this)去安装的话可能会在你修复后闪退,不过不要怕,这个是库里面写的杀死进程,毕竟这个还需要进程重启才会修复生效,我们可以参考TinkerManager.installTinker(this)里面去重写SampleResultService(这个就是继承的库里面的DefaultTinkerResultService),在onPatchResult方法里面决定是否强制关闭应用进程。

 TinkerInstaller.install(appLike,
            loadReporter, patchReporter, patchListener,
            SampleResultService.class, upgradePatchProcessor);

接下来我们就是先在MainActivity中配置文字信息

<string name="test_name">hello world!</string>

xml中,按钮点击调用修复代码
这里写图片描述

 TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk");

那么这个patch_signed_7zip.apk是哪里来的呢,如果你按照demo里面的build.gradle去配置,你会发现你的如下图是这样的
这里写图片描述
这个时候你需要修改string.xml为

<string name="test_name">hello world!!!!!</string>

然后点击这个tinkerPatchDebug,不然不会生产差异包,(当然我这边是加了渠道才会变成TinkerPatchDevDebug),如果一切配置都没问题的话会在你的build下生产
这里写图片描述

#adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/

最后拷贝文件到手机目录下,然后点击按钮重启进程(重启进程!重启进程!重启进程!重要的事说三遍)再打开你会发现已经修复好了。

最后提示:
1. 1.7.6版本不支持加固,如果需要加固不建议用tinker或者使用1.7.5之前的版本
2. 一键接入式也许更方便 https://github.com/TinkerPatch/tinkerpatch-sdk
3. 有什么不懂的可以咨询我哈

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值