| <html devsite><head> |
| <title>清单</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>VINTF 对象会在系统<a href="#runtime-data">运行时</a>汇总<a href="#device-manifest-file">设备清单</a>和<a href="#framework-manifest-file">框架清单</a>文件 (XML) 中的数据以及设备本身的数据。这两个清单采用同一种格式,不过并非所有元素都适用于两者(有关架构方面的详细信息,请参阅<a href="#manifest-file-schema">清单文件架构</a>)。 |
| </p> |
| |
| <h2 id="device-manifest-file">设备清单</h2> |
| <p>设备清单(由设备提供)包含供应商清单和 ODM 清单:</p> |
| |
| <ul> |
| <li>供应商清单会指定 SoC 通用的 HAL、VNDK 版本等信息。建议将其放置在 Android 源代码树的 <code>device/${VENDOR}/${DEVICE}/manifest.xml</code> 中,但可以使用多个片段文件。有关详情,请参阅<a href="/devices/architecture/vintf/resources.html#manifest-fragments">从片段生成设备清单</a>。 |
| </li> |
| <li>ODM 清单会覆盖供应商清单,并列出产品专用的 HAL。</li> |
| </ul> |
| |
| <p>此设置可让采用相同开发板的多个产品共用同一个供应商映像(用于提供通用 HAL),但具有不同的 ODM 映像(用于指定产品专用的 HAL)。</p> |
| |
| <p>供应商清单示例:</p> |
| |
| <pre class="prettyprint"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- Comments, Legal notices, etc. here --> |
| <manifest version="1.0" type="device" target-level="1"> |
| <hal> |
| <name>android.hardware.camera</name> |
| <transport>hwbinder</transport> |
| <version>3.4</version> |
| <interface> |
| <name>ICameraProvider</name> |
| <instance>legacy/0</instance> |
| <instance>proprietary/0</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.hardware.nfc</name> |
| <transport>hwbinder</transport> |
| <version>1.0</version> |
| <version>2.0</version> |
| <interface> |
| <name>INfc</name> |
| <instance>nfc_nci</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.hardware.nfc</name> |
| <transport>hwbinder</transport> |
| <version>2.0</version> |
| <interface> |
| <name>INfc</name> |
| <instance>default</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.hardware.drm</name> |
| <transport>hwbinder</transport> |
| <version>1.0</version> |
| <interface> |
| <name>ICryptoFactory</name> |
| <instance>default</instance> |
| </interface> |
| <interface> |
| <name>IDrmFactory</name> |
| <instance>default</instance> |
| </interface> |
| <fqname>@1.1::ICryptoFactory/clearkey</fqname> |
| <fqname>@1.1::IDrmFactory/clearkey</fqname> |
| </hal> |
| <hal format="native"> |
| <name>EGL</name> |
| <version>1.1</version> |
| </hal> |
| <hal format="native"> |
| <name>GLES</name> |
| <version>1.1</version> |
| <version>2.0</version> |
| <version>3.0</version> |
| </hal> |
| <sepolicy> |
| <version>25.0</version> |
| </sepolicy> |
| </manifest> |
| </pre> |
| |
| <p>ODM 清单示例:</p> |
| |
| <pre class="prettyprint"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- Comments, Legal notices, etc. here --> |
| <manifest version="1.0" type="device"> |
| <hal override="true"> |
| <name>android.hardware.camera</name> |
| <transport>hwbinder</transport> |
| <version>3.5</version> |
| <interface> |
| <name>ICameraProvider</name> |
| <instance>legacy/0</instance> |
| </interface> |
| </hal> |
| <hal override="true"> |
| <name>android.hardware.nfc</name> |
| <transport>hwbinder</transport> |
| </hal> |
| <hal> |
| <name>android.hardware.power</name> |
| <transport>hwbinder</transport> |
| <version>1.1</version> |
| <interface> |
| <name>IPower</name> |
| <instance>default</instance> |
| </interface> |
| </hal> |
| </manifest> |
| </pre> |
| |
| 有关详情,请参阅<a href="/devices/architecture/vintf/dm">制定设备清单</a>。 |
| |
| <h2 id="framework-manifest-file">框架清单</h2> |
| <p>框架清单文件(由 Google 提供)是手动生成的,位于 Android 源代码树的 <code><a href="https://android.googlesource.com/platform/system/libhidl/+/master/manifest.xml" class="external">/system/libhidl/manifest.xml</a></code> 中。 |
| </p> |
| |
| <p>框架清单示例:</p> |
| |
| <pre class="prettyprint"> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- Comments, Legal notices, etc. here --> |
| <manifest version="1.0" type="framework"> |
| <hal> |
| <name>android.hidl.allocator</name> |
| <transport>hwbinder</transport> |
| <version>1.0</version> |
| <interface> |
| <name>IAllocator</name> |
| <instance>ashmem</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.hidl.memory</name> |
| <transport arch="32+64">passthrough</transport> |
| <version>1.0</version> |
| <interface> |
| <name>IMapper</name> |
| <instance>ashmem</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.hidl.manager</name> |
| <transport>hwbinder</transport> |
| <version>1.0</version> |
| <interface> |
| <name>IServiceManager</name> |
| <instance>default</instance> |
| </interface> |
| </hal> |
| <hal> |
| <name>android.frameworks.sensorservice</name> |
| <transport>hwbinder</transport> |
| <version>1.0</version> |
| <interface> |
| <name>ISensorManager</name> |
| <instance>default</instance> |
| </interface> |
| </hal> |
| <vendor-ndk> |
| <version>27</version> |
| </vendor-ndk> |
| <system-sdk> |
| <version>27</version> |
| </system-sdk> |
| </manifest> |
| </pre> |
| |
| <h2 id="manifest-file-schema">清单文件架构</h2> |
| <p>这一部分介绍了下列 XML 标记的含义。Android 源代码树中的源文件中可以缺少某些“必需”的标记,这些标记可以在编译时由 <code><a href="/devices/architecture/vintf/resources.html#assemble_vintf">assemble_vintf</a></code> 写入。设备上的相应文件中必须有“必需”的标记。</p> |
| |
| <dl> |
| <dt><code>?xml</code></dt> |
| <dd>选用。只向 XML 解析器提供信息。</dd> |
| <dt><code>manifest.version</code></dt> |
| <dd>必需。<strong>该</strong>清单的元版本。描述该清单中应该存在的元素。与 XML 版本无关。</dd> |
| <dt><code>manifest.type</code></dt> |
| <dd>必需。该清单的类型。对于设备清单文件,其值为 <code>device</code>;对于框架清单文件,其值为 <code>framework</code>。</dd> |
| <dt><code>manifest.target-level</code></dt> |
| <dd>对于设备清单而言是必需的。用于指定相应设备清单要兼容的框架兼容性矩阵版本(FCM 版本),也称为设备的 Shipping FCM 版本。</dd> |
| <dt><code>manifest.hal</code></dt> |
| <dd>选用且可重复。单个 HAL(HIDL 或本机,如 GL),具体取决于 <code>format</code> 属性。</dd> |
| <dt><code>manifest.hal.format</code></dt> |
| <dd>选用。值可以是以下几项之一:<ul> |
| <li><code>hidl</code>:HIDL HAL。这是默认值。 |
| </li><li><code>native</code>:本机 HAL。</li> |
| </ul> |
| </dd> |
| <dt><code>manifest.hal.override</code></dt> |
| <dd>选用。值可以是以下几项之一:<ul> |
| <li><code>true</code>:覆盖其他具有相同 <code><name></code> 和 Major 版本的 <code><hal></code> 元素。如果此 <code><hal></code> 元素中没有 <code><version></code> 和 <code><fqname></code>,则表示此 HAL 处于停用状态。</li> |
| <li><code>false</code>:不覆盖其他具有相同 <code><name></code> 和 Major 版本的 <code><hal></code> 元素。</li> |
| </ul> |
| </dd> |
| <dt><code>manifest.hal.name</code></dt> |
| <dd>必需。HAL 的完全限定软件包名称。多个 HAL 条目可以使用相同的名称。示例:<ul> |
| <li><code>android.hardware.camera</code> (HIDL HAL)</li> |
| <li><code>GLES</code>(本机 HAL,只需要名称)</li> |
| </ul> |
| </dd> |
| <dt><code>manifest.hal.transport</code></dt> |
| <dd>在 <code>manifest.hal.format == "hidl"</code> 时是必需的。在其他情况下,则不得存在。指明从服务管理器查询来自该软件包的接口时将使用什么传输模式。值可以是以下几项之一:<ul> |
| <li><code>hwbinder</code>:绑定模式</li> |
| <li><code>passthrough</code>:直通模式</li> |
| </ul> |
| </dd> |
| <dt><code>manifest.hal.transport.arch</code></dt> |
| <dd>对于 <code>passthrough</code> 是必需的,对于 <code>hwbinder</code> 不得存在。描述正在提供的直通服务的位数。值可以是以下几项之一:<ul> |
| <li><code>32</code>:32 位模式</li> |
| <li><code>64</code>:64 位模式</li> |
| <li><code>32+64</code>:两者</li> |
| </ul> |
| </dd> |
| <dt><code>manifest.hal.version</code></dt> |
| <dd>选用且可重复。清单中 <code>hal</code> 标记的版本。格式为 <code><var>MAJOR</var>.<var>MINOR</var></code>。有关示例,请参阅 <code>hardware/interfaces</code>、<code>vendor/${VENDOR}/interfaces</code>、<code>framework/hardware/interfaces</code> 或 <code> |
| system/hardware/interfaces</code>。 |
| <br /><br /> |
| HIDL 和本机 HAL 可以使用多个版本字段,前提是它们代表<strong>不同的 Major 版本</strong>,并且提供的每个 Major 版本只有一个 Minor 版本。例如,3.1 和 3.2 不能共存,但 1.0 和 3.4 可以共存。这适用于所有同名的 <code>hal</code> 元素,除非 <code>override="true"</code>。</dd> |
| <dt><code>manifest.hal.interface</code></dt> |
| <dd>必需,可以在不重名的情况下重复。指明软件包中具有实例名称的接口。一个 <code><hal></code> 中可以有多个 <code><interface></code> 元素,但名称必须不同。</dd> |
| <dt><code>manifest.hal.interface.name</code></dt> |
| <dd>必需。接口的名称。</dd> |
| <dt><code>manifest.hal.interface.instance</code></dt> |
| <dd>必需且可重复。接口的实例名称。一个接口可以有多个实例,但不能有重复的 <code><instance></code> 元素。</dd> |
| <dt><code>manifest.hal.fqname</code></dt> |
| <dd>选用且可重复。为名称是 <code>manifest.hal.name</code> 的 HAL 指定实例的另一种方法。格式为 <code>@<var>MAJOR</var>.<var>MINOR</var>::<var>INTERFACE</var>/<var>INSTANCE</var></code>。对于从 Android 8.0 升级的设备,它不能用于声明兼容性矩阵所需的实例。</dd> |
| <dt><code>manifest.sepolicy</code></dt> |
| <dd>必需。包含所有与 sepolicy 相关的条目。</dd> |
| <dt><code>manifest.sepolicy.version</code></dt> |
| <dd>对设备清单而言是必需的。用于声明 SELinux 版本。格式为 <code><var>SDK_INT</var>.<var>PLAT_INT</var></code>。</dd> |
| <dt><code>manifest.vendor-ndk</code></dt> |
| <dd>必需且可重复;对框架清单而言是必需的。不得出现在设备清单中。多个 <code><vendor-ndk></code> 条目必须具有不同的 <code><version></code>。用于描述框架提供的一组 VNDK 快照。</dd> |
| <dt><code>manifest.vendor-ndk.version</code></dt> |
| <dd>必需。一个正整数,表示 VNDK 快照的版本。</dd> |
| <dt><code>manifest.vendor-ndk.library</code></dt> |
| <dd>选用,可以在不重名的情况下重复。用于描述框架为此 VNDK 供应商快照提供的一组 VNDK 库。值是库的文件名,例如 <code>libjpeg.so</code>,包含前缀 <code>lib</code> 和后缀 <code>.so</code>。不允许添加路径组件。</dd> |
| <dt><code>manifest.system-sdk.version</code></dt> |
| <dd>选用,可以在不重名的情况下重复;仅供框架清单使用。用于描述框架为供应商应用提供的一组系统 SDK 版本。</dd> |
| </dl> |
| |
| </body></html> |