背景:因为公司安排的需求是让设备自动更新,更新只需要一行代码,而且我们公司的安卓设备不带触屏功能,所以只好写在activity的onCreate()中了,让设备重启第一次下载补丁包,第二次重启打开就成为新的app了。
本博客说明内容分为:接入、使用。
接入步骤:
一、Tinker平台注册账户,新增app、记录appKey,需要填入的版本号跟你app目前版本一致。
二、在gradle.properties 文件中写入 tinkerSDK的版本号 :
贴上代码:TINKERPATCH_VERSION=1.2.6
三、在工程的build.gandle 中 dependencies 节点下关联 TinkerPatch 插件:
贴上代码:
classpath ("com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:${TINKERPATCH_VERSION}") { changing = true }
四、在app的build.grandle文件中关联tinkerSDK和关联tinkerpatch.gradle.
贴入代码:
1. app的build.grandle的 dependencies {} 节点中:
compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:${TINKERPATCH_VERSION}") { changing = true }
2. app的build.grandle的根目录下:
apply from: 'tinkerpatch.gradle'
五、将 tinkerpatch.gradle 文件拷贝至自己的工程目录下的这个位置,并根据自身情况修改内容。
六、在项目结构中配置签名
七、自己的Application中加入初始化tinker的代码。
贴入代码:
@Override
public void onCreate() {
super.onCreate();
initTinkerPatch();
}
/**
* 我们需要确保至少对主进程跟patch进程初始化 TinkerPatch
*/
private void initTinkerPatch() {
// 我们可以从这里获得Tinker加载过程的信息
if (BuildConfig.TINKER_ENABLE) {
tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
// 初始化TinkerPatch SDK
TinkerPatch.init(
tinkerApplicationLike
// new TinkerPatch.Builder(tinkerApplicationLike)
// .requestLoader(new OkHttp3Loader())
// .build()
)
.reflectPatchLibrary()
.setPatchRollbackOnScreenOff(true)
.setPatchRestartOnSrceenOff(true)
.setFetchPatchIntervalByHours(3)
;
// 获取当前的补丁版本
Log.d(TAG, "Current patch version is " + TinkerPatch.with().getPatchVersion());
// fetchPatchUpdateAndPollWithInterval 与 fetchPatchUpdate(false)
// 不同的是,会通过handler的方式去轮询
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
}
}
在自己要刷新的地方贴入代码:
//向tinker平台请求刷新差异补丁包
TinkerPatch.with().fetchPatchUpdate(true);