Android:Android O hidl简述

Android 8.0引入hidl,原因是为了将hal从system.img移除出去,方便android版本升级。

下面简单说一个hidl的例子

一.编写hal文件,可以自动生成so库和java库,以mtk的nvram为例子

路径:vendor/mediatek/proprietary/hardware/interfaces/nvram/1.0/
包含三个文件


Android:Android O hidl简述_第1张图片
image.png

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 data)
            generates (int8_t retval);
};

二.编写服务端

vendor/mediatek/proprietary/external/libnvram/nvram_agent_hidl


Android:Android O hidl简述_第2张图片
image.png

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();
    } 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(); 

你可能感兴趣的:(Android:Android O hidl简述)