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个小时,若参数immediately
为true
,即每次调用都会真正的访问后台是否有更新。
TinkerPatch.with().fetchPatchUpdate(false);
如果希望补丁更新更加及时,可以在APP启动或用户登录等一些关键路径,使用fetchPatchUpdate(true)
强制检查更新,即:
TinkerPatch.with().fetchPatchUpdate(true);
可以通过以下方法,设置访问的时间间隔,单位为小时。若为-1
,即禁止以后都不再请求后台补丁更新。
TinkerPatch.with().setFetchPatchIntervalByHours(1);
向后台请求在线参数配置
向后台请求在线参数配置,默认的访问间隔为3个小时,若参数immediately
为true
,即每次调用都会真正的访问后台是否有更新。
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全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论