Android热修复,精简学习

news2024/11/27 4:36:42

接入热修复

接入热修复流程如下:

  1. 配置开发环境
  2. 在控制台创建应用
  3. 在客户端创建新工程
  4. 签名
  5. 配置加密信息
  6. 编写代码
  7. 发布带有热修复功能的客户端版本

配置开发环境

在控制台创建应用

在控制台创建 mPaaS 应用。此时,本地还没有带签名的 APK,因此在下载配置文件时,可以暂不上传 APK。

下载的配置文件的文件名示例:Ant-mpaas-4111111111005-default-Android.config。

在客户端创建新工程

接入流程 在客户端创建 基于 mPaaS 框架 的新工程,并确保使用 mPaaS > Build 成功构建工程。

说明

在添加 SDK 时,需要确保勾选了下图中的 HOTFIX 和 RPC。

签名

签名是为了下一步配置加密信息做准备。

在 Android Studio 中打开 Portal 工程,然后 Android 官网文档 给应用签名,并生成带签名的 APK。

签名步骤如下:

  1. 生成密钥和密钥库。若已有密钥库,则可忽略此步骤。
  2. 在 Android Studio 中打开 Portal 工程,点击 Build > Generate Signed APK,然后点击 Create new。

  1. 完善相关信息,然后点击 OK。您需要记住此处填写的信息,以便在后续操作中使用。

  1. 生成带签名的 APK。
  2. 选择密钥库,填写相关信息,然后点击 Next:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epPyPEoy-1669814360273)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c50bfdd6b66c412abde7642ef52304d6~tplv-k3u1fbpfcp-zoom-1.image)]

  1. 如下图完善相关信息,然后点击 Finish;等待片刻,即可生成带签名的 APK。 说明
  • Signature Versions 中 V1(Jar Signature) 必须勾选,V2(Full APK Signature) 可按需勾选。
  • 带签名的 APK 将保存在 {APK Destination Folder}/{Build Type} 目录下。在下图的示例中,保存目录为 /Users/archer.zb/AndroidStudioProjects/Tutorials/Hotpatch/app/debug/。

  1. 在代码中增加签名配置。配置完成后,build.gradle 示例如下: signingConfigs { release { keyAlias ‘keyAlias’ keyPassword ‘keyPassword’ storeFile file(‘/Users/archer.zb/Desktop/hotpatch/keystore.jks’) storePassword ‘storePassword’ } debug { keyAlias ‘keyAlias’ keyPassword ‘keyPassword’ storeFile file(‘/Users/archer.zb/Desktop/hotpatch/keystore.jks’) storePassword ‘storePassword’ } }

配置加密信息

为了保证客户端获取热修复包过程的安全,需要对网络内容进行加密。配置加密信息的步骤如下:

  1. 到控制台重新下载配置文件。 登录 mPaaS 控制台 后,进入 总览 > 下载 Android 代码配置 > 代码配置 页面,上传上一步生成的带签名 APK,并再次下载配置文件。此时,将下载到 .zip 压缩包。
  2. 解压 .zip 包,用其中的 Ant-mpaas-xxx-xxx-Android.config 文件替换 Portal 工程主 module 中的同名文件。 重要 替换后的 base64Code 的值一定非空。

  1. 删除 Portal 工程主 module src/main/res/drawable 中的 yw_1222.jpg 图片:

  1. 分别重新构建 Bundle、Portal 工程。

编写代码

至此,热修复就已经接入,您可以根据业务需求编写代码。

示例按钮

说明

下方示例为体验热修复功能的示例代码,以便您在发布前体验热修复功能。

为了体验热修复,您可以在 Bundle 工程的界面中增加两个按钮:

  • Toast:该按钮对应的代码存在 Bug,点击会造成应用崩溃。
  • Hotfix:在控制台发布热修复包后,点击该按钮,触发热修复;重启应用后,Toast 按钮对应的代码 Bug 将被修复。

示例代码

对应的布局代码如下:

<Button
    android:id="@+id/toast"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Toast" />
​
<Button
    android:id="@+id/hotfix"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hotfix" />

对应的 Java 代码如下:

findViewById(R.id.toast).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    // 按钮点击时,先做除法运算,再通过弹出框显示计算结果
    int result = 1/0; // 除数为 0,是个 bug,会导致应用崩溃
    Toast.makeText(getApplicationContext(), "result = " + result, Toast.LENGTH_SHORT).show();
  }
});
​
findViewById(R.id.hotfix).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    // 按钮点击时,触发热修复
    // SDK 版本 ≥ 10.1.32 时,调用如下接口:
    MPHotpatch.init();
  }
});

加入示例代码后,重新构建 Bundle 与 Portal 生成的 APK 即可。体验热修复过程详见下方的 热修复 Bug 演示。

发布带有热修复功能的客户端版本

在编写完客户端代码后,即可将生成的 APK 发布至应用平台,以便 App 用户可下载更新。

热修复 Bug 演示

热修复 Bug 的示例流程如下:

  1. 备份 Bug 版本构建生成的 .jar 包
  2. 修改 Bug 代码,生成热修复包
  3. 在控制台添加并发布热修复包
  4. 客户端调用触发热修复的接口,进而获取热修复包
  5. 应用重启后,触发热修复,Bug 被修复

备份 Bug 版本构建生成的 .jar 包

生成热修复包时,需要新老版本(即 Bug 版本和修复后的版本)的构建结果。因此,首先需要备份 Bug 版本构建生成的 .jar 包。

.jar 包路径:

  • 若构建 debug 包,则为 Bundle 主 module 下的 build/intermediates/bundle/xxxx-raw.jar。
  • 若构建 release 包,则 .jar 包名称没有 -raw 后缀。示例:

修改 Bug 代码

修改 Bug 代码,并重新构建工程。对应上文示例,可将除数改成 1:

生成热修复包

在 Android Studio 中,使用 mPaaS > Generate Hotpatch 功能生成热修复包:

  • New bundle:修改代码 Bug 后,重新构建生成的 .jar 包。
  • Old bundle:备份的 Bug 版本构建生成的 .jar 包。详见上文 备份 Bug 版本构建生成的 .jar 包。
  • 白名单(可选):用于指定修复的类的配置文件,.txt 格式,该配置文件的编写规则见 白名单配置文件编写规则。使用原生 AAR 工程和 mPaaS Inside 工程时强烈推荐使用该功能。
  • Patch file dir:热修复包的保存路径。该路径下将会生成很多文件,后续有用的是 .jar 文件:

  • 是否使用 DexPatch:建议勾选。

在控制台添加并发布热修复包

添加热修复包

  1. 进入mPaas 控制台 > 实时发布 > 热修复管理 页面。
  2. 点击 添加热修复,然后完善相关信息,并点击 确定。

创建发布

  1. 如下图,点击 创建发布。

  1. 选择发布类型等,然后点击 确定 即可完成发布。更多信息,参见 热修复管理。

App 触发热修复

  1. 打开 Android Studio Logcat,关键词填写 DynamicRelease,过滤器选择 No Filters。

  1. 确保手机连接 Android Studio,然后打开手机上安装的 Bug 版 App,点击 Hotfix 按钮,可以看到如下日志:

  1. 关闭应用进程、重启应用后,点击 Toast 按钮,可以正常看到弹出框,说明 Bug 已被修复。

说明

若热修复未生效,且日志中出现 RPCException [7001] 异常,则说明签名错误。重复 签名 步骤,并确保:

  • Portal 工程主 module Ant-mpaas-xxx-xxx-Android.config 文件中的 base64Code 的值非空。
  • Portal 工程主 module build.gradle 文件中 signingConfigs 配置正确。

以上就是有关热修复技术,在Android开发中这类的核心技术还有很多。更多技术学习参考;可前往《Android核心 技术手册》里面内容包含30多个技术模块并分别制作成PDF文档。供大家方便学习!

文末

热修复:让应用能够在无需重新安装的情况实现更新,帮助应用快速建立动态修复能力。

早期遇到Bug我们一般会紧急发布了一个版本。然而这个Bug可能就是简简单单的一行代码,为了这一行代码,进行全量或者增量更新迭代一个版本,未免有点大材小用了。而且新版本的普及需要时间,以Android用户的升级习惯,即使是相对活跃的微信也需要10天以上的时间去覆盖50%的用户。使用热修复技术,能做到1天覆盖70%以上。这也是基于补丁体积较小,可以直接使用移动网络下载更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试:插件化相关---broadcastReceiver

实现原理 1 采用的模型 Android中的广播使用了设计模式中的观察者模式&#xff1a;基于消息的发布 / 订阅事件模型因此&#xff0c;Android将广播的发送者 和 接收者 解耦&#xff0c;使得系统方便集成&#xff0c;更易扩展 2 模型讲解 模型中有3个角色&#xff1a; 消息订阅…

小程序项目结构

pages 用来存放所有小程序的页面utils 用来存放工具性质的模块(例如:格式化时间的自定义模块)app.js 小程序项目的入口文件app.json 小程序项目的全局配置文件app.wxss 小程序项目的全局样式文件project.config.json 项目的配置文件sitemap.json 用来配置小程序及其页面是否允许…

【数据结构-查找】散列表

文章目录1 线性探测法1.1 查找成功时的 ASL1.2 查找失败时的 ASL1.3 散列表的装填因子 α2 拉链法1 线性探测法 1.1 查找成功时的 ASL 查找元素 47&#xff08;散列函数&#xff1a;3&#xff09;次数&#xff1a;1查找元素 7&#xff08;散列函数&#xff1a;11&#xff09;次…

云上办公便捷、安全,就用华为云桌面

云上办公便捷、安全&#xff0c;就用华为云桌面&#xff01; 根据IDC提出的“未来工作空间”的概念&#xff0c;未来工作空间意味着将打破时空与地域的限制&#xff0c;让员工随时随地工作。未来工作空间也将成为企业整体数字化转型战略中的必要组成部分。 恰逢其时&#xff0…

kubernetes Pod详解

文章目录Pod生命周期创建和终止pod的创建过程pod的终止过程初始化容器钩子函数容器探测重启策略Pod调度定向调度NodeNameNodeSelector亲和性调度NodeAffinityPodAffinityPodAntiAffinity污点和容忍污点&#xff08;Taints&#xff09;容忍&#xff08;Toleration&#xff09;Po…

【测试沉思录】19. 如何设置 JMeter 线程组?

作者&#xff1a;宋赟 编辑&#xff1a;毕小烦 最近有不少测试同学问我 JMeter 线程组如何设置并发的问题&#xff0c;发现很多人对线程组里的参数不是很清楚&#xff0c;今天就科普一下 JMeter 线程组的信息&#xff0c;也简单介绍一下不同场景的并发策略。 1. 线程组是什么 …

制作一个简单HTML游戏网页(HTML+CSS)米哈游 1页 带轮播图

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游戏官网 | 游戏网站 | 电竞游戏 | 游戏介绍 | 等网站的设计与制作 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 …

K3S +Helm+NFS最小化测试安装部署只需十分钟

作者&#xff1a;郝建伟 k3s 简介 官方文档&#xff1a;k3s 什么是k3s k3s 是一个轻量级的 Kubernetes 发行版 它针对边缘计算、物联网等场景进行了高度优化。 k3s 有以下增强功能&#xff1a;打包为单个二进制文件。 使用基于 sqlite3 的轻量级存储后端作为默认存储机制。…

【附源码】计算机毕业设计JAVA专利查询与发布系统设计与实现

【附源码】计算机毕业设计JAVA专利查询与发布系统设计与实现 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1…

BI数据分析

一 前言 数据分析一般需要掌握Excel、SQL&#xff0c;再强大的需要掌握python等。目前市面上的数据BI工具&#xff0c;就是用来优化复杂的数据分析过程&#xff0c;解放相关人员的生产力的&#xff0c;不再为了一个需求而漫长等待和重复多次沟通&#xff0c;从而让人员可以更多…

Echarts柱状图label优化历程

问题1 由于项目数据记录多或者数据值大的时候&#xff0c;会出现label重叠的现象&#xff0c;如下图。 解决方案 针对上述问题&#xff0c;解决思路如下&#xff1a; 1、求Y轴的最大值&#xff08;我们用Y轴的最大值&#xff0c;去计算每个柱子在整个图中的占比&#xff09;…

分布式文件系统

0.0 分布式文件系统 一般做法&#xff1a; 传统的模式是我们通过tomcat或者nginx&#xff0c;存放静态资源文件。 存在的问题&#xff1a; 单个节点会出现存不下的情况&#xff0c;需要多个节点。 分布式文件系统 需要一个系统来管理多个计算机节点上的文件数据&#xff…

[附源码]计算机毕业设计JAVA小锅米线点餐管理系统

[附源码]计算机毕业设计JAVA小锅米线点餐管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

Python Faker库造伪数据

pip install Faker -i https://pypi.tuna.tsinghua.edu.cn/simple 在生成数据时&#xff0c;先调用unique&#xff0c;上面例子中的代码则改成下面这样 from faker import Faker def faker_demo(n): f Faker(“zh-CN”) l [] for i in range(n): # 代码更改处&#xff0c;…

安全高效应对混合办公新趋势 腾讯四大协同办公产品亮相

11月30日下午&#xff0c;2022腾讯全球数字生态大会「安全高效协同办公」专场在线上召开。论坛针对混合办公变革下的安全风险进行解析&#xff0c;并给出便捷规范的评估工具协助各行业客户评估自身办公安全成熟度&#xff0c;详细解读了腾讯数据安全解决方案、腾讯零信任iOA、腾…

Docker快速入门【极速浏览版】

文章目录11.1 Docker为什么出现1.2 Docker理念1.3 容器和虚拟机比较⭐️1.4 容器为什么比虚拟机快&#xff1f;⭐️1.5 Docker的基本组成⭐️1.6 Docker一个基本流程⭐️1.7 Docker架构⭐️1.7.1 入门版1.7.2 架构板22.1 Centos Docker安装2.2 前提条件2.3 官网安装doc2.4 查看…

安科瑞集中监控,剩余电流监测,温度保护电气火灾监控探测器

安科瑞 王晶淼/司红霞 一、电气火灾和爆炸的原因 电气火灾和爆炸在火灾、爆炸事故中占有很大的比例。如线路、电动机、开关等电气设备都可能引起火灾。变压器等带油电气设备除了可能发生火灾,还有爆炸的危险。造成电气火灾与爆炸的原因很多。除设备缺陷、安装不当等设计和施工…

人工智能-机器学习-深度学习-概述

文章目录一&#xff1a;人工智能需要的基础和涉及内容二&#xff1a;数学基础&#xff08;1&#xff09;线性代数&#xff08;2&#xff09;概率论&#xff08;3&#xff09;数理统计&#xff08;4&#xff09;最优化方法&#xff08;5&#xff09;信息论三&#xff1a;机器学习…

【ESD专题】案例:都是集成TVS管,为什么第一眼就发现不能导入?

本案例是在TVS管导入替代料时看规格书阶段发现的。如下所示为我司常用的集成TVS管,管子是四通道单向低寄生电容的。 电路框图和Top面的PIN脚与标识如下: 要导入的替代料介绍如下:可以看出也是4路ESD保护结构,也是低电容的高速接口。 电路框图和PI…

VMware虚拟机ubuntu网络配置以及ifconfig命令

文章目录VMware虚拟机联网NAT模式配置NAT联网原理手动配置网络关于apt命令关于ifconfig命令简介命令格式命令参数使用实例显示网络设备信息(激活状态的)开启/禁用网络VMware虚拟机联网 VMware提供:桥接,Host Only和NAT三种连网方式。 本文介绍的是NAT模式的具体设置方法&…