微信热修复 tinker 及 tinker server 快速接入

博客: 安卓之家
掘金: jp1017
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917linux

来自unsplash的美图

当前热修复方案不少,今天研究了下微信的tinker,使用效果仍是不错的,配合tinker server服用更佳。下面介绍二者的使用,以便你们快速接入。android

tinker 接入指南

安装tinker gradle插件

1 在项目的build.gradle中, 添加tinker-patch-gradle-plugin的依赖git

buildscript {
    dependencies {
        classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5')
    }
}复制代码

2 而后在app的gradle文件app/build.gradle,咱们须要添加tinker的库依赖以及apply tinker的gradle插件.github

//apply tinker插件windows

apply plugin: 'com.tencent.tinker.patch'api

dependencies {
    //可选,用于生成application类
    provided('com.tencent.tinker:tinker-android-anno:1.7.5')
    //tinker的核心库
    compile('com.tencent.tinker:tinker-android-lib:1.7.5')
}复制代码

配置tinker task

配置基础包, tinkerid, dexMode等,详见gradle配置: tinker task 配置服务器

我作了以下修改:微信

1 修改tinkerid为版本号, 跳过了须要commit一次的坑:smile:网络

def getTinkerIdValue() {
    //版本做为id
    return android.defaultConfig.versionName
}复制代码

2 移动备份文件到/tinker/bakApk/下, 防止clean掉基础包文件app

3 重命名备份文件, 好比base-app-debug-v1.0.1-2016-1125.apk, 固然自动生成的是app-debug-v1.0.1-2016-1125.apk, 须要手动添加前缀做为基础包, 后面屡次编译不会把基础包覆盖掉, 也不会像官方demo里那样以秒命名产生不少文件...

4 修改tinker message 为 I am the patch apk-v版本号

5 修改patchVersion为版本号, 这个在tinker server须要

-configField("patchVersion", "1.0.7")
+configField("patchVersion", android.defaultConfig.versionName)复制代码

注意 里面有些修改的地方, 包名修改成你的包名等, 我用todo作了标记

生成 Application

若是你有Application类, 那么须要自定义一个DefaultApplicationLike, 让tinker帮你生成Application

正如项目里的public class SampleApplicationLike extends DefaultApplicationLike {

并对类添加注解, 好比添加以下注解:

@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication",             //application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL)复制代码

编译后, 会生成一个SampleApplication, 用这个做为你的Application, 写入清单文件

好了, tinker到这里就配置好了, 下面开始打补丁

打补丁包

1 命令行

打debug补丁: ./gradlew tinkerPatchDebug

打release补丁: ./gradlew tinkerReleaseDebug

这里须要注意, 命令在linux和mac下最好是./gradlew, 意思是当前项目的gradlew, 若是写成gradlew能够会去下载gradle等, 由于那是全局的, 好比AS2.2.2带的版本是2.14.1
而我如今的是最新版本3.2.1, 可输入./gradlew -vgradlew -v 查看
而windows就能够是gradlew

注意 debug和release配置的基包不一样, 和他们一一对应, 另外, release还须要配置mapping文件.

2 双击对应task

就是去gradle projects里找到对应task, 双击执行就能够, 以下图:

gradle

好比, 打debug补丁, 双击tinkerPatchDebug就能够了

下一次打补丁时就能够从快捷栏选择,而后点击右侧运行, 以下图:

patch

安装及卸载补丁

加载补丁

第二个参数是补丁包存放路径, 名称任意, 能够不以 .bak 结尾

TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), patchPath);

还能够自定义加载成功等交互, 请参考 SampleResultService, 别忘记添加进清单

清除补丁

当补丁出现异常或者某些状况,咱们可能但愿清空所有补丁,调用方法为:

Tinker.with(context).cleanPatch();

固然咱们也能够选择卸载某个版本的补丁文件:

Tinker.with(context).cleanPatchByVersion();

在升级版本时咱们也无须手动去清除补丁,框架已经为咱们作了这件事情。须要注意的是,在补丁已经加载的前提下清除补丁,可能会引发crash。这个时候更好重启一下全部的进程。

查看补丁是否加载

boolean isPatched = tinker.isTinkerLoaded();

tinker server 接入及使用

tinker server 提供tinker补丁包下发及监控等, 使用也是很简单

gradle 配置环境

1 gradle远程仓库依赖jcenter

repositories {
    jcenter()
}复制代码

2 再添加sdk库的dependencies依赖:

dependencies {
    compile("com.tencent.tinker:tinker-server-android:0.3.0")
}复制代码

3 在 TinkerPatch 平台中获得的 AppKey 以及 AppVersion,将他们写入 buildConfig 中:

好比:

buildConfigField "String", "APP_KEY", "\"f938475486f91936\""
buildConfigField "String", "APP_VERSION",  "\"3.0.0\""复制代码

平台连接: tinkerpatch.com

新增app后能够获得AppKey, 至于AppVersion, 就是补丁的版本, 我这里都是版本号, 能够参考这个issue: 关于AppVersion问题

4 清单配置网络及sd卡读写权限

  
 
   
    
   

 复制代码

代码初始化

TinkerServerManager.installTinkerServer(getApplication(), Tinker.with(getApplication()), 3);

后面的3表示每隔3小时请求一次服务器, 检查是否有更新包

请求更新补丁

1 主动请求更新

TinkerServerManager.checkTinkerUpdate(true);

2 获取新增参数

TinkerServerManager.getDynamicConfig(new ConfigRequestCallback() {...

下面来一个该demo的tinker server 截图:

tinker_server

参考

更多使用及问题请参考官方文档:

Tinker -- 微信Android热补丁方案

Tinker 接入指南

Tinker API概览

Tinker 自定义扩展

Tinker 常见问题

Tinker Platform 平台使用文档

代码就是Tinker官方示例,我作了一些修改,可点击这里查看: github.com/jp1017/tink…

最后,很是感谢您的阅读,有任何疑问,能够后面评论,谢谢!

神奇的安卓开发网站:androidcat.com/

安卓开源库收集整理:github.com/XXApple/And…

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是惟一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!

相关文章
相关标签/搜索