TinkerPatch SDK API

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

初始化 SDK

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

默认接口(推荐使用)

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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提供的默认实现,可采用以下接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 接口定义
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获得实例

1
TinkerPatch tinkerPatch = TinkerPatch.with();

重定向日志输出

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

1
TinkerPatch.setLogIml(imp);

自动加载补丁的 Library

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

1
TinkerPatch.with().reflectPatchLibrary();

向后台请求补丁升级配置

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

1
TinkerPatch.with().fetchPatchUpdate(false);

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

1
TinkerPatch.with().fetchPatchUpdate(true);

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

1
TinkerPatch.with().setFetchPatchIntervalByHours(1);

向后台请求在线参数配置

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

1
TinkerPatch.with().fetchDynamicConfig(false);

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

1
TinkerPatch.with().setFetchDynamicConfigIntervalByHours(1);

设置渠道相关信息

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

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

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

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

更新客户端灰度条件

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

1
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 默认在补丁合成成功后,等应用的主进程重新启动时生效。若我们希望用户可以尽快的生效,可以指定用户锁屏时自动重启应用:

1
2
3
4
5
6
7
8
9
10
// 默认为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)。默认我们是等应用主进程重新时删除补丁,若我们希望用户可以尽快的生效,可以指定用户锁屏时自动回滚补丁:

1
2
3
4
5
6
7
8
9
10
11
// 默认为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 增加的接口,获取当前补丁版本号。

1
TinkerPatch.with().getPatchVersion();

定制加载器模块

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

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

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

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

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

1
2
3
4
5
TinkerPatch.init(  
new TinkerPatch.Builder(tinkerApplicationLike)
.requestLoader(new OkHttp3Loader())
.build()
)

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

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :