社会养老保险新政策

usdt无需实名买卖(www.caibao.it):手艺干货 | 深度解构 Android 应用面临紧要发版时的救星方案

来源:三公开船 发布时间:2021-02-24 浏览次数:

USDT第三方支付API接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

原题目:手艺干货 | 深度解构 Android 应用面临紧要发版时的救星方案

简介: 关于 Android 热修复方案——DexPatch 的先容与使用说明

为了解决 Native 模块上线后的问题,mPaaS 提供了热修复功效,实现不公布客户端 apk 场景下的热修复。现在 Android 端热修复主要包罗 andfix 和 dexpatch,考虑到 andfix 的版本兼容性,现在主要推荐使用 DexPatch

DexPatch 修复原理比较简单,就是在启动后通过 RPC 拉取当前需要下发的 jar 包地址,然后通过自力历程去下载 jar 包文件,下载完成后保留。在二次启动的时刻 hook 系统的 classLoader,修改 DexPathList,在其数组的最前面加入一个有修悔改的 class 的 dex 文件,使其拦截住数组后面的 dex 文件中同名的 class 的加载。

如下图所示,classloader 就会优先加载 Patch.dex 中的 Ding.class,而忽略 Classes.dex 中的 Ding.class,达到了替换的效果。

基于这样的原理,DexPatch 具有以下特征:

  1. 兼容性上:由于是代理了系统的 ClassLoader,使用的黑科技较少,以是整体方案兼容性较好;
  2. 生效时效性上:只能在下载 patch 后重启后才气生效,不支持实时生效;
  3. 乐成率上:由于下载是使用的自力历程,减少了启动阶段主历程闪退对 patch 下载的影响,提升了下载的乐成比例。

操作说明

以下是关于在 mPaaS 下使用 DexPatch 模块的主要步骤以及问题排查思绪,利便开发者一样平常开发。

1. 触发 patch 拉取

启动阶段挪用 MPHotpatch.init(),主要触发 Patch 信息的 RPC 请求,若是掷中公布 Patch 公布规则,RPC 会返回 Patch 的 jar 包下载地址,客户端去触发下载,下载后保留在客户端私有目录/data/user/0/包名/dexpatch/patch/下。

2. 代码操作演示

以组件化模式接入为例,先容下 Patch 公布的主要流程。

(1)代码改动前

需要保留改动前的构建产物,利便后续做 Patch 天生,地址在:build/intermediates/bundle/xxxx-raw.jar

(2)代码改动后

重新编译,保留构建产物,产物地址:build/intermediates/bundle/xxxx-raw.jar

(3)天生白名单设置

主要用于热修复包时用于指定修复的类,设置文件为 .txt 花样,该设置文件应包罗并按顺序包罗以下信息:

需要 Patch 的类。以 L 开头,后跟以混淆后真实类名。若是多个类,每行只可写一个。示例:Lxxx.xxx.clazzX设置 Patch 类型为 dexpatch。示例:PatchType: dexpatch

设置是否是静态 Bundle。默以为 false,若是是静态链接的 Bundle,需要显式设置为 true。示例:HostDex: true(*现在 mPaaS 客户端的模块一样平常都在静态链接里,一样平常写 true)

(4)查看署名

天生 patch 需要用到项目的打包秘钥,需要提前准备好,可以在打包脚步下找到对应的设置

(5)天生 patch

① 通过 mPaaS 自带的 IDE 工具,点击热修复,进入修复页面。

② 根据页面提醒,填入之前准备的修复前和修复后的 jar 包地址,另有白名单设置文件,勾选 dexPatch,进入到下一步

③ 下一步主要选择打包的设置文件,最近点击完成天生 patch 文件

,

Usdt第三方支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

(6)天生 patch 产物

天生 patch 产物如下:

查看产物,可以使用 dex2jar 工具反解 diff.dex 文件,用 jd-gui 文件查看反解产物是否相符预期

反解后可以看到修改的模块:

(7)上传公布

① 选择上一步的产物 jar 包举行上传

② 上传后可以通过白名单举行公布,验证 patch 的稳定性

(8)验证下载

白名单公布后,启动客户端,搜索关键字:DynamicRelease,可以看到在 tool 历程有触发下载的日志打出。

这里需要说明的是,这里触发 patch 的下载是在 tool 历程,不在主历程的主要原因是怕由于主历程由于启动导致重复闪退,导致 patch 不能下载乐成,单独在 tool 历程实现下载,只管提高 patch 的下载乐成比例。

然后去下载目录查看,是否下载保留乐成,下载目录在:/data/user/0/包名/dexpatch/patch/20201023110012@20201023110012.jar

(9)杀历程启动

确认下载保留乐成后,杀掉 App,重启查看是否生效,重启可以搜索关键字:DexPatchManager,查看 patch 生效的日志,日志会打印当前是否存在 patch 以及 patch 是否加载的日志。

同时我们也可以就现实营业场景举行验证,查看是否生效。

常见问题

1. aar 模式集成后 patch 没生效

aar 模式集成的时刻,需要继续框架的 QuinoxlessApplication,指定 Application 为框架的实现类才气实现 dexpatch 的加载。QuinoxlessApplication 内主要封装了 dexpatch 模块的初始化和加载。

2. 使用加固后不生效

需要使用加固前的 apk 天生 patch,不能用加固后的包天生 patch。然后还需要验证在差别加固厂商下的兼容显示。

3. 使用热修复后,和 RPC 有关的挪用发生 apache http 相关的 crash。

请使用 Android 官网上的方式引入 apache http client,克制使用导入 jar 包或者 gradle implementation/compile 的方式导入 http client。否则会引起 classloader 加载类杂乱。

建议方式:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

E · N · D

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片