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 用于將服務發(fā)布出去茄唐。
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();