目录

环境:bitcomet比特彗星版本

anbox宿主机编译流程见另外一篇文章

搭建anbox运行环境(x100笔记本和d2000pc机)

  • 问题1

proj156_vendor_anbox/external/cpu_features/test/filesystem_for_testing.cc:48:15: error: use of old-style cast to ‘int’ [-Werror=old-style-cast]

  • 解决办法

修改external/CMakeLists.txt文件,增加set(BUILD_TESTING OFF)或者将add_subdirectory(cpu_features)改为add_subdirectory(cpu_features EXCLUDE_FROM_ALL)

  • 问题2

proj156_vendor_anbox/external/cpu_features/src/cpuinfo_aarch64.c:103:3: error: switch missing default case [-Werror=switch-default]

  • 解决办法

修改external/CMakeLists.txt文件,增加set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error")

  • 问题3

proj156_vendor_anbox/external/cpu_features/include/cpuinfo_x86.h:205:2: error: #error "Including cpuinfo_x86.h from a non-x86 target."
比特彗星默认设置目标平台为x86

  • 解决办法
    修改src/anbox/cmds/check_features.cpp文件,
    +#if defined(CPU_FEATURES_ARCH_X86)
     #include "cpuinfo_x86.h"
    +#endif
    修改src/anbox/cmds/system_info.cpp文件,
    +#if defined(CPU_FEATURES_ARCH_X86)
     #include "cpuinfo_x86.h"
    +#endif

  • 问题4

proj156_vendor_anbox/src/anbox/graphics/program_family.cpp:40:20: error: ‘runtime_error’ is not a member of ‘std’

  • 解决办法

修改src/anbox/graphics/program_family.cpp,增加#include <stdexcept> 头文件。

  • 问题5

proj156_vendor_anbox/src/anbox/input/manager.h:36:8: error: ‘uint32_t’ in namespace ‘std’ does not name a type;

  • 解决办法

修改src/anbox/input/manager.h,增加#include <cstdint> 头文件。

修改后完成编译,在build/src/目录下生成anbox可执行文件。搭建临时环境,初步测试比特彗星版本anbox:

1sudo systemctl stop anbox-container-manager.service 2sudo ln -s /dev/binderfs/anbox-binder /dev/binder 3sudo ln -s /dev/binderfs/anbox-hwbinder /dev/hwbinder

# 运行Anbox的Session Manager
./anbox session-manager --standalone --experimental        //--standalone --experimental 这两个参数是阻止容器管理器启动默认容器,允许用户使用实验功能。

查看/run/user/1000/目录下,生成了anbox目录以及子目录input下的event文件和sockets目录下的qemu_pipe文件。

初步验证编译出的anbox可执行程序成功创建event0、event1、event2和anbox_audio、anbox_bridge、qemu_pipe。

供后续docker启动android时将文件映射进android系统,从而完成android系统和宿主机之间的通信链路的建立。