一、概述
虽说热修复出了很长时间了,但由于项目和时间的原因,一直没有用到,这几天有时间,就做了简单的实现,至于为什么用腾讯的Thinker,一个理由就够了:亿万微信用户已经使用了Thinker!
出现热更新原因:不想每次更新app都下载一整个apk,就想能不能和游戏补丁一样,每次下载少量补丁就能完成更新操作,因此Thinker等一些框架就出现了;通过比较最新生成的apk和之前版本的apk,生成补丁,完成了这一功能;
二、实现
接入tinker目前给了两种方式,一种是基于命令行的方式,一种就是gradle的方式,本文用的第二种方式。
gradle接入
1.项目导入Android Studio后,要加入版本控制,并提交一次,不然会报错。
2.如果你自己定义了Application,那需要把Application中的实现都移到DefaultApplicationLike的子类中,本例中就是SampleApplicationLike。
3.然后Application是由Tinker自动生成的,只需要指明类名。本类中的类名是tinker.sample.android.app.SampleApplication
,然后别忘Manifest的Application加入name属性。
@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication", //application name to generate
flags = ShareConstants.TINKER_ENABLE_ALL) //tinkerFlags above
public class SampleApplicationLike extends DefaultApplicationLike
4.然后构件assembleDebug,会在bakApk文件下生成apk文件(记录下文件A)。然后运行到机子上,这里推荐使用真机作测试,这个就是有Bug的程序。
5.修复程序中Bug。
6.然后修改app/build.gradle,文件就是刚刚的文件A。
7.使用tinkerPatchDebug构建补丁,会生成patch—signed—7zip.apk补丁
8.将补丁patch—signed—7zip.apk放在机子的 /storage/sdcard0/ 目录下。(先配置adb环境变量)
adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/
9.修复Bug,重启,然后再测试。
三、结语
以后会发些自己写的文章,尽量通俗易懂,谢谢大家的观看!
感谢xinghongfei的例子
https://github.com/xinghongfei/Hello-Tinker