SDK API

SDK 所有的 API 都位于 TinkerPatch.java 中, 我们可以非常简单的使用起来,我们也可以参考 TinkerPatch 中的 Sample.

TinkerPatch 接口

1. 初始化 SDK

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

默认接口(推荐使用):

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

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

TinkerPatch.init(tinkerApplicationLike)
    //是否自动反射Library路径,无须手动加载补丁中的So文件 注意,调用在反射接口之后才能生效,你也可以使用Tinker的方式加载Library
    .reflectPatchLibrary()
    //向后台获取是否有补丁包更新,默认的访问间隔为3个小时,若参数为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。

自定义接口(谨慎使用):

若我们想自定义 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();

2. 重定向日志输出

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

TinkerPatch.setLogIml(imp);

3. 自动加载补丁的 Library

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

TinkerPatch.with().reflectPatchLibrary();

4. 向后台请求补丁升级配置

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

TinkerPatch.witch().fetchPatchUpdate(false);

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

TinkerPatch.witch().setFetchPatchIntervalByHours(1);

5. 向后台请求在线参数配置

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

TinkerPatch.witch().fetchDynamicConfig(false);

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

TinkerPatch.witch().setFetchDynamicConfigIntervalByHours(1);

6. 设置渠道相关信息

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

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

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

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

7. 更新客户端灰度条件

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这一条件

8. 设置补丁生效策略

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

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

设若我们也不想在锁屏的时候重启,例如弹出对话框咨询。可以采取自定义回调接口:

TinkerPatch.with().setPatchResultCallback(new ResultCallBack() {
        @Override
        public void onPatchResult(PatchResult patchResult) {
            Log.i(TAG, "onPatchResult callback here");
        }
});

9. 设置补丁回滚策略

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 常用的 API,若有更多的疑问,欢迎随时咨询我们。

TinkerPatch.com © 2017 Github开源 | 联系我们