Android 在AOSP中,ServiceManager在哪里实现

Android 在AOSP中,ServiceManager在哪里实现,android,android-source,android-binder,Android,Android Source,Android Binder,在IServiceManager.cpp文件中,我看到了BnServiceManager::onTransact函数定义 在该函数中,有一个对“addService”、“listServices”等的调用 我找不到这些函数(在IServiceManager下声明)的实现 谁能告诉我,在哪里可以找到BnServiceManager的实现。在frameworks/base/cmds/servicemanager下 您可能想知道他们是如何找到servicemanager的,这是binder的一个功能,

IServiceManager.cpp
文件中,我看到了
BnServiceManager::onTransact
函数定义

在该函数中,有一个对“
addService
”、“
listServices
”等的调用

我找不到这些函数(在IServiceManager下声明)的实现

谁能告诉我,在哪里可以找到BnServiceManager的实现。

在frameworks/base/cmds/servicemanager下

您可能想知道他们是如何找到servicemanager的,这是binder的一个功能,在systemserver启动servicemanager(在service\u manager.c中调用main)之后,servicemanager将通过
ioctl(bs->fd,binder\u SET\u context\u MGR,0)将自己注册为binder的上下文\u管理器。然后你就可以从活页夹上得到服务了

因此,当其他服务想要使用服务管理器列出、查找或添加服务时,它将调用
IServiceManager.cpp
中的
defaultServiceManager
方法。该方法将查找句柄0以获取BpServiceManager。当您使用
BpServiceManager->addService
时,它不会调用
BnServiceManager
,这与CameraService等其他服务略有不同。活页夹将直接解析事务代码,并在
service\u manager.c
中调用
do\u add\u service
方法。您可能会注意到BpServiceManager使用的事务代码与svcmgr_处理程序中的事务代码完全相同

//transaction code used by svcmgr_handler
enum {
    SVC_MGR_GET_SERVICE = 1,
    SVC_MGR_CHECK_SERVICE,
    SVC_MGR_ADD_SERVICE,
    SVC_MGR_LIST_SERVICES,
};

//transaction code used by BpServiceManager.
enum {
        GET_SERVICE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION, //0x00000001
        CHECK_SERVICE_TRANSACTION,
        ADD_SERVICE_TRANSACTION,
        LIST_SERVICES_TRANSACTION,
    };
只有servicemanager是这样工作的,其他BpService将调用其BnService,例如,CameraService扩展了BnCameraService,因此它是CameraService的实际服务器端。BpCameraService将启动一个binder事务,binder事务最终将由bncomeraservice处理,bncomeraservice就是CameraService


您可以搜索整个AOSP,因为没有BnServiceManager的实现,所以不可能调用它

嗨,谢谢你的回复。我浏览了service_manager.c文件。我看到服务管理器使用句柄“0”将自己重新注册到绑定器,以指定它是服务管理器。那么,当一个服务请求(getService)转到BpServiceManager时,您的意思是说绑定器不会调用BnServiceManager::onTransact,而是调用在service_manager.c中注册的svcmgr_处理程序吗?在这种情况下,我可以知道为什么要定义BnServiceManager吗?如果我的理解是错误的,请纠正我。BnServiceManager的存在也让我很不安。感谢你优雅而清晰的解释~~感谢您很久以前就回答了这个问题,但是如果有人感兴趣,
BpServiceManager
已经定义好了