前段时间国家新闻出版广电总局发布通知,要求新浪微博按照有关规定,对视听节目服务进行全面整改。昨日,新浪微博官方发布公告:使用微博账号传播电影、电视剧,应当具有《电影片公映许可证》或《电视剧发行许可证》。将关闭超过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 添加:
参数说明:
创建 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,再次打开,查看结果。就这样,整个热修复的流程就完成了。
注意:一定要关闭后打开,热修复才会生效。