热修复学习(2):TinkerSDK

Tinker是微信官方的Android热补丁解决方案。使用Tinker热修复比Sophix略麻烦,分2钟情况:
1 接入TinkerSDK,代码量会少一些,但是需要去Tinker Platform创建自己的应用,补丁文件会传入第三方平台,有费用标准,而且是间隔时间去平台查询补丁,更新有延时。
2 直接使用Tinker,代码量多,补丁文件保留在自己的服务器,每次有更新时能即时加载。

先介绍接入TInkerSDK的方式

1 在项目的build.gradle文件中加入

buildscript { repositories { jcenter() } 
dependencies { // TinkerPatch 插件 classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.2" } }

2 在app的gradle中添加依赖

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

3 在app目录下,创建tinkerpatch.gradle 这是tinker的一些配置,可以去SDKdemo里赋值一份。

热修复学习(2):TinkerSDK_第1张图片
image

然后在app的build.gradle中引入

apply from: 'tinkerpatch.gradle'

介绍一些tinkerpatch.gradle中我们会用到几个参数
baseInfo:基包文件夹名(打补丁包的时候,需要修改,这个会在后面打补丁再介绍一次)
appKey:进入官网注册一个账号,新增APP,得到对应的appKey。
appVision:这个一定要保持app版本跟平台上编写的版本一致

热修复学习(2):TinkerSDK_第2张图片
图片.png

4 在application类中初始化Tinker
注意tinkerpatch.gradle中reflectApplication 这个参数

reflectApplication = true 的情况
public class SampleApplication extends Application {

    ...

    @Override
    public void onCreate() {
        super.onCreate();
        // 我们可以从这里获得Tinker加载过程的信息
        tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();

        // 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化SDK
        TinkerPatch.init(tinkerApplicationLike)
            .reflectPatchLibrary()
            .setPatchRollbackOnScreenOff(true)
            .setPatchRestartOnSrceenOff(true)
            .setFetchPatchIntervalByHours(3);

        // 每隔3个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果
        TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
    }
reflectApplication = false的情况为,接入 Tinker 而改造我们的 Application 类
@SuppressWarnings("unused")
@DefaultLifeCycle(application = "tinker.sample.android.app.SampleApplication",
                  flags = ShareConstants.TINKER_ENABLE_ALL,
                  loadVerifyFlag = false)
public class SampleApplicationLike extends DefaultApplicationLike {

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化 SDK
        TinkerPatch.init(this)
            .reflectPatchLibrary()
            .setPatchRollbackOnScreenOff(true)
            .setPatchRestartOnSrceenOff(true)
            .setFetchPatchIntervalByHours(3);

        // 每隔3个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果
        TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
    }

}
介绍两个api

如果你希望补丁更新更佳及时,可以在APP启动或用户登录等一些关键路径,使用 fetchPatchUpdate(true) 强制检查更新
TinkerPatch.with().fetchPatchUpdate(true);
TinkerPatch SDK 默认在补丁合成成功后,等应用的主进程重新启动时生效。若我们希望用户可以尽快的生效,可以指定用户锁屏时自动重启应用:
// 默认为false
TinkerPatch.with().setPatchRestartOnSrceenOff(true);

6 项目中添加权限

   

接下来演示一遍流程
1 将旧代码打包
打开Studio右侧的Gradle,选择assemableDebug打包
打正式包要注意配置签名

热修复学习(2):TinkerSDK_第3张图片
图片.png

热修复学习(2):TinkerSDK_第4张图片
图片.png

完成之后如下
热修复学习(2):TinkerSDK_第5张图片
图片.png

修改baskApk的编号
热修复学习(2):TinkerSDK_第6张图片
图片.png

完成后打开Gradle,如下选择tinkerPatchDebug生成补丁包
热修复学习(2):TinkerSDK_第7张图片
图片.png

补丁的位置
热修复学习(2):TinkerSDK_第8张图片
图片.png

发布补丁
热修复学习(2):TinkerSDK_第9张图片
图片.png

看完上面的流程可以试一试

热修复学习(1):Sophix
热修复学习(2):TinkerSDK
热修复学习(3):Tinker组件依赖

你可能感兴趣的:(热修复学习(2):TinkerSDK)