专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
开发者全社区  ·  外卖「智取生辰纲」越来越多 ·  12 小时前  
开发者全社区  ·  百人相亲大会的女生们 ·  15 小时前  
开发者全社区  ·  35岁的三无空姐 ·  17 小时前  
开发者全社区  ·  月薪八万的中金员工被祭旗了 ·  2 天前  
鸿洋  ·  彻底掌握 Android14 Vsync 原理 ·  2 天前  
51好读  ›  专栏  ›  郭霖

Android热修复——Tinker

郭霖  · 公众号  · android  · 2017-06-29 08:00

正文

今日科技快讯

前段时间国家新闻出版广电总局发布通知,要求新浪微博按照有关规定,对视听节目服务进行全面整改。昨日,新浪微博官方发布公告:使用微博账号传播电影、电视剧,应当具有《电影片公映许可证》或《电视剧发行许可证》。将关闭超过15分钟以上的长视频上传功能。

作者简介

本篇是 带心情去旅行 的第四篇投稿, 介绍了如何使用热修复框架Tinker,希望能够帮助到大家。

带心情去旅行 的博客地址:

http://www.jianshu.com/u/769d3d3a9d4b

前言

不知你是否遇到这样的情况?千辛万苦上开发了一个版本,好不容易上线了,突然发现了一个严重bug需要进行紧急修复,怎么办?难道又要重新打包App、测试,发布新个版本?就为了修改一两行的代码?

莫慌,这种问题其实可以分分钟解决。如果你学会了这项黑科技——热修复。在用户使用App的时候,不知不觉,这个Bug就被修复了。

热修复: 热修复(也称热补丁、热修复补丁,英语:hotfix)是一种包含信息的独立的累积更新包,通常表现为一个或多个文件。这被用来解决软件产品的问题(例如一个程序错误)。——维基百科

本文介绍了Tinker的接入方式,更加详细的内容可以查阅 官方文档:

http://tinkerpatch.com/Docs/SDK

介绍

Tinker 是微信官方的Android热补丁解决方案,它支持动态下发代码、so库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用 Tinker 来更新你的插件。Tinker 所支持的功能如下:

Tinker 热补丁方案·不仅支持类、So以及资源的替换,它还是 2.X-7.X 的全平台支持。

接入

额,我是说进入正题

在项目的 build.gradle 中:

然后在 app 的 gradle 文件 app/build.gradle 中:

在app目录下,创建 tinkerpatch.gradle(可以去后面的链接下载源码,把这个文件拷进去)

将 TinkerPatch 相关的配置都放于 tinkerpatch.gradle 中,然后在 app 的 gradle 文件 app/build.gradle 中还添加:

apply from: 'tinkerpatch.gradle'

完整的 app/buidl.gradle:

配置参数

打开之前创建的 tinkerpatch.gradle 添加:

参数说明:

  • bakPath: 基包路径

  • baseInfo: 基包文件夹名(打补丁包的时候,需要修改)

  • appKey: 进入官网注册一个账号,新增APP,得到对应的appKey。

使用

创建 FetchPatchHandler 用于检测是否更新(刚打开时会检测一次):

创建 MyApplication 初始化(reflectApplication = true 时)

注意: 初始化的代码建议紧跟 super.onCreate(),并且所有进程都需要初始化,已达到所有进程都可以被 patch 的目的

如果你确定只想在主进程中初始化 tinkerPatch,那也请至少在 :patch 进程中初始化,否则会有严重的 crash 问题

打生产包

每次开发完成后,开始打包。打开 Studio 右侧的 Gradle,选择 assemableRelease 打正式包

完成后可以在文件夹 build 中找到生成的文件(这里称为基包)

打开 build -> bakApk -> app-1.0.0-0330-21-40-52 (根据时间命名)。release 文件夹中会出现我们刚打完的包。一个apk,对应一个txt文件。

将apk安装到手机上,这是一个刚创建的项目,里面只有Hello World

将app-1.0.0-0330-21-40-52备份,打补丁包的时候需要用到。多渠道打包时会根据渠道名分包,目录结构相似。

生成补丁包

这里模拟一个修补bug的场景,发一个热补丁,弹一个Toast。 注意:在打生产包的代码上做修改

Toast.makeText(this, "这是个补丁", Toast.LENGTH_SHORT).show();

将之前的备份好的基包复制到 build/bakApk 下,打开 tinkerpatch.gradle 修改 baseInfo 成对应的文件名

修改 tinkerpatch.gradle 中的 tinkerpatchSupport -> appVersion

完成后打开 Gradle,如下选择 tinkerPatchRelease

补丁包将位于 build/outputs/tinkerPatch 中,这里只需要用到patch_signed_7zip.apk

发布

最后,只需要将刚生成的补丁包发布,然后静静等待即可。

进入官方网站( http://tinkerpatch.com/Apps/index ),选择对应的app,添加APP版本

版本号对应 tinkerpatch.gradle 中的 appVersion

选择 patch_signed_7zip.apk 文件,提交即可(更多下发选项,参考官方文档)

提交后,查看补丁的下载数量以及成功应用数

这时候重新打开app,等待补丁下载。下载完成后关闭app,再次打开,查看结果。就这样,整个热修复的流程就完成了。

注意:一定要关闭后打开,热修复才会生效。

关于兼容多渠道包







请到「今天看啥」查看全文