Tinker是微信官方的Android热补丁解决方案。使用Tinker热修复比Sophix略麻烦,分2钟情况:
1 接入TinkerSDK,代码量会少一些,但是需要去Tinker Platform创建自己的应用,补丁文件会传入第三方平台,有费用标准,而且是间隔时间去平台查询补丁,更新有延时。
2 直接使用Tinker,代码量多,补丁文件保留在自己的服务器,每次有更新时能即时加载。
先介绍接入TInkerSDK的方式
1 在项目的build.gradle文件中加入
buildscript { repositories { jcenter() }
dependencies { // TinkerPatch 插件 classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.2.2" } }
2 在app的gradle中添加依赖
dependencies {
// 若使用annotation需要单独引用,对于tinker的其他库都无需再引用
provided("com.tinkerpatch.tinker:tinker-android-anno:1.9.2")
compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.2.2")
}
3 在app目录下,创建tinkerpatch.gradle 这是tinker的一些配置,可以去SDKdemo里赋值一份。
然后在app的build.gradle中引入
apply from: 'tinkerpatch.gradle'
介绍一些tinkerpatch.gradle中我们会用到几个参数
baseInfo:基包文件夹名(打补丁包的时候,需要修改,这个会在后面打补丁再介绍一次)
appKey:进入官网注册一个账号,新增APP,得到对应的appKey。
appVision:这个一定要保持app版本跟平台上编写的版本一致
4 在application类中初始化Tinker
注意tinkerpatch.gradle中reflectApplication 这个参数
reflectApplication = true 的情况
public class SampleApplication extends Application {
...
@Override
public void onCreate() {
super.onCreate();
// 我们可以从这里获得Tinker加载过程的信息
tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
// 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化SDK
TinkerPatch.init(tinkerApplicationLike)
.reflectPatchLibrary()
.setPatchRollbackOnScreenOff(true)
.setPatchRestartOnSrceenOff(true)
.setFetchPatchIntervalByHours(3);
// 每隔3个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
}
reflectApplication = false的情况为,接入 Tinker 而改造我们的 Application 类
@SuppressWarnings("unused")
@DefaultLifeCycle(application = "tinker.sample.android.app.SampleApplication",
flags = ShareConstants.TINKER_ENABLE_ALL,
loadVerifyFlag = false)
public class SampleApplicationLike extends DefaultApplicationLike {
@Override
public void onCreate() {
super.onCreate();
// 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化 SDK
TinkerPatch.init(this)
.reflectPatchLibrary()
.setPatchRollbackOnScreenOff(true)
.setPatchRestartOnSrceenOff(true)
.setFetchPatchIntervalByHours(3);
// 每隔3个小时(通过setFetchPatchIntervalByHours设置)去访问后台时候有更新,通过handler实现轮训的效果
TinkerPatch.with().fetchPatchUpdateAndPollWithInterval();
}
}
介绍两个api
如果你希望补丁更新更佳及时,可以在APP启动或用户登录等一些关键路径,使用 fetchPatchUpdate(true) 强制检查更新
TinkerPatch.with().fetchPatchUpdate(true);
TinkerPatch SDK 默认在补丁合成成功后,等应用的主进程重新启动时生效。若我们希望用户可以尽快的生效,可以指定用户锁屏时自动重启应用:
// 默认为false
TinkerPatch.with().setPatchRestartOnSrceenOff(true);
6 项目中添加权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
接下来演示一遍流程
1 将旧代码打包
打开Studio右侧的Gradle,选择assemableDebug打包
打正式包要注意配置签名
图片.png
完成之后如下
图片.png
修改baskApk的编号
图片.png
完成后打开Gradle,如下选择tinkerPatchDebug生成补丁包
图片.png
补丁的位置
图片.png
发布补丁
图片.png
看完上面的流程可以试一试
网友评论