如何生成 HIDL 哈希值

背景

软件开发中有时会修改定义在HIDL中的接口,全编译整包Android代码时中途才报错,耗时太久,如果能指定更新接口hash值,能节省不少时间。

方法一

直接使用hidl-gen工具指定生成

查看谷歌文档:
https://source.android.com/devices/architecture/hidl/hashing

用例如下:
./out/host/linux-x86/bin/hidl-gen -L hash -r vendor.xxx.hardware:vendor/amlogic/common/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.xxx.hardware.systemcontrol@1.0::ISystemControl
========================================================================
参数含义解释如下:
./out/host/linux-x86/bin/hidl-gen:启动 hidl-gen 工具,Android源码编译后会自动在out目录生成。

-L hash:指定生成的代码使用的 hash 方法,这里使用了 hash 方法。

-r vendor.xxx.hardware:vendor/xxx/common/interfaces:指定 vendor.xxx.hardware 包的路径,该路径为 vendor/xxx/common/interfaces。

-r android.hardware:hardware/interfaces:指定 android.hardware 包的路径,该路径为 hardware/interfaces。

-r android.hidl:system/libhidl/transport:指定 android.hidl 包的路径,该路径为 system/libhidl/transport。

vendor.xxx.hardware.systemcontrol@1.0::ISystemControl:指定生成的接口名称为vendor.xxx.hardware.systemcontrol@1.0::ISystemControl。

综上所述,该命令的含义是使用指定的参数生成 vendor.xxx.hardware.systemcontrol@1.0::ISystemControl 接口的代码,并使用 hash 方法进行处理。
========================================================================
命令生成结果:
17f4735ec94348019451ed1a20aff38acfad5a06861e58a893fcf249c127a290 vendor.xxx.hardware.systemcontrol@1.0::ISystemControl

hidl-gen源码路径为:/system/tools/hidl/
随着系统编译会生成二进制文件:hidl-gen

最终生成目录为:/out/host/linux-x86/bin/
可以在该目录下直接使用hidl-gen, 如果需要把工具备份到其它目录使用,需要同时把lib库(这些lib库文件都位于/out/host/linux-x86/lib64/目录下,需要在hidl-gen所在目录下创建文件夹lib64,然后把上面的库同时copy到lib64/下)一同备份。

方法二

执行update-makefiles.sh
把current.txt和update-makefiles.sh文件拷贝到HIDL interface对应的package 根目录下。然后
在android源码根目录下执行update-makefiles.sh。如果hash值有问题,则会生成一个新的hash值。

方法三

代码全编译
在Android源码整包编译时,会报错,并且会在报错的地方有新的hash值,把这个新的值替换到对应的current.txt中即可。

参考链接:

https://www.jianshu.com/p/8098c0aec806

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值