Android12之如何查看hidl服务

发布于:2024-04-24 ⋅ 阅读:(26) ⋅ 点赞:(0)

1.前言
本篇目的:在Android源码中提供了cmd、service、dumpsys来获取Binder服务的工具,但是Android8.0以后推出HIDL服务, 前边三个工具是无法获取到的,下面我们如何获取HIDL服务呢?

注意:Android13开始,Camera将使用AIDL替代HIDL。

2.解决方式
Google为我们提供了一个脚lshal的工具,下面来看下它的用法。

<1>.lshal用法

在system/tools/hidl/test/hidl_test/hidl_test_servers.cpp是一个创建HIDL服务的demo,可以编译以后运行查看

ForkServer<IBaz>::run("dyingBaz");
static void run(const std::string& serviceName){
	defaultPassthroughServiceImplementation<T>(serviceName);
}
注意:HIDL服务名为:dyingBaz

启动服务hidl_test_servers64向hwservicemanager注册HIDL服务"dyingBaz"
# ./hidl_test_servers64

# lshal |grep dyingBaz                                                                                                                                                                                           
X     ? android.hardware.tests.baz@1.0::IBaz/dyingBaz                                 N/A        N/A

<2>.查看系统所有HIDL服务
1.binderized模式
HIDL向hwservicemanager(/dev/hwbinder)注册binder服务。

2.直通模式
HIDL passthrough implementations
 

# lshal
| All HIDL binderized services (registered with hwservicemanager)
VINTF R Interface                                                                                 Thread Use Server Clients
FM    Y android.frameworks.cameraservice.service@2.0::ICameraService/default                      0/2        1293   674

<2>.service和lshal命令对比
 # service list|grep ICameraProvider
注意:service命令什么也没找到,为空。

# lshal |grep ICameraProvider                                                                                                            
<3>.查看manifest清单
# lshal --init-vintf
 
<4>.查看HIDL服务名、线程数量和客户端梳理
# lshal list -Vliepc                                                                                                                                                                                       
| All HIDL binderized services (registered with hwservicemanager)