Android APEX 和 Android.bp

       Android.bp解析与使用看这篇就够了 - 知乎

       https://www.jianshu.com/p/8a71dab2172c

       Android.bp 文件格式  |  Android Open Source Project

       Android.mk/Android.bp 详解 - 简书

      语法浅析_android.bp中的subdirs有啥作用-优快云博客

        APEX是Google继Project Treble后的又一重大举措,它是Android Q的系统组件更新机制。APEX的想法在GNU/Linux发行版中非常普遍:针对Linux库集合中的特定部分的包更新。但这是Google从未尝试过的事情,因为Android中使用了一个ro(只读)分区,在其中存储了所有系统库和框架,而不是大多数Linux发行版中通常使用的rw(读写)分区,从而使得其难以实现标准升级过程。
库是预编译的代码,可以在其它程序中使用。常用的方法是可以制作成Android应用程序调用的库,减少Android应用程序的大小,因为不需要在多个应用程序中实现相同的代码。我们可以在/system/lib/system/lib64目录中找到许多预装系统库。Android系统库通常不会单独更新-相反,它们会通过OTA更新作为Android平台升级的一部分进行更新(备注:意思就是要整个系统升级才能把系统库部分也一并升级了,而不能像Linux那样子,可以针对特定的系统库进行升级)。另一方面,Linux发行版的库可以单独升级。
随着APEX的推出,Android中的系统库可以像Android应用程序一样单独更新。这样做的好处是,应用程序开发人员将能够利用更新后的库,而无需等待OEM推出完整的系统升级。
APEX是一个生态系统,迫使Google重新考虑Android从不同于/system的非标准分区加载所有库和文件的方式。
首先,我们必须区分共享库和静态库。共享库是一个库(如libkind.so的文件),它不包含自身运行所需的所有代码,而是与实际提供代码的其它库进行链接;静态库则是,可以认为它不依赖于其它任何库,并在文件中静态包含了所有内容。

下面是具体格式讲解:

APEX 文件格式

Android Pony EXpress (APEX) 是 Android 10 中引入的一种容器格式,用于较低级别系统模块的安装流程中。此格式可帮助更新不适用于标准 Android 应用模型的系统组件。一些示例组件包括原生服务和原生库、硬件抽象层 (HAL))、运行时 (ART) 以及类库。

“APEX”这一术语也可以指 APEX 文件。

背景

虽然 Android 支持通过软件包安装程序应用(例如 Google Play 商店应用)更新适用于标准应用模型(如服务、Activity)的模块,但是对于较低级别的操作系统组件,使用类似模型具有以下缺陷:

  • 基于 APK 的模块不能在启动序列早期使用。软件包管理系统是应用相关信息的中央存储库,只能从 activity 管理器(在启动过程的后期阶段准备就绪)启动。
  • APK 格式(特别是清单)专用于 Android 应用,系统模块并不总是适用。

设计

本部分简要介绍了 APEX 文件格式和 APEX 管理器的设计,后者是一项管理 APEX 文件的服务。

如需详细了解为 APEX 选择此设计的原因,请参阅开发 APEX 时考虑的替代方案

APEX 格式

这是 APEX 文件的格式。

APEX 文件格式

图 1. APEX 文件格式

在顶层,APEX 文件是一个 ZIP 文件,其中的文件以未压缩的形式存储,且位于 4 KB 边界。

APEX 文件中的 4 个文件如下所示:

  • apex_manifest.json
  • AndroidManifest.xml
  • apex_payload.img
  • apex_pubkey

apex_manifest.json 文件包含软件包名称和版本,可标识 APEX 文件。 这是一个采用 JSON 格式的 ApexManifest 协议缓冲区。

AndroidManifest.xml 文件允许 APEX 文件使用与 APK 相关的工具和基础架构,例如 ADB、PackageManager 和软件包安装程序应用(如 Play 商店)。例如,APEX 文件可以使用现有工具(如 aapt)来检查文件中的基本元数据。该文件包含软件包名称和版本信息。这些信息通常也可以在 apex_manifest.json 中找到。

对于处理 APEX 的新代码和系统,建议使用 apex_manifest.json,而非 AndroidManifest.xmlAndroidManifest.xml 可能包含可供现有应用发布工具使用的其他定位信息。

apex_payload.img 是由 dm-verity 支持的 ext4 文件系统映像。该映像通过环回设备在运行时装载。具体而言,哈希树和元数据块是使用 libavb 库创建的。因为该映像应该可以装载到位,所以文件系统载荷不会进行解析。常规文件包含在 apex_payload.img 文件中。

apex_pubkey 是用于为文件系统映像签名的公钥。在运行时,此密钥可确保使用为内置分区中的相同 APEX 签名的同一实体为已下载的 APEX 签名。

APEX 命名准则

为了避免伴随平台发展产生的新 APEX 之间的命名冲突,请遵循以下命名准则:

  • com.android.*
    • 为 AOSP APEX 预留。并非任何公司或设备所专用。
  • com.<companyname>.*
    • 为公司预留。可能由相应公司的多台设备使用。
  • com.<companyname>.<devicename>.*
    • 为特定设备(或部分设备)的专属 APEX 预留。

APEX 管理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值