想了解HIDL介绍的可以参考《HIDL概述》,本篇文章主要介绍HIDL的详细编译流程及简单的客户端应用(C++跟Android客户端的应用)。
一、准备工作
- 整一套源码,Android O或者Android P的
- 保证全套代码已经全编译,原生代码全编译命令
- source build/envset.sh
- lunch
- make
3、hidl-gen工具已经安装,安装命令
- make hidl-gen
二、hidl-gen工具介绍
系统定义的所有的.hal
接口,都是通过hidl-gen
工具转换成对应的代码。hidl-gen
源码路径:system/tools/hidl,是在ubuntu上可执行的二进制文件。
使用方法:hidl-gen -o output-path -L language (-r interface-root) fqname
例子:
hidl-gen -o hardware/interfaces/gunder/1.0/default/ -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.gunder@1.0
参数说明:
- -L: 语言类型,包括c++, c++-headers, c++-sources, export-header, c++-impl, java, java-constants, vts, makefile, androidbp, androidbp-impl, hash等。
hidl-gen
可根据传入的语言类型产生不同的文件。 - fqname: 完全限定名称的输入文件。比如本例中
android.hardware.gunder@1.0
,要求在源码目录下必须有hardware/interfaces/ gunder /1.0/
目录。对于单个文件来说,格式如下:package@version::fileName
,比如android.hardware.gunder
@1.0::types.Feature。对于目录来说。格式如下package@version
,比如android.hardware.gunder
@1.0。 - -r: 格式package:path,可选,对fqname对应的文件来说,用来指定包名和文