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/
包含三个文件


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

二.编写服务端

vendor/mediatek/proprietary/external/libnvram/nvram_agent_hidl


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<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(); 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容