TinkerPatch SDK API

SDK 所有的 API 都位于TinkerPatch.java中,可以参考 TinkerPatch 中的Sample

初始化 SDK

初始化 SDK 有两个接口,推荐使用默认接口

默认接口(推荐使用)

//接口定义
public static TinkerPatch init(ApplicationLike applicationLike);
//接口使用示例
TinkerPatch.init(applicationLike);

详细的TinkerPatch SDK的初始化接口:

TinkerPatch.init(tinkerApplicationLike)
    //是否自动反射Library路径,无须手动加载补丁中的So文件
    //注意:调用在反射接口之后才能生效,也可以使用Tinker的方式加载Library
    .reflectPatchLibrary()
    //向后台获取是否有补丁包更新,默认的访问间隔为3个小时,若参数为true,即每次调用都会真正的访问后台配置
    //也可以在用户登录或者APP启动等一些关键路径,使用fetchPatchUpdate(true)强制检查更新
    .fetchPatchUpdate(false)
    //设置访问后台补丁包更新配置的时间间隔,默认为3个小时
    .setFetchPatchIntervalByHours(3)
    //向后台获得动态配置,默认的访问间隔为3个小时
    //若参数为true,即每次调用都会真正的访问后台配置
    .fetchDynamicConfig(new ConfigRequestCallback() {
        @Override public void onSuccess(HashMap<String, String> hashMap) { }
        @Override public void onFail(Exception e) { }
    }, false)
    //设置访问后台动态配置的时间间隔,默认为3个小时
    .setFetchDynamicConfigIntervalByHours(3)
    //设置当前渠道号,对于某些渠道我们可能会想屏蔽补丁功能
    //设置渠道后,我们就可以使用后台的条件控制渠道更新
    .setAppChannel("default")
    //屏蔽部分渠道的补丁功能
    .addIgnoreAppChannel("googleplay")
    //设置tinkerpatch平台的条件下发参数
    .setPatchCondition("test", "1")
    //设置补丁合成成功后,锁屏重启程序,默认是等应用自然重启
    .setPatchRestartOnSrceenOff(true)
    //可以通过ResultCallBack设置对合成后的回调,例如弹框什么
    .setPatchResultCallback(new ResultCallBack() {
        @Override public void onPatchResult(PatchResult patchResult) {
            Log.i(TAG, "onPatchResult callback here");
        }
    })
    //设置收到后台回退要求时,锁屏清除补丁,默认是等主进程重启时自动清除
    .setPatchRollbackOnScreenOff(true)
    //可以通过RollbackCallBack设置对回退时的回调
    .setPatchRollBackCallback(new RollbackCallBack() {
        @Override public void onPatchRollback() {
            Log.i(TAG, "onPatchRollback callback here");
        }
    });

只需要传入applicationLike实例即可初始化SDK

注意:setPatchResultCallback的回调是运行在intentService的线程中

自定义接口(谨慎使用)

若想自定义Tinker中的某个自定义类,而不使用TinkerPatch提供的默认实现,可采用以下接口

// 接口定义
public static TinkerPatch init(TinkerPatch tinkerPatch);
// 接口使用事例
TinkerPatch.Builder builder = new TinkerPatch.Builder(applicationLike);
// 可自定义以下几个类,大家可以选择需要复写的类
        // tinker 中的 PatchListener 类
        builder.listener()
        // tinker 中的 LoadReporter 类
       .loadReporter()
        // tinker 中的 PatchReporter 类
       .patchReporter()
       // tinker 中的 ResultServer 类
       .resultServiceClass()
       // tinker 中的 AbstractPatch 类
       .upgradePatch()
       // tinkrpatch 中的请求回调类
       .patchRequestCallback();
// 初始化
TinkerPatch.init(builder.build());

对于Tinker的自定义类可参考Tinker文档:Tinker 自定义扩展。一般来说,我们并不建议大家自己实现Tinker的相关自定义类。更建议大家使用TinkerPatch的回调接口实现,自定义某些类可能会导致TinkerPatch平台的某些上报失效。

在初始化SDK后,我们可以通过以下API获得实例

TinkerPatch tinkerPatch = TinkerPatch.with();

重定向日志输出

可以设置自己的Log输出实现:

TinkerPatch.setLogIml(imp);

自动加载补丁的 Library

默认Tinker中需要手动加载补丁中的Library更改,可参考 Tinker 文档Library 库的加载TinkerPatch平台实现了一键反射Library路径,在调用接口后即可自动优先加载补丁中的Library文件。

TinkerPatch.with().reflectPatchLibrary();

向后台请求补丁升级配置

向后台获取是否有补丁包更新,默认的访问间隔为3个小时,若参数immediatelytrue,即每次调用都会真正的访问后台是否有更新。

TinkerPatch.with().fetchPatchUpdate(false);

如果希望补丁更新更加及时,可以在APP启动或用户登录等一些关键路径,使用fetchPatchUpdate(true)强制检查更新,即:

TinkerPatch.with().fetchPatchUpdate(true);

可以通过以下方法,设置访问的时间间隔,单位为小时。若为-1,即禁止以后都不再请求后台补丁更新。

TinkerPatch.with().setFetchPatchIntervalByHours(1);

向后台请求在线参数配置

向后台请求在线参数配置,默认的访问间隔为3个小时,若参数immediatelytrue,即每次调用都会真正的访问后台是否有更新。

TinkerPatch.with().fetchDynamicConfig(false);

我们也可以通过以下方法,设置访问的时间间隔,单位为小时。若为-1,即禁止以后都不再请求后台在线配置更新。

TinkerPatch.with().setFetchDynamicConfigIntervalByHours(1);

设置渠道相关信息

设置应用当前的渠道号,若设置具体的渠道号后,我们可以使用后台条件控制渠道更新。

TinkerPatch.with().setAppChannel("default");

设置渠道号之后,我们也可以对补丁过滤某些掉渠道号,例如GooglePlay或者使用了360加固的:

TinkerPatch.with().addIgnoreAppChannel("googleplay");
TinkerPatch.with().addIgnoreAppChannel("360");

更新客户端灰度条件

TinkerPatch平台支持根据条件下发补丁,我们可以对客户端设置条件属性:

TinkerPatch.with().setPatchCondition("name", "simsun");

设置的条件数量并不会限制,默认在SDK已经集成以下几个条件:

条件 描述
wifi 网络是否为wifi, 1为是,0为否
sdk Build.VERSION.SDK_INT, Android SDK version
brand Build.BRAND
model Build.MODEL
cpu Build.CPU_ABI

若使用了setAppChannel方法,会增加channel这一条件。

设置补丁生效策略

TinkerPatch SDK 默认在补丁合成成功后,等应用的主进程重新启动时生效。若我们希望用户可以尽快的生效,可以指定用户锁屏时自动重启应用:

// 默认为false
TinkerPatch.with().setPatchRestartOnSrceenOff(true);

// 假设也不想在锁屏的时候重启,例如弹出对话框咨询。可以采取自定义回调接口:
TinkerPatch.with().setPatchResultCallback(new ResultCallBack() {
        @Override
        public void onPatchResult(PatchResult patchResult) {
            Log.i(TAG, "onPatchResult callback here");
        }
});

设置补丁回滚策略

TinkerPatch 平台支持已经发布补丁的回滚,若我们发现已经发布的补丁出现问题,可以通过发布新补丁或者回滚补丁的方式挽救(注:可以通过删除整个appVersion的空间来达到回滚的目的,或者发布新的补丁,这里暂不支持删除某个特定的Patch)。默认我们是等应用主进程重新时删除补丁,若我们希望用户可以尽快的生效,可以指定用户锁屏时自动回滚补丁:

// 默认为false
TinkerPatch.with().setPatchRollbackOnScreenOff(true);

// 假设也不想在锁屏的时候回滚,例如弹出对话框咨询。可以采取自定义回调接口:
TinkerPatch.with().setPatchRollBackCallback(new RollbackCallBack() {
    @Override
    public void onPatchRollback() {
        Log.i(TAG, "onPatchRollback callback here");
    }
});

获取补丁版本号

在TinkerPatch SDK 1.1.4 增加的接口,获取当前补丁版本号。

TinkerPatch.with().getPatchVersion();

定制加载器模块

TinkerPatch SDK 1.1.7 在TinkerPatch的builder中增加了传入定制加载器的接口public TinkerPatch.Builder requestLoader(RequestLoader requestLoader)现已支持Okhttp和Okhttp3的加载器。

下面已Okhttp3为例,简述使用方法,Okhttp使用只需把相应的Okhttp3更改为Okhttp即可:

(1)添加项目dependencies中添加依赖

compile("com.tinkerpatch.sdk:tinkerpatch-okhttp3-loader:${TINKERPATCH_VERSION}")

(2)在初始化TinkerPatch时,使用builder并传入相应的requetsLoader,代码片段如下:

TinkerPatch.init(  
new TinkerPatch.Builder(tinkerApplicationLike)
    .requestLoader(new OkHttp3Loader())
    .build()
)

(3)其中OkHttp3Loader的构造函数也可直接传入自己App其他api使用的OkHttpClient,已达到复用同一个httpClient的目的。

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/29/tinkerpatch-sdk-api/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
TinkerPatch SDK API
SDK 所有的 API 都位于TinkerPatch.java中,可以参考 TinkerPatch 中的Sample 初始化 SDK 初始化 SDK 有两个接口,推荐使用默认接口 默认接口(推荐使用) //接……
<<上一篇
下一篇>>
文章目录
关闭
目 录