Android高级面试_8_热修补插件化等

Android 高级面试:插件化和热修复相关

1、dex 和 class 文件结构

class 是 JVM 可以执行的文件类型,由 javac 编译生成;dex 是 DVM 执行的文件类型,由 dx 编译生成。

class 文件结构的特点:

  1. 是一种 8 位二进制字节流文件;
  2. 各个数据按顺序紧密的排列,无间隙;
  3. 每个类或者借口都单独占据一个 class 文件;

class 文件的文件结构:

1. magic                           加密字段
2. minor_version                   支持最低版本的jdk
3. major_version                   编译使用的jdk版本
4. constant_pool_count             常量池的数量
5. cp_info constant_pool           常量池的结构体,数量不定
6. access_flags                    访问级别
7. this_class                      当前类
8. super_class                     父类
9. interfaces_count                类实现接口的数量
10. fields_count                   类成员变量的数量
11. methods_count                  类方法的数量
12. method_info methods            类方法的结构体
13. attributes_count               类属性的数量
14. attribute_info attributes      类属性的结构体

dex 文件的结构的特点:

1. 是一种 8 位二进制字节流文件;
2. 各个数据按顺序紧密的排列,无间隙;
3. 一般情况下,整个应用所有 java 源文件都放在一个 dex 文件中。

dex 的文件结构分成 3 个区:

1. 第一个区是 header,包括:1. header_item dex_header 这个结构体,
2. 第二个区是索引区,包括:1. string_id_list dex_string_ids(字符串索引2. type_id_list dex_type_ids(类型索引)3. proto_id_list dex_proto_ids(方法原型索引)4. field_id_list dex_field_ids(域索引)5. method_id_list dex_method_ids(方法索引)
3. 第三个区是数据区,包括:1. class_def_item_list dex_class_defs(类的定义)2. data3. link_data(so)

两者的主要区别:

  1. class 中只包含了一个 java 文件的信息,dex 中包含了多个 java 文件的的信息;
  2. dex 中包含了很多类的信息,它会把类的信息进行拆分,然后把拆分后的信息分配到指定的索引区域中。比如方法索引区域就包含了所有类的方法的索引。

2、加固的原理

加固的过程分成几个步骤:

  1. 要加固的 APK + 壳程序 dex 合成新的 dex;
  2. 然后用新合成的 dex 替换克 apk 中的 dex 得到新的 APK.

第一步的时候可以对 APK 进行加密,然后在运行时对 APK 进行解密。合成新 APK 的本质过程是对 dex 进行拼接,将 APK 文件附加到 dex 文件后面。因为此时 dex 的信息已经发生了变化,所以需要对 dex 的文件头进行修改,包括魔数、检验码和 SHA-1 签名的修改。本质上拼接的过程可以通过读取二进制数组,然后通过数组拷贝将 APK 附加到 dex 末尾。

第二部就是一个打包的过程。不过这个过程会修改 Manifest 文件,将程序中的 Application 替换掉。替换后的 Application 会在程序启动的时候将我们的 APK 加载进来。下面是 360 加固之后的 Manifest 文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加固的过程有些类似于插件化的流程,也是将 APK 解压到磁盘之后,通过反射替换掉 AssertsManager,并将其指向我们解压之后的资源的路径。

360 加固的核心算法在 native 层实现,里面针对不同的平台提供了各种 so 库,运行时在 java 层判断平台版本,调用 so 库。

3、热修复的原理

根据修复的类型分成几种:类的修复,资源修复和 so 修复。

类的修复:

4、插件化的原理

另外
有什么技术问题欢迎加我交流 qilebeaf
本人10多年大厂软件开发经验,精通Android,Java,Python,前端等开发,空余时间承接软件开发设计、课程设计指导、解决疑难bug、AI大模型搭建,AI绘图应用等。
欢迎砸单

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

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

相关文章

探索Facebook的未来世界:数字社交的演进之路

在数字化和全球化的浪潮中,社交网络如Facebook已经成为了人们日常生活不可或缺的一部分。然而,随着技术的迅猛发展和用户需求的不断变化,Facebook正在经历着社交平台的演进之路。本文将探索Facebook的未来世界,分析数字社交的发展…

CP AUTOSAR标准之KeyManager(AUTOSAR_CP_SWS_KeyManager)(更新中……)

1 简介和功能概述 该规范描述了AUTOSAR基础软件模块< KeyManager >的功能、API和配置。   AUTOSAR KeyM模块由两个子模块组成,即加密密钥子模块和证书子模块,如[1]“AUTOSAR对加密堆栈的要求”所要求。   加密密钥子模块提供API和配置项来引入或更新预定义的加密密…

技术选型新趋势:中小型企业如何选用高效CRM“小型应用”进行客户管理

众所周知&#xff0c;CRM应用通过优化客户信息管理、提升销售效率、提高客户服务质量、实现市场营销自动化以及支持数据分析与决策等方面&#xff0c;为企业创造更大的价值&#xff0c;提升企业的竞争力和市场份额。 对初创型、中小型企业来说&#xff0c;使用合适的CRM应用至…

【LLVM】学习使用PGO优化

笔者在查看PGO优化时看到了本站的这篇文章&#xff0c;其中代码和命令行部分贴上了序号&#xff0c;且命令行带上了$符号&#xff0c;不便于读者调试。 遂将代码重新整理到gitee&#xff0c;链接在此。 汇编代码分析 目前笔者使用的llvm版本为llvm-19&#xff0c;主要改动发生…

RK3588编译环境配置

安装Ubuntu18.04 安装Ubuntu请参考其他教程 安装vmware-tools 如果vmware版本过低&#xff0c;vmware-tools安装可能会出现各种问题。 建议直接用apt-get install安装vmware-tools sudo apt-get update sudo apt-get install open-vm-tools open-vm-tools-desktop vmware-…

选择印尼海外仓一件代发的攻略 - 广东智慧物流

选择印尼海外仓一件代发的攻略 - 广东智慧物流&#xff01; 你是不是也在为印尼跨境电商物流头疼&#xff1f;试试印尼海外仓一件代发吧&#xff01;&#x1f30f;&#x1f4e6; 攻略优势&#xff1a; 成本节约&#xff1a;不用设立当地仓库&#xff0c;省去高昂的员工费用&…

从CVPR 2024看域适应、域泛化最新研究进展

域适应和域泛化一直以来都是各大顶会的热门研究方向。 域适应指&#xff1a;当我们在源域上训练的模型需要在目标域应用时&#xff0c;如果两域数据分布差异太大&#xff0c;模型性能就有可能降低。这时可以利用目标域的无标签数据&#xff0c;通过设计特定方法减小域间差异&a…

C++生产者-消费者无锁缓冲区的简单实现

文章目录 1. 引言2. SPSC 环形缓冲区设计思想3. 缓冲区类定义4. 追加数据5. 读取数据6. 完整代码7. 基准测试7.1. 测试代码 8. 执行结果 1. 引言 本文将介绍如何实现无锁字节缓冲区&#xff08;LockFreeBytesBuffer&#xff09;&#xff0c;并通过Google Benchmark对其性能进行…

强化学习盾牌:scikit-learn模型正则化全面指南

&#x1f6e1;️ 强化学习盾牌&#xff1a;scikit-learn模型正则化全面指南 &#x1f6e1;️ 在机器学习中&#xff0c;模型正则化是一项关键技术&#xff0c;用于防止过拟合&#xff0c;提高模型的泛化能力。scikit-learn&#xff0c;作为Python中一个功能强大的机器学习库&a…

Flutter笔记(一)- 安装和配置Flutter

一、下载Flutter 访问网址&#xff1a;https://docs.flutter.dev/get-started/install?hlzh-cn 根据电脑所使用的操作系统的平台进行选择。笔者电脑的操作系统为Windows&#xff0c;因此选择如图1-1的Windows图片&#xff1a; 图1-1 Flutter网站&#xff08;一&#xff09; …

国行版苹果Vision Pro即将发售 高昂定价吓退普通消费者?

2024年2月2日&#xff0c;苹果第一代空间计算设备Vision Pro在美国上市。6月28日&#xff0c;国行版苹果Vision Pro也将正式发售&#xff0c;别为256GB版29999元、512GB版31499元、1TB版32999元。不过从此前Vision Pro预售情况来看&#xff0c;Vision Pro的“杀手锏”在“价格”…

【应届应知应会】Linux常用指令

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 文件与目录管理 目录操作命令&#xff1a; ls [选项] [目录或文件] mkdir 文件操作命令&#xf…

多媒体本地化的五个步骤

多媒体本地化为试图在多个全球目的地建立市场的企业提供了许多好处。 由于多媒体并不局限于一个内容标签&#xff0c;因此您需要注意一些元素。 这个过程通常从翻译开始&#xff0c;但因为我们处理的是视频和音频&#xff0c;所以从一开始就要处理一个附加层。让我们从这里开…

SqlServer 2008远程过程调用失败,错误代码[0x800706be]

1、解决方式&#xff1a; 将SQL 2008 R2升级到SP1或SP2 下载地址&#xff1a;SQL Server 2008 R2 Service Pack 2下载地址

非最大值抑制(NMS)函数

非最大值抑制&#xff08;NMS&#xff09;函数 flyfish 非最大值抑制&#xff08;Non-Maximum Suppression, NMS&#xff09;是计算机视觉中常用的一种后处理技术&#xff0c;主要用于目标检测任务。其作用是从一组可能存在大量重叠的候选边界框中&#xff0c;筛选出最具代表…

初学51单片机之长短键应用定时炸弹及扩展应用

51单片机RAM区域划分 51单片机的RAM分为两个部分&#xff0c;一块是片内RAM&#xff0c;一块是片外RAM。 data&#xff1a; 片内RAM从 0x00 ~0x7F 寻址范围&#xff08;0-127&#xff09; 容量共128B idata: 片外RAM从 0x00~0xFF 寻址范围(0-255) 容量共256B pdata&am…

即时和及时的微妙区别

即时与及时在汉语中的确存在一些微妙的区别&#xff0c;以下是对这两个词的分析&#xff0c;并通过例子进行说明&#xff1a; 一、词义与词性 即时&#xff1a;具有立刻、马上的意思&#xff0c;强调在某个时间段立即出现、产生或做出&#xff0c;侧重于和当时实际情况同步。…

Leetcode-Java 无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 示例 1:输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb" 输出: 1 解释: 因为无重复…

无缝集成的艺术:iCloud与Apple TV的协同之旅

无缝集成的艺术&#xff1a;iCloud与Apple TV的协同之旅 在苹果构建的生态系统中&#xff0c;iCloud和Apple TV是两个重要的组成部分&#xff0c;它们共同为用户提供了一种无缝的娱乐体验。iCloud作为苹果的云服务&#xff0c;不仅存储用户的照片、视频、文档等数据&#xff0…

定位问题6.27 petal数据接口问题

petal接口响应结果 响应结果为空的数据&#xff0c;而我们需要的是正确的响应结果。 排查问题 确认接口是否正确 以下是爬虫的配置文件内容&#xff0c;我查看了PETAL_URL的接口&#xff0c;并询问接口开发人员&#xff0c;得知接口地址并未改变 确认接口请求体是否正确 我使…