Android热修复之Tinker
来源:互联网 发布:开源财务系统 php 编辑:程序博客网 时间:2024/05/22 04:43
转载请标明出处:http://blog.csdn.net/listeners_Gao/article/details/60782235
前言
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
- Android热修复之Tinker
- Android热修复 Tinker
- Android热修复Tinker
- android 热修复 Tinker
- Android Tinker热修复
- Android热修复之Tinker使用初探
- Android热修复之Tinker接入流程
- Android 热修复(一) 之 Tinker
- Android 热修复 Tinker接入
- Android 热修复 Tinker 接入
- Android热修复之微信Tinker使用初探
- Android 热修复 Tinker 源码分析之DexDiff / DexPatch
- 热修复之Tinker 开源库Demo测试
- Android热修复-微信Tinker
- Android 热修复框架 Tinker ( 一 )
- Android 热修复框架 Tinker ( 二 )
- Android 热修复框架 Tinker ( 三 )
- android热修复框架Tinker(一)
- (转载)c++实现反射机制
- 解决js动态改变dom元素属性后页面及时渲染问题
- JAVA学习之this,static,String常用方法
- [编程题]序列和
- 474. Ones and Zeroes
- Android热修复之Tinker
- 购物车项目总结
- java中泛型的使用
- 简单小结一下关于JavaScript中的闭包
- adnroid.appwidget.AppWidgetProvider
- 排序总结(java版本)
- 【AngularJS】使用ng-repeat中$index的注意点
- RabbitMQ官网教程3——发布订阅
- 在(2~100)找到不大于X的最大质数