1、定义.hal接口文件,如:

在vendor/sprd/interface中新建目录hello,其中定义好hidl接口,如:

 package vendor.sprd.hardware.hello@1.0;

 interface IHello {

     helloWorld(string name) generates (string result);

 };

2、利用hidl-gen工具生成通信框架及业务类模板

# PACKAGE=vendor.sprd.hardware.hello@1.0
# LOC=vendor/sprd/interfaces/hello/1.0/default/
# hidl-gen -o $LOC -Lc++-impl -r vendor.sprd.hardware:vendor/sprd/interfaces -r android.hidl:system/libhidl/transport $PACKAGE
# hidl-gen -o $LOC -Landroidbp-impl -r vendor.sprd.hardware:vendor/sprd/interfaces -r android.hidl:system/libhidl/transport $PACKAGE

这样在default下,可见新生成Hello.cpp  Hello.h文件,此为我们将要实现的业务逻辑类

 struct Hello : public IHello {
// Methods from ::vendor::sprd::hardware::hello::V1_0::IHello follow.
Return<void> helloWorld(const hidl_string& name, helloWorld_cb _hidl_cb) override; // Methods from ::android::hidl::base::V1_0::IBase follow. }; // FIXME: most likely delete, this is only for passthrough implementations
// extern "C" IHello* HIDL_FETCH_IHello(const char* name);

在Hello.cpp中实现之

3、运行业务逻辑,上面的Hello.cpp代码需要在进程中运行,所以需要新建一个

创建文件service.cpp、vendor.sprd.hardware.hello@1.0-service.rc,

上面的业务类可以编译成so加载到此进程中,也可以把代码直接编译成bin文件运行。这里采取前者

bp文件如下:

 1 cc_binary {
2 name: "vendor.sprd.hardware.hello@1.0-service",
3 init_rc: ["vendor.sprd.hardware.hello@1.0-service.rc"],
4 relative_install_path: "hw",
5 vendor: true,
6
7 srcs: [
8 "Hello.cpp",
9 "service.cpp"
10 ],
11
12 shared_libs: [
13 "libcutils",
14 "liblog",
15 "libhidlbase",
16 "libhidltransport",
17 "libhardware",
18 "libutils",
19 "vendor.sprd.hardware.hello@1.0",
20 ],
21 }

sevice.cpp:

 int main() {
ALOGD("Hello hidl main()..."); android::sp<IHello> hello = new Hello(); configureRpcThreadpool(, true /*callerWillJoin*/); if (hello != nullptr) {
if (::android::OK != hello->registerAsService()) {
ALOGE("Error while registering IHello service");
return ;
}
} else {
ALOGE("Can't create instance of Hello, nullptr");
} joinRpcThreadpool(); return ; // should never get here
}

4、至此,命令行下启动vendor.sprd.hardware.hello@1.0-service可执行文件,即可运行该hidl服务

5、测试文件:

 int main() {
int ret; android::sp<IHello> service = IHello::getService();
if (service == nullptr) {
printf("Failed to get service\n");
return -;
} service->helloWorld("Trump", [&](hidl_string result) {
printf("%s\n", result.c_str());
}); return ;
}

android hidl的更多相关文章

  1. Android HIDL学习(2) ---- HelloWorld【转】

    本文转载自: 写在前面 程序员有个癖好,无论是学习什么新知识,都喜欢以HelloWorld作为一个简单的例子来开头,咱们也不例外. OK,咱这里都是干货,废话就不多说啦,学习HIDL呢咱们还是需要一些 ...

  2. Android O HIDL的实现对接【转】

    本文转载自:https://blog.csdn.net/gh201030460222/article/details/80551897 Android O HIDL的实现对接1. HIDL的定义1.1 ...

  3. Android源码分析二 硬件抽象层(HAL)

    一 什么是HAL HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现.借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统.HAL 实现会 ...

  4. AndroidO Treble架构下Hal进程启动及HIDL服务注册过程【转】

    本文转载自:https://blog.csdn.net/yangwen123/article/details/79854267 通过前面对Treble架构的介绍,我们知道,Android Framew ...

  5. HIDL学习笔记

    一.HIDL简单介绍 HIDL是Android8.0新出的一个技能,以service和client的方式实现hal接口,目的是想使Android系统和BSP解绑,使系统升级更加方便.HIDL的使用方法 ...

  6. Android内存分析工具

    在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具. 文章参考: 1.dumpsys 2.memory-analysis-command 1 ...

  7. Android init介绍(下)

    上一篇请参考<Android init介绍(上)> 5. AIL 在init启动过程中,系统服务等均是通过解析rc文件来启动,而rc文件则是由Android初始化语言(Android In ...

  8. HIDL概述【转】

    本文转载自:https://blog.csdn.net/u013357557/article/details/84561457 HIDL背景Treble 是 Google Android 团队的一项重 ...

  9. Android : 供应商原生开发套件 (VNDK)

    一.VNDK概述 VNDK(Vendor Native Development Kit)是一组专门用于vendor实现其HAL的lib库,因为自Android 8.0以来,Google引入了Trebl ...

随机推荐

  1. 解决Java线程池任务执行完毕后线程回收问题

      转载请注明出处:http://www.cnblogs.com/pengineer/p/5011965.html         对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所 ...

  2. solr集群搭建(SolrCloud)

    SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,索引量很大,搜索请求并发很高时可以使用SolrCloud.它是基于 Solr 和Zookeeper的分布式搜 ...

  3. xss过滤与单例模式(对象的实例永远用一个)

    kindeditor里面可以加入script代码,使用re可以过滤掉python有个专门的模块可以处理这种情况,beautifulsoup4 调用代码: content = XSSFilter().p ...

  4. 第7天:Django模板使用与表单

    模板的配置 作为web框架,Django提供了模板,用于编写html代码,模板的设计实现了业务逻辑view与现实内容template的解耦.模板包含两部分: 静态部分: 包含html.css.js 动 ...

  5. mybatis报错(三)报错Result Maps collection does not contain value for java.lang.Integer解决方法

    转自:https://blog.csdn.net/zengdeqing2012/article/details/50978682 1 [WARN ] 2016-03-25 13:03:23,955 - ...

  6. Java基础学习(1)

    Java基础知识 Java平台 1995年由Sun公司创建 Java的体系结构 JVM Java Virtue Machine Java代码的执行顺序 JDK Java Development Kit ...

  7. web框架-(一)初识web框架

    一.web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:ut ...

  8. 算法竞赛进阶指南 0x00 基本算法

    放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilt ...

  9. java并发学习--第十章 java内存模型的内存语义

    一.锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则. 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 我们把上面这句话再整理下: ...

  10. java ThreadGroup源码分析

    使用: import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction; public class Test { public s ...