aboutsummaryrefslogtreecommitdiff
path: root/en/devices/architecture/hidl/hashing.html
diff options
context:
space:
mode:
Diffstat (limited to 'en/devices/architecture/hidl/hashing.html')
-rw-r--r--en/devices/architecture/hidl/hashing.html167
1 files changed, 0 insertions, 167 deletions
diff --git a/en/devices/architecture/hidl/hashing.html b/en/devices/architecture/hidl/hashing.html
deleted file mode 100644
index 3debea85..00000000
--- a/en/devices/architecture/hidl/hashing.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<html devsite>
- <head>
- <title>Interface Hashing</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>This document describes HIDL interface hashing, a mechanism to prevent
-accidental interface changes and ensure interface changes are thoroughly vetted.
-This mechanism is required because HIDL interfaces are versioned, which means
-that after an interface is released it must not be changed except in an
-Application Binary Interface (ABI) preserving manner (such as a comment
-correction).</p>
-
-<h2 id=layout>Layout</h2>
-<p>Every package root directory (i.e. <code>android.hardware</code> mapping to
-<code>hardware/interfaces</code> or <code>vendor.foo</code> mapping to
-<code>vendor/foo/hardware/interfaces</code>) must contain a
-<code>current.txt</code> file that lists all released HIDL interface files.</p>
-
-<pre class="prettyprint">
-# current.txt files support comments starting with a ‘#' character
-# this file, for instance, would be vendor/foo/hardware/interfaces/current.txt
-
-# Each line has a SHA-256 hash followed by the name of an interface.
-# They have been shortened in this doc for brevity but they are
-# 64 characters in length in an actual current.txt file.
-d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here
-
-# types.hal files are also noted in types.hal files
-c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types
-
-# Multiple hashes can be in the file for the same interface. This can be used
-# to note how ABI sustaining changes were made to the interface.
-# For instance, here is another hash for IFoo:
-
-# Fixes type where "FooCallback" was misspelled in comment on "FooStruct"
-822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
-</pre>
-
-<p class=note><strong>Note:</strong> To help keep track of which hashes come
-from where, Google separates HIDL <code>current.txt</code> files into different
-sections: The first section is <em>Released in Android O</em>; the next section
-will be <em>Released in Android O MR1</em>. We strongly recommend using a
-similar layout in your <code>current.txt</code> file.</p>
-
-<h2 id=hidl-gen>Hashing with hidl-gen</h2>
-<p>You can add a hash to a <code>current.txt</code> file manually or by
-using <code>hidl-gen</code>. The following code snippet provides examples of
-commands you can use with <code>hidl-gen</code> to manage a
-<code>current.txt</code> file (hashes have been shortened):</p>
-
-<pre class="devsite-click-to-copy">
-<code class="devsite-terminal">hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types</code>
-9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types
-<code class="devsite-terminal">hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc</code>
-07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
-<code class="devsite-terminal">hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0</code>
-9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types
-07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
-f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallback
-<code class="devsite-terminal">hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 &gt;&gt; vendor/awesome/hardware/interfaces/current.txt</code>
-</pre>
-
-<p class="warning"><strong>Warning:</strong> Do not replace a hash for a
-previously-released interface. When changing such an interface, add a new hash
-to the end of the <code>current.txt</code> file. For details, refer to
-<a href="#abi-stability">ABI stability</a>.</p>
-
-<p>Every interface definition library generated by <code>hidl-gen</code>
-includes hashes, which can be retrieved by calling
-<code>IBase::getHashChain</code>. When <code>hidl-gen</code> is compiling an
-interface, it checks the <code>current.txt</code> file in the root directory of
-the HAL package to see if the HAL has been changed:</p>
-
-<ul>
-<li>If no hash for the HAL is found, the interface is considered unreleased (in
-development) and compilation proceeds.</li>
-<li>If hashes are found, they are checked against the current interface:
-<ul>
-<li>If the interface does match the hash, compilation proceeds.</li>
-<li>If the interface does not match a hash, compilation is halted as this means a previously-released interface is being changed.
-<ul>
-<li>For an ABI-preserving change (see
-<a href="#abi-stability">ABI stability</a>), the <code>current.txt</code> file
-must be modified before compilation can proceed.</li>
-<li>All other changes should be made in a minor or major version upgrade of the
-interface.</li>
-</ul></li></ul></li></ul>
-
-<h2 id=abi-stability>ABI stability</h2>
-<aside class="key-point"><strong>Key Point:</strong> Please read and understand
-this section carefully.</aside>
-
-<p>An Application Binary Interface (ABI) includes the binary
-linkages/calling conventions/etc. If the ABI/API changes, the interface no
-longer works with a generic <code>system.img</code> that was compiled with
-official interfaces.</p>
-
-<p>Making sure that interfaces are versioned and ABI stable is
-<strong>crucial</strong> for several reasons:</p>
-
-<ul>
-<li>It ensures your implementation can pass the Vendor Test Suite (VTS), which
-puts you on track to being able to do framework-only OTAs.</li>
-<li>As an OEM, it enables you to provide a Board Support Package (BSP) that is
-straightforward to use and compliant.</li>
-<li>It helps you keep track of what interfaces can be released. Consider
-<code>current.txt</code> a map of an interfaces directory that allows you to see
-the history and state of all interfaces being provided in a package root.</li>
-</ul>
-
-<p>When adding a new hash for an interface that already has an entry in
-<code>current.txt</code>, make sure to add only the hashes that represent
-interfaces which maintain ABI stability. Review the following types of changes:
-</p>
-
-<table>
-<tbody>
-
-<tr>
-<th>Changes allowed</th>
-<td>
-<ul>
-<li>Changing a comment (unless this changes the meaning of a method).</li>
-<li>Changing the name of a parameter.</li>
-<li>Changing the name of a return parameter.</li>
-<li>Changing annotations.</li>
-</ul>
-</td>
-</tr>
-
-<tr>
-<th>Changes not allowed</th>
-<td>
-<ul>
-<li>Reordering arguments, methods, etc…</li>
-<li>Renaming an interface or moving it to a new package.</li>
-<li>Renaming a package.</li>
-<li>Adding a method/struct field/etc… anywhere in the interface.</li>
-<li>Anything that would break a C++ vtable.</li>
-<li>etc..</li>
-</ul>
-</td>
-</tr>
-
-</tbody>
-</table>
-
- </body>
-</html>