热修复技术的实践之旅——微信TinkerPatch热修复结合Walle多渠道打包的详解

  • 时间:
  • 浏览:1
  • 来源:大发彩神IOS下载_大发神彩IOS下载官方

(偷偷告诉你:其实现在最好的热修复方案,是阿里2017年6月份发布的新一代非侵入式Android热修复方案——Sophix,不过当时人是在去年上三天 就开使英语 使用热修复技术了,所以那会市面上的热修复技术,相较而言,Tinker是最优的选者,为社 让也经过了当时人实际项目中的使用,所以我其实亲戚亲戚大伙在项目中是因为还越来越 使用过热修复,那Tinker是很不错的选者,毕竟Tinker 已运行在微信的数亿 Android 设备上。对于阿里的Sophix,有兴趣的研究的亲戚大伙们,推荐亲戚亲戚大伙能必须去研读《Android热修复技术原理》)

到此,接入Tinker就完成了。实际项目中,咱们的应用肯定是要在各大应用市场上线的,越来越 肯定要打多个渠道包,按照常规,亲戚亲戚大伙是采用productFlavors实现的。假设项目要打10个渠道包,越来越 得针对每个渠道包,分开打10个补丁包,这显然是不合理的。针对你你并不是 需求,Tinker官方给亲戚亲戚大伙提供了多渠道打包的方案,如下图:

realease_patch.png

3、关于虚拟机Dalvik

image.png

本文参考:

Tinker源码TinkerPatch 接入及平台使用文档Android 热修复 Tinker接入及源码浅析—hongyangMultiDex与热修复实现原理Tinker加入Walle多渠道打包

Error:Execution failed for task ':app:preDebugAndroidTestBuild'.

Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

所以我今天要介绍的所以官方推荐的并不是方案:使用walle实现多渠道打包。

project-structure.png

Tinker将old.apk(也所以下面要讲到的基准包,上线发布时的APK)和new.apk,进行对比,得到patch.dex,为社 让程序通过在代码中加入初始化tinker的代码,能必须实现在程序的以前加载patch.dex(补丁文件),为社 让patch.dex与本机APK的classex.dex合并,生成新的classes.dex。运行时通过反射将合并后的dex文件放置在加载的dexElements数组的前面。运行时替代的原理,其实和Qzone的方案差过多,详细不会去反射修改dexElements。

baseapk.png

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstalling apk.

apkFileNameFormat:定制渠道包的APK的文件名称, 默认值为'${appName}-${buildType}-${channel}.apk'

可使用以下变量:

image.png

(1) 看看传统的App升级更新流程:

2、Android JVM的运行过程

使用Tinker的是因为:

image.png

①生成所有渠道的渠道: gradlew clean assembleReleaseChannels

②生成某4个渠道:gradlew clean assembleReleaseChannels -PchannelList=baidu

③生成指定的多个渠道包 ./gradlew clean assembleReleaseChannels -PchannelList=baidu,xiaomi

Tinker热补丁方案不仅支持类、So 以及资源的替换,它还是2.X-7.X的全平台支持。利用Tinker亲戚亲戚大伙不仅能必须用做 bugfix,甚至能必须替代功能的发布。Tinker 已运行在微信的数亿 Android 设备上,越来越 为哪几种你不使用 Tinker 呢?

image.png

ART模式与Dalvik模式最大的不同在于,在启用ART模式后,系统在安装应用的过不会进行一次预编译,在安装程序不会先将代码转换为机器语言存储在本地,所以在运行程序时就不需要每次都进行一次编译了,执行传输速率也大大提升。

apkOutputFolder:指定渠道包的输出路径, 默认值为new File("${project.buildDir}/outputs/apk")

image.png

适用于所有渠道的补丁包的位置如下:

walle_build_apk_sucessful.png

1、关于Dex

Dex是Android平台上可执行文件的类型,是能必须在Dalvik虚拟机上直接运行的文件格式。Java源代码经过ADT的错综复杂编译后转上加Dex文件,这是4个逐步优化的过程。Dex文件的指令码所以Dalvik虚拟机专有的一套指令集,相比标准java的.class文件,它体积小,运行传输速率高。

③为了简单方便,亲戚亲戚大伙将 TinkerPatch 相关的配置都放于tinkerpatch.gradle中, 亲戚亲戚大伙需用在app的build.gradle中将其引入:

image.png

②app的build.gradle中上加TinkerPatch的SDK依赖:

image.png

4、关于ART模式

ART模式英文全称为:Android runtime,谷歌Android 4.4系统新增的并不是应用运行模式,与传统的Dalvik模式不同,ART模式能必须实现更为流畅的安卓系统体验。

Android系统是以Linux系统为底层构建的。谷歌为了降低应用的开发难度在Linux底层之上构筑了4个名为“Dalvik”的虚拟机。

是因为Dalvik虚拟机的趋于稳定,Android系统的开发者只需使用谷歌提供的SDK(软件开发工具包)即可较为轻松的按照一套“规则”创建APP,不需要顾忌硬件、驱动等问题报告 ,在每次执行应用的以前Dalvik虚拟机不会将程序的语言由高级语言编译为机器语言,所以当前设备都都里能不能运行你你并不是 应用。

logcat.png

(1)多渠道APK的发布:

每次上线时,只需用执行里边生成渠道包的命令,打出多个渠道的APK即可,将各个渠道采集到各个应用市场即可。根据项目需求,能必须通过获取渠道信息,进行渠道统计。切记每次发布新版本时,一定要备份好bacApk目录的文件,发布补丁的以前需用。是因为一旦丢失,就被抛弃了基准包的信息了,就无法打出相应基准包的补丁包了。

(2)补丁包的发布:

当线上APK老出bug需用修复时,在tinkerPatch.gradle中配置好你线上发布的基准包的信息(以前备份的基准包),使用tinkerPatchRelease打出补丁包,在TinkerPatch管理后台采集补丁。具体如上步骤6.

Build成功后的效果如下图:

你你并不是 错误是是因为在安装JDK时,会安装两次,一次安装JDK,一次安装jre,是因为第一次JDK的安装就是因为安装了4个jre,而安装时的提示会再次安装4个jre。所以在第二次安装jre时,先暂停,你需用将第一次安装JDK的目录下的4个/jre文件夹删掉,为社 让在安装所以jre,所以就能必须了。再重新执行walle打包的命令,就能成功打出多渠道包了。

(1)接入Tinker时,打包的以前老出以下错误com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:applicationLike must not be null.:是是因为你的 tinkerPatch.gradle中配置 reflectApplication = false,但有你在身边又越来越 相应的改造你的Application类。本文介绍的是不改造亲戚亲戚大伙的 Application 类接入Tinker,所以 配置应该为:reflectApplication = ture。

生成的多渠道包的目录如下图:

watch.png

bug修复不及时,用户体验差。

(2) 再看看热修复的开发流程,明显更加灵活。

image.png

配置基准包信息:

Walle(瓦力):是美团开源的Android Signature V2 Scheme 签名下的新一代渠道包打包神器,跟gradle打包不一样,walle是在APK Signature Block区块上加自定义的渠道信息来生成渠道包,从而提高了渠道包生成传输速率,能必须作为单机工具来使用,都都里能必须部署在HTTP服务器上来实时除理渠道包Apk的升级网络请求。 ---Walle的介绍

如上图,随着移动端业务错综复杂程度的增加,传统的APP更新流程显然无法满足业务和开发者的需求,无论是对于用户还是开发维护人员,过程过于繁琐,趋于稳定问题灵活。

主要趋于稳定以下哪几个弊端:

image.png

image.png

①工程的根目录的build.gradle中配置:

Tinker 是4个开源项目(Github链接),它是微信官方的 Android 热补丁除理方案,它支持动态采集代码、So 库以及资源,让应用都都里能在不需用重新安装的清况 下实现更新。

(2)多渠道打包时,老出下面错误

image.png

(3)Demo打开运行时,是因为提示下面问题报告 , Rebuild一下工程是因为将implementation 'com.android.support:appcompat-v7:26.1.0'改成 implementation 'com.android.support:appcompat-v7:27.1.1'即可:

(4)执行多渠道打包命令(如gradlew clean assembleReleaseChannels)时,若提示如下BUILD FAILED的信息,Rebuild一下工程再执行打包命令即可正常打包。

本文的核心内容介绍:

(1)对比当前市场上的热修复方案,对Tinker热修复方案进行了简单的介绍。

(2)详细讲解了微信Tinker的详细接入过程,文末提供了4个当时人写的非常轻量的Demo,能必须帮助开发者迅速实现当时人项目中热修复的接入,将热修复技术运用到真实的项目中,而不仅仅是Demo测试。

(3)加入了walle的多渠道打包方案,能迅速打出所以个渠道包。详细的介绍了真实项目上线时APK及补丁包的版本维护,怎么里能通过单个补丁包,修复多个渠道,进行热修复的实现方案。

(4)文章末尾总结了接入过程中是因为遇到的坑,及相应的除理方案,能帮助你无障碍的接入Tinker。以及简单的分享了你并不是 关于热修复技术方面需用储备的你并不是 技术知识。

④tinkerpatch.gradle将其放进跟build.gradle同一级目录即可,tinkerpatch.gradle中的详细配置如下。

本文详细Demo GitHub下载地址请戳:TinkerPatchDemo

当前市面的热补丁方案有所以,其中比较出名的有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。但它们都趋于稳定无法除理的问题报告 。其中AndFix是因为接入是最简单的4个(和Tinker命令行接入依据差过多),不过兼容性还是是有一定的问题报告 的;QZone方案对性能会有一定的影响,且在Art模式下老出内存错乱的问题报告 ;美团提出的思想方案主所以基于Instant Run的原理,兼容性比较好,但目前尚未开源。

热修复的几大优势:

image.png

add_patch_version.png

image.png

image.png

猜你喜欢

TCL液晶电视为什么连不上网,电脑和手机都能连上

 我来答换一换使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。追答追问你你是什么应该全部都是电视的大难题,有了你那个盒子的大难题吧扫描二维码下载展开

2020-02-20

手机连不上自己家的无线网 却能连接别人家的

无线路由器阻止了你的手机访问。打开连接了无线路由器的电脑,访问192.168.1.1(TP-link的默认地址),账号admin密码admin,登录路由器界面,在左侧有个“无线

2020-02-20

我的S4手机突然连不上wifi,以前一直能连上的wifi,现在总显示不在范围内,但是用其他手机就能连上

据您的描述,建议您:1.重新开关手机及无线设备2.设定-WLAN设置-点住必须删除的网络名称不松手-忘记/删除网络后重新搜索连接3.更换静态IP尝试4.算是离无线路由器距离过远

2020-02-20

您好!为什么手机在家里连不上WiFi,其它人都能连接上,而且在手机在别人家可连上,谢谢

展开完整性1.使用自带浏览器登录网页,观察是是否是时需正常打开链接。若难题依然处于,建议您携带购机发票、包修卡和手机到三星服务中心由工程师进行检测。4.若无效,请将手机关机重启

2020-02-20

以太坊(ethereum)技术开发相关资料

区块链开发(零)如可刚结束了了学习以太坊及区块链以太坊客户端介绍嘿,守护程序员!手把手教你写出智能合约"Hello,World"使用Remix编译和部署以太坊智能合约区块链技术

2020-02-19