Android 8.0引入hidl,原因是为了将hal从system.img移除出去,方便android版本升级。
下面简单说一个hidl的例子
一.编写hal文件,可以自动生成so库和java库,以mtk的nvram为例子
路径:vendor/mediatek/proprietary/hardware/interfaces/nvram/1.0/
包含三个文件
hal文件定义了system与vendor hal交互的接口,android.bp和android.mk用于生成so库和java库
interface INvram {
readFileByName(string filename, uint32_t size)
generates (string data);
writeFileByNamevec(string filename, uint32_t size, vec<uint8_t> data)
generates (int8_t retval);
};
二.编写服务端
vendor/mediatek/proprietary/external/libnvram/nvram_agent_hidl
nvram_agent_binder.rc 用于将服务发布出去。
nvram_agent.cpp 中启动服务
main(void)
{
int ret = 0;
using vendor::mediatek::hardware::nvram::V1_0::INvram;
using android::hardware::defaultPassthroughServiceImplementation;
try {
NVRAM_LOG("NvRAMAgent Service is now ready");
ret =defaultPassthroughServiceImplementation<INvram>();
} catch (const std::__1::system_error & e) {
NVRAM_LOG("NvRAMAgent system_error");
}
return ret;
}
三.编写java客户端
import包,获取服务。
import vendor.mediatek.hardware.nvram.V1_0.INvram;
337 INvram agent = INvram.getService();
379 INvram agent = INvram.getService();