Android热更新(Tinker与walle结合使用)
最近项目上线,终于可以清闲一小段时间,但是为了提升技术总得给自己找点乐子干。(⊙v⊙)嗯,提升App逼格加个热更新吧!
项目中原来是区分渠道标示打包的,加入热更新是否要打多个补丁包? 一开始先研究Tinker,其原理我想懂行的人都清楚,无非就是应用了类加载方案,如果想使用热更新强烈推荐Tinker接入指南。
Tinker的使用方式如下,以gradle接入的release包为例:
- 每次编译或发包将安装包与mapping文件备份;
- 若有补丁包的需要,按自身需要修改你的代码、库文件等;
- 将备份的基准安装包与mapping文件输入到tinkerPatch的配置中;
- 运行tinkerPatchRelease,即可自动编译最新的安装包,并与输入基准包作差异,得到最终的补丁包。
1.忘记添加混淆代码
文章图片
2.忘记 loader中类必须放入主dex中
文章图片
通过Tinker首先我们打出基础包,注意保留基础包,然后我们开始多渠道打包。
美团带来的 新一代开源Android渠道包生成工具Walle
- 至于为什么选择Walle,我给大家看一张截图,如下:
文章图片
./gradlew clean assembleReleaseChannels
文章图片
接下来我们使用Tinker热修复各个渠道包 步骤一:修改基础包配置
通过上面步骤生成各个渠道包的同时,在build文件夹下,Tinker同样会给我们打出基础包,相信细心的读者在上一张截图里就会发现,bakApk文件夹里即是基础包相关的文件,同样,我们需要将这文件夹里的三个文件的名称填写到 app 的 build.gradle 类的 ext 这里,sync一下,(这里生成的基础安装包和 R文件以及release版本的mapping文件一定要自己保存好,因为每次打补丁包都需要用到这些文件作为基础文件,别弄丢了),如下图:
文章图片
build.gradle
步骤二:修复bug
修改项目的bug,demo这里只是增加一个textview控件作为热修复测试,如下图:
文章图片
修复bug测试
【Android热更新(Tinker与walle结合使用)】步骤三:打补丁包
1.点开 Android Studio的Gradle 界面,如下,双击 tinkerPatchRelease ,如下:
文章图片
Gradle Tinker
2.紧接着,Tinker 在build 文件夹下的 outputs 文件夹里面会生成我们需要的补丁文件,patch_signed_7zip.apk 就是我们所要的补丁包,如下:
文章图片
patch_signed_7zip.apk
当然,如果你想了解更多关于输出文件的情况,可以点开Tinker Wiki 的 输出文件详解。
步骤四:将补丁包拷贝到手机sdcard中测试
将步骤三生成的 tinkerPatch 文件夹下面的 patch_signed_7zip.apk 文件,拷贝出来,改成你的 MainActivity中加载的文件名字,demo这里叫TinkerPatch,将其拷贝到手机的sdcard中的myTinkerDemo 文件夹下,没有这个文件夹你就自己手动新建一个,下图带你回顾一下 MainActivity 的设置:
注意此处,测试和发布版本的不同:发布版本的补丁文件一般是通过网络下载下来,存放到sdcard中,再加载。
文章图片
MainActivity
步骤五:加载补丁
点击主页的加载补丁按钮,没加载之前如下界面,里面显示了当前app的渠道信息:
文章图片
发现新bug
点击加载补丁之后,锁屏或者杀死进程,再次进入demo,补丁已经加载出来,在渠道信息下面增加了一个文本,标识新bug已修复。如下:
文章图片
新bug已修复
小结,经过一天的折腾终于搞出来了,激动,哈哈哈哈哈,感觉逼格都提升了一个档次。我们只需要打一个补丁包出来,就可以热修复所有应用渠道上面的bug。
切记:你所有的努力只为遇到更好的自己!
推荐阅读
- 热闹中的孤独
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- 六月更新的......
- android|android studio中ndk的使用
- 2018年6月7日|2018年6月7日 日记
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库