android hidl
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的更多相关文章
- Android HIDL学习(2) ---- HelloWorld【转】
本文转载自: 写在前面 程序员有个癖好,无论是学习什么新知识,都喜欢以HelloWorld作为一个简单的例子来开头,咱们也不例外. OK,咱这里都是干货,废话就不多说啦,学习HIDL呢咱们还是需要一些 ...
- Android O HIDL的实现对接【转】
本文转载自:https://blog.csdn.net/gh201030460222/article/details/80551897 Android O HIDL的实现对接1. HIDL的定义1.1 ...
- Android源码分析二 硬件抽象层(HAL)
一 什么是HAL HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现.借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统.HAL 实现会 ...
- AndroidO Treble架构下Hal进程启动及HIDL服务注册过程【转】
本文转载自:https://blog.csdn.net/yangwen123/article/details/79854267 通过前面对Treble架构的介绍,我们知道,Android Framew ...
- HIDL学习笔记
一.HIDL简单介绍 HIDL是Android8.0新出的一个技能,以service和client的方式实现hal接口,目的是想使Android系统和BSP解绑,使系统升级更加方便.HIDL的使用方法 ...
- Android内存分析工具
在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具. 文章参考: 1.dumpsys 2.memory-analysis-command 1 ...
- Android init介绍(下)
上一篇请参考<Android init介绍(上)> 5. AIL 在init启动过程中,系统服务等均是通过解析rc文件来启动,而rc文件则是由Android初始化语言(Android In ...
- HIDL概述【转】
本文转载自:https://blog.csdn.net/u013357557/article/details/84561457 HIDL背景Treble 是 Google Android 团队的一项重 ...
- Android : 供应商原生开发套件 (VNDK)
一.VNDK概述 VNDK(Vendor Native Development Kit)是一组专门用于vendor实现其HAL的lib库,因为自Android 8.0以来,Google引入了Trebl ...
随机推荐
- P2586 [ZJOI2008]杀蚂蚁
传送门 快乐模拟,修身养性 代码长度其实还好,主要是细节多 只要知道一些计算几何基础知识即可快乐模拟,按着题目要求一步步实现就行啦 注意仔细读题,蚂蚁每 $5$ 秒乱走一次的时候是只要能走就走了,不一 ...
- mysql中的substring()截取字符函数
substring(参数1,参数2,参数3),其中三个参数分别表示:参数1表示需要截取的字符串,参数2表示从字符串的那个位置开始截取(字符串下标从1开始),参数3表示要截取多少位,如果不写,表示截取从 ...
- bzoj5089 最大连续子段和 分块+复杂度分析+凸包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5089 题解 本来打算迟一点再写这个题解的,还有一个小问题没有弄清楚. 不过先写一下存个档吧. ...
- 手动创建一个Spring Boot 2.x项目
spring boot 2.1.9版本quick start参考文档地址:https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference ...
- Java:字符编码
常用的字符编码 UFT-8 ISO-8859-1 GBK/GBK2312
- 【leetcode】313. Super Ugly Number
题目如下: 解题思路:总结一下这么几点,一出一进,优先级队列排序,保证每次输出的都是当前的最小值.解法大致如图: 代码如下: #include<map> #include<queue ...
- Spark--wordcount(词频降序)
import org.apache.spark.{SparkConf, SparkContext} object wc2 { def main(args: Array[String]): Unit = ...
- 改变icon方向
例你想要箭头朝上的图标而你只有箭头朝下的图标,不幸的是你又没有朝上的图标,那就旋转图标. <i class="icon iconfont _icon-iconfontfanhui4&q ...
- Apache编译教程
手工编译安装Apache, 版本httpd-2.4.29(免费提供安装包,懒人福利:提供安装脚本):https://blog.51cto.com/13728740/2158576 编译安装apache ...
- [BZOJ3779]重组病毒:Link-Cut Tree+线段树
分析 其实其他的题解说的都很清楚了. 一个点出发感染到根结点所花费的时间是路径上虚边的条数+1. RELEASE相当于\(access()\). RECENTER相当于\(makeroot()\).( ...