快照java开源_VNDK 快照设计  

2023-11-10

即使系统映像和供应商映像是基于不同版本的 Android 构建的,系统映像也可以使用 VNDK 快照为供应商映像提供正确的 VNDK 库。创建 VNDK 快照需要以快照形式捕获 VNDK 库,并使用版本号标记它们。供应商映像可以与特定的 VNDK 版本相关联,由此版本为供应商映像中的模块提供所需 ABI。但是,在同一 VNDK 版本中,VNDK 库必须具有稳定的 ABI。

VNDK 快照设计包括用于执行以下两项操作的方法:从当前系统映像生成预构建的 VNDK 快照以及将这些预构建的库安装到更高 Android 版本的系统分区。

VNDK 库简介

Android 8.0 中引入的 HIDL-HAL 支持单独升级系统分区和供应商分区。VNDK 定义了可与供应商代码关联的多个库集(VNDK-core、VNDK-SP 和 LL-NDK),并阻止供应商使用不在 VNDK 库集内的库。因此,如果将系统映像中合适的 VNDK 库集提供给供应商映像,就可以构建并运行供应商映像。

注意:如需详细了解这些库,请参阅 VNDK 概念。

VNDK-core

VNDK-core 库集安装在 /system/lib[64]/vndk-${VER} 中,仅适用于 API 级别为 ${VER} 的供应商进程。系统进程不得使用这些库,而必须使用安装在 /system/lib[64] 中的库。由于每个进程都具有严格的命名空间限制,因此不会造成重复加载 VNDK-core 库。

如需在 VNDK-core 中添加库,请将以下内容添加到 Android.bp 中:

vendor_available: true,

vndk: {

enabled: true,

},

注意:如果系统进程从 system/lib 加载库 foo.so,并从 system/lib/vndk 加载另一个 foo.so,这种情况就属于重复加载 foo.so。通常,在一个进程中两次加载同一个库是不安全的。

VNDK-SP

VNDK-SP 库安装在 /system/lib[64]/vndk-sp-${VER} 中,适用于供应商进程和系统进程(通过安装在供应商分区中的 SP-HAL 库)。VNDK-SP 库可以重复加载。

如需在 VNDK-SP 中添加库,请将以下内容添加到 Android.bp中:

vendor_available: true,

vndk: {

enabled: true,

support_system_process: true,

},

LL-NDK

LL-NDK 库安装在 /system/lib[64] 中。供应商模块可以使用 LL-NDK 存根库访问 LL-NDK 库的预选符号。LL-NDK 库必须支持向后兼容且具有 ABI 稳定性,以便旧版供应商模块使用新版 LL-NDK 库。由于 LL-NDK 具有 ABI 稳定特性,VNDK 快照无需包含旧版供应商映像的 LL-NDK 库。

VNDK 快照简介

Android 8.1 包含根据源代码构建的 VNDK 库。但是,对于更高版本的 Android,必须以快照形式捕获每个 VNDK 版本,并作为预构建版本提供,以便关联到旧版本的供应商映像。

从 Android 9 开始,新版 Android 将在 Android 源代码中至少包含旧版本 VNDK-core 和 VNDK-SP 目录的其中一个快照。在构建时,所需快照将安装到 /system/lib[64]/vndk-${VER} 和 /system/lib[64]/vndk-sp-${VER}(供应商分区可以使用的目录),其中 ${VER} 是表示 VNDK 快照版本名称的字符串变量。

由于每个 VNDK 版本的 VNDK 快照库可能各不相同,因此 VNDK 快照还包含按以下格式安装的链接器命名空间配置:etc/ld.config.${VER}.txt、/etc/llndk.libraries.${VER}.txt 和 /etc/vndksp.libraries.${VER}.txt。

示例:升级系统映像和供应商映像

无需快照;无需针对 VNDK 快照进行其他配置即可构建。

示例:仅升级系统映像

必须在系统映像中包含供应商映像的 VNDK 快照和链接器命名空间配置文件。系统会自动配置链接器命名空间配置文件,以在 /system/lib[64]/vndk-${VER} 和 /system/lib[64]/vndk-sp-${VER} 中搜索 VNDK 库。

7e41dbc0aaa37bf4a3823a9539dc5d7f.png

图 1. 仅升级系统映像

示例:升级系统映像,少量更改供应商映像

目前尚不支持根据 VNDK 快照构建供应商映像,因此您必须使用原始源代码单独构建供应商映像,然后按上一示例中所述升级系统映像。

VNDK 快照架构

为了让 Android 9 系统映像与 Android 8.1 供应商映像兼容,必须为 Android 9 系统映像提供与 Android 8.1 供应商映像匹配的 VNDK 快照,如下所示:

3e67cd8349926c02b38ac3e7e3ea9c49.png

图 2. VNDK 快照架构

VNDK 快照设计包括以下方法:

为 VNDK-core 和 VNDK-SP 库生成快照。Android 9 包含一个脚本,您可以使用它来制作当前 VNDK build 的快照。此脚本将 /system/lib[64]/vndk-28 和 /system/lib[64]/vndk-sp-28 中的所有库组合在一起,这些库是采用当前源代码以 VNDK 快照形式构建的,其中 28 是 Android 9 的 VNDK 版本。快照还包含链接器命名空间配置文件 /etc/ld.config.28.txt、/etc/llndk.libraries.28.txt 和 /etc/vndksp.libraries.28.txt。生成的快照将用于较新的 Android 版本(高于 Android 9 的版本)。

从快照安装预构建的 VNDK-core 和 VNDK-SP 库。在 Android 9 中,VNDK 快照具有一组预构建的 VNDK-core 库和一组 VNDK-SP 库,以及链接器命名空间配置文件。如果您提供了要安装的 VNDK 快照版本列表,系统映像会在构建时将 VNDK 快照库安装到 /system/lib[64]/vndk-${VER} 和 /system/lib[64]/vndk-sp-${VER} 目录,并将这些 VNDK 快照的链接器命名空间配置文件安装到 /etc 目录。

VNDK 版本控制

每个 Android 版本都只有一个 VNDK 快照,并且 SDK 版本用作 VNDK 版本(这意味着 VNDK 版本必须采用整数,例如 Android 8.1 的 VNDK 版本为 27)。在 Android 版本发布时,VNDK 版本已确定。供应商分区使用的 VNDK 版本自动存储在 ro.vndk.version 属性中,可在运行时读取。然后,此版本可用于识别一些库的供应商 VNDK 版本及命名空间配置的 VNDK 快照版本。

构建 VNDK 库

make vndk 命令可用于构建具有 vndk:

{ enabled: true, … } 的库,包括依赖项和命名空间配置文件。如果设置了 BOARD_VNDK_VERSION := current,则可使用 make 命令构建这些库。

由于这种构建方法不会从快照安装 VNDK 库,因此安装的 VNDK 库不具有 ABI 稳定性。但是,在 Android 版本发布时,当前 VNDK 版本的 ABI 已确定。此时,任何 ABI 损坏都属于构建错误,因此 Android 版本的补丁程序不得更改 VNDK 库的 ABI。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快照java开源_VNDK 快照设计   的相关文章

  • mysql 配置多个数据库连接_SpringBoot和Mybatis配置多数据源连接多个数据库

    目前业界操作数据库的框架一般是 Mybatis 但在很多业务场景下 我们需要在一个工程里配置多个数据源来实现业务逻辑 在SpringBoot中也可以实现多数据源并配合Mybatis框架编写xml文件来执行SQL 在SpringBoot中 配
  • 浅谈ChatGPT在一个IT运维人眼中的日常使用场景

    前言 其实AI的概念已经存在了十多年 包括在运维领域 也从传统运维演化到了所有AIOps的概念 但一直以来对当前的AI并不是太看好 始终觉得当前的AI只是停留在 撞库 从海量的库里去匹配关键字触发语句 所谓的 小爱同学 小度小度 包括Sir
  • 高内聚与低耦合实现小记

    总所周知 实际软件开发中要实现高内聚 低耦合的设计原则 c语言和c 不同 c语言面向过程 c 面向对象 真正的项目中 要对业务升级 原来的业务函数需要保留 要保证老的功能继续维持 不能直接删除 这时候 c语言面向过程 通常使用回调的方法 c
  • 为什么面试狂问Redis,阿里面试官把我问到哑口无言…

    Redis在国内各大公司都很热门 比如新浪 阿里 腾讯 百度 美团 小米等 Redis也是大厂面试最爱问的 尤其是Redis客户端 Redis高级功能 Redis持久化和开发运维常用问题探讨 Redis复制的原理和优化策略 Redis分布式
  • Delegate总结

    关于Delegate已经写了很多 现总结如下 一 一条线是观察delegate从 net framework 1 1 到目前为止4 5的变迁 例如如果你用delegate来模拟事件 你需要自己 Add member to the invoc
  • 辅助信息服务器,我开启了辅助核算 要去哪里增加新的辅助信息?

    亲 您好 亿企代账提供三种辅助核算 应收账款 预收账款科目启用 客户 核算 应付账款 预付账款科目启用 供应商 核算 库存商品 原材料等科目启用 存货 核算 如果需要增加辅助信息 可按以下两种方法操作 方法一 在 设置 辅助设置 客户 处添
  • vue函数定义的多种写法

    vue定义方法 methods a e c alert aaa a e c alert aaa a function e c alert aaa 在JS中箭头函数根据是否书写大小括号可分为以下四种情况 不省略 const fun value
  • RocketMQ Rebalance流程分析

    这节介绍Rebalance流程 在介绍Consumer消费消息流程前 先介绍Rebalance得流程 该过程涉及到Consumer的启动 之前介绍过 Topic是一个逻辑概念 Topic下可以划分多个Queue以增加Consumer消费的并
  • react+antd+vscode的运行环境搭建

    初学者 在学着做一个前端项目 有时候要换新电脑 或者重装系统 前端代码就不能用了 解决时候总是忘记还遇到麻烦 记录一下 按步骤来吧 也不知道对不对 先这样用着 1 下载vscode 就去官网下就完事 好像点下载会根据电脑的系统版本位数啥的下
  • 接口测试&管理续集

    今天应大家需要 接着谈app端数据返回层面的用例设计方法 第二部分给大家安利一个 接口管理平台 以帮助大家解决接口文档维护 接口测试数据Mock 接口自动化测试等问题 希望对小伙伴们有用 言归正传 进入今天的话题 一 用例设计 查漏补缺 数
  • Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介

    点击上方 Python共享之家 进行关注 回复 资源 即可获赠Python学习资料 今 日 鸡 汤 折戟沉沙铁未销 自将磨洗认前朝 大家好 我是黑脸怪 这篇文章主要给大家介绍jsrpc 方便大家日后在遇到JS逆向的时候派上用场 前言 jsr
  • Unity编辑器拓展(一)实现快速制作书本效果插件

    目录 前言 自定义窗口实现使用的方法 效果演示 前言 Unity自定义书本编辑器窗口 书本功能实现参考教程 Unity代码实现翻书效果 自定义窗口实现使用的方法 EditorWindow GetWindow EditorGUILayout
  • 数据库学习(6)MySQL数据库DDL——索引

    MySQL数据库DDL 索引 创建索引 添加与删除索引 索引的使用原则 数据排序的好处 一旦数据排序之后 查找的速度就会翻倍 现实世界跟程序世界都是如此 创建索引 CREATE TABLE 表名称 INDEX 索引名称 字段 注 排序方法为
  • ToDesk远程控制

    实现远程控制有多简单 https www todesk com download htmlhttps www todesk com download htmlhttps www todesk com download html 电脑浏览器打
  • vue-pdf使用+分页预览+第一查看正常,第二次查看空白解决方案

    重点提示 全网通用pdf查看的功能都是使用vue pdf这个插件 除了各种坑外 最致命的一点就是 它的npm包有一个Bug 在第一次查看之后 再次查看 页面会空白并报错 Error during font loading Failed to
  • jsp、freemarker、velocity、thymeleaf页面方案分析

    1 概述 在java领域 表现层技术主要有三种 1 jsp 2 freemarker 3 velocity 4 thymeleaf 2 jsp 优点 1 功能强大 可以写java代码 2 支持jsp标签 jsp tag 3 支持表达式语言
  • Kattis Doors

    Problem open kattis com problems doors vjudge net contest 183886 problem B Reference 点到线段的最短距离算法 Meaning 有两个球 Alex 和 Bob
  • FastDFS性能调优 know how

    FastDFS性能调优 本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号 众所周知 软件性能调优不是一撮而就的事情 它是一个反复磨合的过程 下面介绍FastDFS 几个性能调优相关的重要参数 供大家参考 1
  • React官网API模块知识点整理(三)

    react版本 16 13 1 1 React 顶层 API React Component React Component 是使用 ES6 classes 方式定义 React 组件的基类 React PureComponent Reac

随机推荐