前言
Tencent 开源 "Tinker--微信Android热补丁方案" 已经很长时间了,无奈自己太懒了,一直没有时间去尝试一下。最近公司准备开新项目,我准备接入这个热修复框架,这样能够及时去处理App中在使用过程产生的Bug问题,而不必为了处理一个Bug问题去更新一个新的版本。正式使用之前,自己先搞了一个Demo去尝试。在使用的过程中也遇到的了很多问题,故记录下来。废话不多说,开干。
接入指南
关于 Tinker 的介绍,以及与其它热修复框架的比较,这里就不多说了,不熟悉的可以查看Github上Tinker的Wiki,官方有详细解释。下面是网址:https://github.com/Tencent/tinker/wiki,但是我感觉官方的接入指南写的还不是很详细,也许是我比较菜的原因吧。
gradle接入
gradle是推荐的接入方式,在gradle插件tinker-patch-gradle-plugin中我们帮你完成proguard、multiDex以及Manifest处理等工作。
添加依赖
首先在项目的build.gradle中,添加tinker-patch-gradle-plugin的依赖:
然后在app的build.gradle中,添加Tinker的库依赖:
注意:TINKER_VERSION代表的是版本号,需要我们在gradle.properties文件中添加。当我们项目中多次使用这个TINKER_VERSION版本号时,如果需要修改此版本号,那么只需要修改gradle.properties的配置即可,简单方便。
app/build.gradle文件修改
完成上面两步后,个人建议,将tinker中tinker-sample-android的app/build.gradle拷贝到自己项目中的app/build.geadle中。因为配置热修复还是很麻烦的,需要你对gradle的知识有一定的了解,大牛可以随意。即使是拷贝示例中的的内容,也是需要修改的。
-
修改tinkerId的值--否则会报错:tinkerId is not set!!!(建议tinkerId的值与versionName一致即可)
-
将忽略警告设置为true:
配置签名文件:
API引入
接下来就是处理Application文件,tinker建议编写一个ApplicationLike的子类,你可以当成Application去使用,注意顶部的@DefaultLifeCycle(),其Application的属性,会在编译期生成一个SimpleTinkerInApplication类:
接着在清单文件中配置编译器生成的Application,以及添加对sd卡的读写权限,因为在加载补丁包时,需要读取补丁包。如果你是6.x以上的系统,自己添加上授权代码,或者手动在设置页面打开SDCard读写权限。
<application
android:name=".SimpleTinkerInApplication"
...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然后我们在Activity中添加一个Load patch的Button,添加一个点击显示Toast的按钮。点击Load Patch按钮时,加载补丁包,成功补丁包后会修改动态修改Toast显示的内容。(注意:这里只是测试,正式项目中建议参考官方示例,在Service中加载补丁包)
接着我们直接将项目运行到手机上,此时会生成Apk文件,找到如下图所示文件:
patch生成
修改app/build.gradle文件,如上图所示。接着修改Toast要显示的内容。使用tinkerPatchDebug生成差异包,也就是补丁包。可以使用命令,也可以使用android studio的工具,如图:
下面就是生成差异包的位置,将该差异包导入sd中,(该差异包名字可以自定义,只要对应即可)。
点击Load Patch按钮,停留片刻,程序会自动退出。重新进入程序,点击显示Toast的按钮,就会发现Toast显示的内容已改变。效果图:
以上就是使用Tinker热修复框架的过程,源码地址:https://github.com/ListenerGao/TinkerDemo
文章首发地址:http://blog.csdn.net/listeners_Gao/article/details/60782235 转载请标明出处。