AB模板网,免费源码、模板、插件下载基地 - Www.AdminBuy.Cn

帮助中心 广告联系

凤凰彩票所有网站_官网认证

热门关键词:

Android : 供应商原生开发套件 (VNDK)摄影摄像器材

来源:未知 作者:admin 人气: 发布时间:2020-01-06
摘要:这一切都是为系统库与Vendor库之间的解耦合,在Android P上采用该方案,则下一个大版本Android Q更新,可以直接将新的System Q加上老Vendor P,组成新版本Android。 对于这些库,在Android.bp都包

  这一切都是为系统库与Vendor库之间的解耦合,在Android P上采用该方案,则下一个大版本Android Q更新,可以直接将新的System Q加上老Vendor P,组成新版本Android。

  对于这些库,在Android.bp都包含llndk_library模块的定义,该定义指定了模块名称和符号文件:

  编译系统会根据符号文件为vendor模块生成stub共享库,需满足条件:未在以_PRIVATE或_PLATFORM结尾的部分中定义,不含#platform-only标记,并且不含#introduce*标记或者该标记与目标匹配。

  编译系统包含多种类型的对象,其中包括库(共享、静态或标头)和二进制文件:

  a.如果vendor向 libexample.so 添加一个test函数以访问某些内部数据,那么修改后的libexample.so将是一个DX库,而这个新增函数将是该库的扩展部分。

  (1)Using-only-AOSP(UA模块)仅会在其实现过程中使用AOSP功能。它们不依赖任何非AOSP扩展功能。

  b.如果修改后的共享库libexample.so仅依赖于其他AOSP API,那么它将是一个UA模块。

  链接器命名空间机制由动态链接器提供,可以隔离不同链接器命名空间中的共享库,以确保具有相同库名称和不同符号的库不会发生冲突。链接器命名空间机制可提供相应的灵活性,从而将由一个链接器命名空间导出的某些共享库用于另一个链接器命名空间。这些导出的共享库可能会成为对其他程序公开的应用编程接口,同时在其链接器命名空间中隐藏实现细节。

  动态链接器负责加载DT_NEEDED条目中指定的共享库,由dlopen()或android_dlopen_ext()的参数指定的共享库。在这两种情况下,动态链接器都会找出调用程序所在的链接器命名空间,并尝试将相关依赖项加载到同一个链接器命名空间中。如果动态链接器无法将共享库加载到指定的链接器命名空间中,它会向关联的链接器命名空间索取导出的共享库。

  ld.config.txt会隔离系统分区和供应商分区之间的共享库依赖项。下文概述了该配置文件与上一小节中提到的ld.config.txt相比有哪些不同:

  下表列出了框架进程的命名空间配置(摘自ld.config.txt中的[system]部分):

  下表列出了供应商进程的命名空间配置(摘自ld.config.txt中的[vendor]部分):

  从 Android 8.0 开始,动态链接器将配置为隔离 SP-HAL 和 VNDK-SP 共享库,以使其符号不会与其他框架共享库发生冲突。链接器命名空间之间的关系如下所示:

  e.module_paths.txt。记录所有VNDK库的模块路径;检查GPL项目是否已在指定Android源代码树中发布源代码时,需要用到这种文件。

  d.运行check_gpl_license.py以验证根据通用公共许可证(GPL)获得许可的预编译库是否在当前源代码树中发布了源代码。

  在指定local选项的情况下,update.py会从本地$DIST_DIR(而非Android编译服务器中)提取VNDK快照编译工件。但由于本地模式仅用于测试,因此该脚本将跳过 GPL 许可检查和 git commit 步骤。

  PLATFORM_VNDK_VERSION在系统源代码中指定了当前VNDK模块的VNDK版本。系统会通过以下方式自动设置该值:

  vendor模块使用/etc/ld.config.${VER}.txt(其中${VER}是从ro.vndk.version属性中获得的)中的命名空间配置来搜索所需的共享库。命名空间配置中包含带有版本编号的VNDK目录,该目录使用以下语法:

责任编辑:admin