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;
}
}