robox源码分析1

anbox是啥? anbox是一个与doker类似的虚拟化技术,不同之处是anbox专用于安卓的虚拟化,docker是通用的虚拟化技术。
因此,anbox更轻量级,适合资源少的嵌入式设备虚拟化。

robox主要源码入口:

#include "anbox/daemon.h"      
#include "anbox/utils.h"       

int main(int argc, char **argv) {
    
    
        anbox::Daemon daemon;  
        return daemon.Run(anbox::utils::collect_arguments(argc, argv));
} 

Daemon类的功能:

负责anbox与host宿主机的通讯,将android 的系统请求,通过Unix socket通讯(路径是"/dev/anbox_bridge"),转发给宿主机,宿主机调用设备文件对应的硬件去渲染安卓app

namespace anbox {
    
    
        Daemon::Daemon() {
    
    
        }

        Daemon::~Daemon() {
    
    
        }
        
        int Daemon::run() {
    
    
                auto var1 = 100;

                // 创建进程系统信号跟踪器
                auto trap = core::posix::trap_signals_for_process({
    
    core::posix::Signal::sig_term,
                                core::posix::Signal::sig_int});
                // 收到SIGINT 信号,则停止系统信号跟踪器
                trap->signal_raised().connect([trap](const core::posix::Signal&) {
    
    
                                trap->stop();
                                });

                // 与宿主机通讯的对象的智能指针,Host包含unix socket, protobuf rpc
                auto host_connector = std::make_shared<HostConnector>();
                host_connector->start();

                android::defaultServiceManager()->addService(
                                android::String16(android::PlatformService::service_name()),
                                new android::PlatformService(host_connector->platform_api_stub()));

                android::ProcessState::self()->startThreadPool();

                // 调用信号跟踪main loop, 开始监听信号、事件,读取"/dev/anbox_bridge"消息,消息派发给安卓通用服务管理器,执行对应的任务
                trap->run();

                android::IPCThreadState::self()->joinThreadPool();

                return EXIT_SUCCESS;
        }
}

猜你喜欢

转载自blog.csdn.net/jacky128256/article/details/121462138