“APEX”这一术语也可以指 APEX 文件。
虽然 Android 支持通过软件包安装程序应用(例如 Google Play 商店应用)更新适用于标准应用模型(如服务、Activity)的模块,但是对于较低级别的操作系统组件,使用类似模型具有以下缺陷:
本部分简要介绍了 APEX 文件格式和 APEX 管理器的设计,后者是一项管理 APEX 文件的服务。
这是 APEX 文件的格式。
图 1. APEX 文件格式
在顶层,APEX 文件是一个 ZIP 文件,其中的文件以未压缩的形式存储,且位于 4 KB 边界。
APEX 文件中的 4 个文件如下所示:
apex_pubkey 是用于为文件系统映像签名的公钥。在运行时,此密钥可确保使用为内置分区中的相同 APEX 签名的同一实体为已下载的 APEX 签名。
APEX 管理器(即 apexd)是一个独立的原生进程,负责验证、安装和卸载 APEX 文件。此进程已启动,并在引导序列早期准备就绪。APEX 文件通常预安装在设备的 /system/apex 下。如果没有可用的更新,APEX 管理器默认使用这些软件包。
装载内部数据库中列出的所有 APEX 文件后,APEX 管理器为其他系统组件提供 Binder 服务,以查询有关已安装的 APEX 文件的信息。例如,其他系统组件可以查询设备中安装的 APEX 文件列表,也可以查询装载特定 APEX 的确切路径,以便可以访问这些文件。
APEX 格式支持以下文件类型:
这并不意味着 APEX 可以更新所有这些文件类型。能否更新某个文件类型,取决于具体平台以及这些文件类型的接口定义的稳定性如何。
在设备端,安装了与用于为 vbmeta 描述符签名的私钥对应的公钥。APEX 管理器使用该公钥来验证请求安装的 APEX。必须使用不同的密钥为每个 APEX 签名,并在构建时和运行时强制执行此操作。
APEX 文件可以位于内置分区(如 /system)中。该分区已通过 dm-verity 验证,因此 APEX 文件会直接装载到环回设备上。
如果内置分区中存在 APEX,可以通过提供具有相同软件包名称和更高或相同版本代码的 APEX 软件包来更新 APEX。新的 APEX 存储在 /data 中,与 APK 类似,新安装的版本会替换内置分区中已存在的版本。但与 APK 不同的是,新安装的 APEX 版本仅在重新启动后才会激活。
要在 Android 设备上支持 APEX Mainline 模块,需要以下 Linux 内核功能:环回驱动程序和 dm-verity。环回驱动程序将文件系统映像装载到某个 APEX 模块中,然后 dm-verity 会验证该 APEX 模块。
在使用 APEX 模块时,环回驱动程序和 dm-verity 的性能对于实现良好的系统性能来说非常重要。
使用内核版本 4.4 或更高版本的设备支持 APEX Mainline 模块。搭载 Android 10 或更高版本的新设备必须使用内核版本 4.9 或更高版本来支持 APEX 模块。
用于支持 APEX 模块所必需的内核补丁程序包含在 Android 公共树中。要获得补丁程序以支持 APEX,请使用最新版本的 Android 公共树。
内核版本 4.4
只有从 Android 9 升级到 Android 10 且要支持 APEX 模块的设备支持此版本。如需获得必需的补丁程序,强烈建议从 android-4.4 分支向下合并。以下是内核版本 4.4 所需的各个补丁程序的列表。
内核版本 4.9/4.14/4.19
如需获得内核版本 4.9/4.14/4.19 所必需的补丁程序,请从 android-common 分支向下合并。
以下列表显示了支持 Android 10 中引入的 APEX 模块的基本配置要求。带星号 (*) 的项是 Android 9 及更低版本的现有要求。
如需支持 APEX,请确保内核命令行参数满足以下要求;
file_contexts 示例:
APEX 中的文件类型及其位置
文件类型
在 APEX 中的位置
共享库
/lib 和 /lib64(在 x86 中,翻译后的 ARM 的位置为 /lib/arm)
可执行文件
/bin
Java 库
/javalib
预编译文件
/etc
APEX 文件自动包含原生共享库或可执行文件的传递依赖项。例如,如果 libFoo 依赖于 libBar,则仅当 libFoo 在 native_shared_libs 属性中列出时才会包含这两个库。
为设备的主应用二进制接口 (ABI) 和辅助 ABI 安装 native_shared_libs 属性。如果 APEX 以具有单个 ABI 的设备(即仅 32 位或仅 64 位)为目标平台,则仅安装具有相应 ABI 的库。
仅为设备的主 ABI 安装 binaries 属性,如下所述:
如需更为精细地控制原生库和二进制文件的 ABI,请使用 multilib.[first|lib32|lib64|prefer32|both].[native_shared_libs|binaries] 属性。
java、libraries 和 prebuilts 属性与 ABI 无关。
下面的示例展示了支持 32 位和 64 位 ABI 且不优先使用 32 位 ABI 的设备:
使用不同的密钥为每个 APEX 签名。需要新密钥时,可创建公钥-私钥对并创建 apex_key 模块。使用 key 属性为使用该密钥的 APEX 签名。公钥自动包含在 APEX 中,名为 avb_pubkey。
在上述示例中,公钥的名称 (foo) 成为密钥的 ID。用于为 APEX 签名的密钥 ID 采用 APEX 格式。在运行时,apexd 使用设备中具有相同 ID 的公钥验证 APEX。
如需在文件级别为 APEX 签名,请按以下三种方式之一设置 certificate 属性:
注意:key 和 certificate 值不需要从相同的公钥/私钥对中派生。APEX 是一种 APK,因此需要 APK 签名(由 certificate 指定)。
要安装 APEX,请使用 ADB。
重新启动后,APEX 会装载到 /apex/<apex_name>@<version> 目录中。可以同时装载同一 APEX 的多个版本。在装载路径中,对应于最新版本的路径绑定装载到 /apex/<apex_name>。
客户端可以使用绑定装载路径从 APEX 读取或执行文件。
通常可按如下方式使用 APEX:
要使用 APEX 更新服务,请执行以下操作:
只能在 APEX 的 .rc 文件中定义服务定义。APEX 不支持操作触发器。
如果标记为可更新的服务在 APEX 激活之前启动,启动会延迟,直到 APEX 的激活过程完成为止。
将以下系统属性设置为 true 以支持 APEX 文件更新。
或者仅设置
对于旧版设备,通过更新旧内核来完全支持 APEX 有时无法执行或不可行。例如,内核可能是在没有 CONFIG_BLK_DEV_LOOP=Y 的情况下构建的,这对于在 APEX 中装载文件系统映像至关重要。
无法通过从网络下载 APEX 的更新版本来更新扁平化 APEX,因为下载的 APEX 无法经过扁平化处理。只能通过常规 OTA 更新扁平化 APEX。
扁平化 APEX 是默认配置。这意味着,除非您将设备明确配置为编译非扁平化 APEX 以支持 APEX 更新(如上所述),否则所有 APEX 都默认经过扁平化处理。
Android 12 及更高版本提供 APEX 文件压缩功能,用于减少可更新的 APEX 软件包对存储空间的影响。安装 APEX 的更新后,虽然其预安装版本不会再使用,但占用的空间量不变。被占用的空间仍然不可用。
APEX 文件压缩功能在只读分区(例如 /system 分区)中使用一组经过高度压缩的 APEX 文件,最大限度地降低了对存储空间的这种影响。Android 12 及更高版本使用 DEFLATE zip 压缩算法。
压缩并不会优化以下各项:
以下是已压缩 APEX 文件的格式。
图 2. 已压缩 APEX 文件的格式
在顶层,已压缩的 APEX 文件是一个 zip 文件,它包含原始 apex 文件(采用 deflate 压缩方式,压缩级别为 9),以及在未压缩的情况下存储的其他文件。
以下四个文件构成一个 APEX 文件:
PRODUCT_COMPRESSED_APEX 产品标志用于控制在源代码的基础上构建的系统映像是否必须包含已压缩的 APEX 文件。
对于本地实验,您可以通过将 OVERRIDE_PRODUCT_COMPRESSED_APEX= 设置为 true 来强制 build 压缩 APEX。
构建系统生成的已压缩的 APEX 文件具有 .capex 扩展名。此扩展名可让您更轻松地区分 APEX 文件的已压缩版本和未压缩版本。
支持的压缩算法
Android 12 仅支持 deflate-zip 压缩。
在启动期间激活已压缩的 APEX 文件
在可以激活已压缩的 APEX 文件之前,须将其中的 original_apex 文件解压缩到 /data/apex/decompressed 目录中。解压缩后的 APEX 文件会硬链接到 /data/apex/active 目录。
注意:由于解压缩后的 APEX 文件会硬链接到 /data/apex/active 目录,因此 /data/apex/decompressed 下的文件必须与 /data/apex/active 目录下的文件具有相同的 SELinux 标签。
为了演示上述流程,我们提供了下面的示例。
与 OTA 交互
已压缩的 APEX 文件会影响 OTA 传送和应用。由于 OTA 更新可能包含已压缩的 APEX 文件,其版本高于设备上当前使用的版本,因此在重新启动设备以应用 OTA 更新之前,必须预留一定的可用空间。
为了支持 OTA 系统,apexd 提供了以下两个 binder API:
如果是 A/B OTA 更新,apexd 会在安装后 OTA 例程中尝试在后台进行解压缩。如果解压缩失败,apexd 会在应用 OTA 更新的启动过程中执行解压缩。
以下是 AOSP 在设计 APEX 文件格式时考虑的一些选项,以及添加或排除这些选项的原因。
Linux 发行版提供 dpkg 和 rpm 等软件包管理系统,这些系统功能强大、成熟且稳健。不过,APEX 没有采用这些系统,因为它们在安装后无法保护软件包。只有在安装软件包时才会执行验证。可以破坏已安装软件包的完整性而不被察觉。这会造成 Android 性能下降,因为 Android 的所有系统组件都存储在只读文件系统中,其完整性受每个 I/O 的 dm-verity 保护。对系统组件的任何篡改都必须禁止或可以检测到,以便设备在遭到入侵时可以拒绝启动。
APEX 容器中的文件来自于受 dm-verity 保护的内置分区(例如 /system 分区),即使在装载分区后,也会禁止对文件进行任何修改。为了对文件提供相同强度的安全保护,APEX 中的所有文件都存储在使用哈希树和 vbmeta 描述符配对的文件系统映像中。如果没有 dm-verity,/data 分区中的 APEX 在经过验证和安装后,很容易遭到意外修改。
实际上,/data 分区也受到 dm-crypt 等加密层的保护。虽然这在一定程度上能够防止篡改,但其主要目的是保护隐私,而不是确保完整性。当获得对 /data 分区的访问权限时,此类加密层就无法提供进一步保护,与 /system 分区中的每个系统组件相比,这也会造成性能下降。APEX 文件中的哈希树与 dm-verity 一同提供相同程度的内容保护。
打包在 APEX 中的系统组件文件可通过 /apex/<name>/lib/ 等新路径访问。如果文件存储在 /system 分区中,可以通过 /system/lib/ 等路径访问这些文件。APEX 文件的客户端(其他 APEX 文件或平台)必须使用新路径。由于路径发生更改,您可能需要更新现有代码。
虽然避免路径更改的一种方法是将 APEX 文件中的文件内容叠加到 /system 分区上,但 Android 团队决定不将文件叠加到 /system 分区上,因为随着叠加(甚至可能会接连堆叠)的文件数的增加,这会对性能造成负面影响。
另一个方法是劫持文件访问函数(如 open、stat 和 readlink),以便以 /system 开头的路径可以重定向到 /apex 下的相应路径。Android 团队舍弃了这一方法,因为更改所有接受路径的函数这种做法不可行。例如,一些应用会静态链接 Bionic,从而实现此类函数。在这类情况下,系统不会重定向这些应用。
一、Windows主机设置1、创建普通文件夹share。2、在share上右键,点击“属性”。3、依次点击“共享”->“高级共享”。4、勾选“共享此文件夹”,点击“确定”。二、虚拟机设置1、在对应的虚拟机上右键,点击“设置”。2、依次点击“选项”->“共享文件夹"->”总是启用“->”添加“。3、点击”下一步“。4、点击”浏览“,选择主机文件夹,然后点击”下一步“。5、点击
1. 查看当前目录下所有文件和子目录的大小du -sh *-s:显示每个文件或目录的总大小。-h:以人类可读的格式(如 KB、MB、GB)显示大小。2. 查看特定目录的大小du -sh /path/to/directory3. 查看每个子目录的大小,并按大小排序du -sh /path/to/directory/* | sort -h4. 查看当前目录及所有子目录的详细大小du -h5. 查看一个
# 理解 Android Apex 文件夹及其作用在 Android 操作系统中,Apex(Android Pony EXpress)是一种新的模块化架构,旨在实现更高效的应用管理与优化。结合其独特的文件处理机制,Apex 文件夹在 Android 系统的工作原理中占据了重要地位。本文将深入探讨 Apex 文件夹的含义、结构及其在 Android 中的应用。## 什么是 Apex 文件夹?
我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它的布料可以即受物理影响,又受骨骼蒙皮的影响.物理布料有很大的不确定性,你无法知道在做了一套动作后,布料
导读Apex英雄中,一些玩家对于该如何更换游戏服务器不是很了解,那么在游戏中Apex英雄要怎么才能更换服务器呢?接下来就请大家跟小编一起来了解一下这方面的具体内容吧!Apex英雄服务器更换方法...Apex英雄中,一些玩家对于该如何更换游戏服务器不是很了解,那么在游戏中Apex英雄要怎么才能更换服务器呢?接下来就请大家跟小编一起来了解一下这方面的具体内容吧!Apex英雄服务器更换方法首次进去游戏后
新手,最近研究拍照,不小心扯出了这个东西,查了一堆东西,总结一下。建议大家先看一看android系统的框架 具体请移步、、、、、(还没有写)我们平时的引用中主要是访问的手机的sd卡,有内部存储和外部存储,这部分是比较容易混淆的。具体请移步。。首先我们打开File Explore (eclipse 或 as),映入眼帘的是一大堆文件和文件夹(注:不同的手机厂商这里显示的文件目录可能会有些许差别,不过
引言在这一章节里,我们将一起动手安装Oracle数据库(XE)、APEX以及ORDS,并完成相关的设置。友情提示:由于之前没有绑定阿里云的弹性公网IP,导致阿里云ECS在关机重启后IP地址会变化,这里只要简单把公网IP转换成弹性公网IP即可。弹性公网IP的好处是IP地址不会变化,需要的时候拿过来绑定到ECS等设备上即可,非常灵活。 更多关于阿里云弹性公网IP的介绍请移步这里。现在我们的ECS服务
对于那些对新一代业务应用程序感兴趣的开发者而言,Apex代码是第一个多租户(multitenant)、按需(on-demand)编程的语言。开发者在用户界面可以使用很多订制选项,如定义新的字段,对象,工作流程,批准流程;除此之外,从客户端程序还可以通过SOAP API来发起诸如delete(),upsert()之类的数据操作请求。什么是Apex?Apex是一种强类型(strongly typed)
缘起Android碎片化的问题除了好多厂商加了更符合国人土豪味的特性之外,其实还有一个更基础性的问题就是升级太慢。为啥子?不记得之前讲过没有(好像讲过),现在再讲一遍:谷歌是AOSP代码的亲爹。但是有个问题,它老人家把代码搞出来后呢,还不能给厂商使用。因为谷老大没有硬件—给其他玩家用的硬件。在这个生态链里,谷老大之后是华为,高通,MTK这样的芯片厂商。这些芯片厂商有芯片(SOC啊,全套都有,就好像
安装apex库APEX是英伟达开源的,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。其中最有价值的是amp(Automatic Mixed Precision),将模型的大部分操作都用Float16数据类型测试,一些特别操作仍然使用Float32。并且用户仅仅通过三行代码即可完美将自己的训练代码迁移到该模型。实验证明,使用Float16作为大部分操作的数据类型,并没有降低参
分析代码基线 android10-releaseAPEX: Android Pony EXpress安卓运行环境Android Runtime(ART)将会在安卓12中,添加到Project Mainline当中,这意味着可以通过Google Play商店对其进行更新,而无需完整的系统升级。Google还指出,Project Mainline将会推动更多系统关键组件模块独立更新。apexd执行流程
在apex英雄中很多玩家不知道程序崩溃怎么办,总是出现一些无法进入游戏或者错误,这里为大家带来有关进不去游戏的解决方式,赶快来看看有没有需要的。(1)APEX英雄闪退怎么办?1、首先考虑配置问题,由于优化原因,A卡老U和部分新U可能不被支持,只能等待后续更新。2、APEX英雄默认是集显的,可以调整到独显(具体教程可以百度)3、可以更新下显卡驱动4、如果CPU不支持4.1指令集那只能换CPU了。这里
Apex英雄探路者机器人是一个辅助型的角色,大部分玩家都还不清楚要怎么才能用好,下面安族小编给大家介绍一下探路者机器人技巧详解,相信能帮到大家。探路者机器人使用技巧分享探路者(PathFinder)俗称机器人。其定位为辅助,但技能和医疗完全沾不上边。拥有两个主动技能为Q抓钩(GrapplingHook)可以将机器人快速移动到一段距离以外,Z滑索发射枪(ZiplineGun)可以制造一条可以到很远处
apex上steam后橘子平台用户怎么办?apexsteam锁国区怎么玩?apexsteam怎么下载?小编给大家介绍下具体的情况介绍,有需要的建议一起来了下吧~ apexsteam锁国区解决方法及下载介绍 《Apex英雄》Steam版将于11月5日正式上线,目前已经开启了Steam预下载,不过本次上线的Steam版是锁国区的,对于国内玩家非常不友好。但是经过玩家们的研究,发现了Steam国区同样
前言: 由于公司使用了Oracle APEX构建应用,且在APEX新版本v20.2版本中增强了相关报表导出数据相关功能;正好现在做的事情也需要类似的功能,就先来学习一下Oracle的APEX相关功能及实现方式;为自己优化实现相关功能做些积累吧。 先简单介绍下APEX是什么?APEX是什么: APEX:Oracle Application Express (APEX) 是低代码开发平台。借助该平台,
本文详细介绍了Python+PyCharm+PyQt5环境的完整配置流程,帮助初学者实现从0到1的突破。主要内容包括:Python 3.8的安装与验证、pip镜像源配置;PyCharm社区版的安装设置;PyQt5库及工具包(5.15.11版本)的安装;以及在PyCharm中配置Qt Designer、Pyuic等开发工具的方法。通过图文并茂的步骤指导,读者可以快速搭建起PyQt5开发环境,为后续GUI应用开发奠定基础。
1位数码管多位数码管数码管内部由8个LED组层,排列成8字形,点亮对应的LED,熄灭其他的LED,即可显示想要的数组/字母//数码管段选//数码管位选。 ...
在oracle数据库系统中每一行都有一个rowid,oracle数据库系统就是利用rowid来定位数据行的。rowid也是oracle中内置的一个标量数据类型rowid有一下特点; 是数据库中每一行的唯一标识 并不是显示的存储某一列的值 可以用来定位行,虽然没有直接给出行的物理地址 提供了访问一张表中数据行的最快机制1)rowid有两种类型:限制rowid和扩展rowid 一、扩展row
前言最近好忙好忙的说,连更新都慢了一周呢,收到豆瓣的催稿好就赶紧开始码字了,哭。决策树就像是真的一棵树,它从一个主干逐渐分支,构成一个完整的决策树。决策树(Decision Tree)是一种简单但是广泛使用的分类器。通过训练数据构建决策树,可以高效的对未知的数据进行分类。决策数有两大优点:决策树模型可以读性好,具有描述性,有助于人工分析。效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算
近日,山东第一医科大学附属肿瘤医院(山东省肿瘤医院)/山东省精准肿瘤学重点实验室宋倩博士等为第一作者、陈大卫研究员和于金明院士共同通讯作者,在《Cell Reports》期刊上发表题为“Bifidobacterium animalis suppresses non-small cell lung cancer progression and modulates tumor immunity thr