热修复学习(2):TinkerSDK

作者: tmyzh | 来源:发表于2018-03-24 21:14 被阅读76次

    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里赋值一份。

    image
    然后在app的build.gradle中引入
    apply from: 'tinkerpatch.gradle'
    

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

    图片.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 项目中添加权限

     <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    

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

    图片.png
    图片.png
    完成之后如下
    图片.png
    修改baskApk的编号
    图片.png
    完成后打开Gradle,如下选择tinkerPatchDebug生成补丁包
    图片.png
    补丁的位置
    图片.png
    发布补丁
    图片.png
    看完上面的流程可以试一试

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

    相关文章

      网友评论

        本文标题:热修复学习(2):TinkerSDK

        本文链接:https://www.haomeiwen.com/subject/yurzqftx.html