2. Bitcomet设计开发文档

简介

        Bitcomet是一个基于原有Anbox向Android 11移植实现一种基于Linux系统运行Android 11的解决方案,以下均称呼Bitcomet。其主要与原有Anbox的改进点在于Android所运行的环境由LXC实现变为更加主流的Docker实现,原有在Anbox不再更新的Android 7更新为Android 11。此外,为了让Android 11能在Docker中运行,本项目针对其SDcard的文件系统挂载机制SELinux安全机制等进行了相应的移植与优化。为了让Android能在Linux上满足正常使用以及调用GPU进行渲染的需求,本项目参考并移植原有Anbox以及Google安卓模拟器中的相关实现,在移植并搭建起Anbox的跨系统环境通信基础上,使相应的Android各类接口打通到外部Linux,其中最基础的包括图形渲染、图形输出、键鼠输入这三个部分的接口。

        本项目主要还是基于Anbox来参考实现,旨在完成以下四个目标:

  • 目标1:完成Android11的SDcard的文件系统挂载机制SELinux安全机制、非特权模式下运行处理对应在Docker容器环境内的处理。
  • 目标2:配置安卓项目工程,实现并配置好各个需要的系统模块和AIDL、HIDL、HAL模块,搭建初步调试与测试的Demo1版本,使用adb配合Scrcpy对内部Android远程访问以方便有个初步预期,并且方便本项目有个初步测试的环境。
  • 目标3:完成Anbox通信部分实现向Android 11的移植,使Android能与Anbox外部实现跨系统环境通信。
  • 目标4:完成Anbox安卓其余部分的各个模块移植,使Android的三个基础部分OpenGL、HWC图形输出、键鼠输入能正常工作。

        目前,我们的赛题完成度如下:

表2.1 赛题完成度
目标编号基本完成情况额外说明
1基本完成(≈85%)1. 与SDcard以及SELinux组件相关的Android 11的基本功能、SDcard文件管理、安装第三方软件、闹铃与联系人等基础应用测试均通过。
2. 非特权模式仅做了部分处理,未进行测试。
2基本完成(≈90%)1. 搭建好相关容器,进行相关基础测试并通过。
2. 目前网络部分由于在Docker特权模式下运行,可能会有Bug。
3初步完成(≈80%)1. 完成跨系统环境通信,安卓中Anbox的相关模块可以使用QEMU_PIPE(实际容器中是没有QEMU设备,而是使用了Unix Domain Socket代替,但其通信的相关通道仍然叫做QEMU PIPE)进行通信或者使用Anbox实现的RPC调用。
2. Anbox的OpenGL ES的emulation库实现初步测试能通过该通信创建QEMU_PIPE连接,实现RPC调用获取到主机侧支持的OpenGL信息。
3. 由于各个部分的模块暂未完全移植好,还需要全部移植才能测试所有功能。
4初步测试(≈60%)1. 已经把相应的Anbox的各个模块的移植到Android中,其中GPS与Audio模块使用了谷歌给Goldfish的实现。
2.OpenGL ES实现和HWC实现在Android 11下无法测试,由于Android 11的相关变动,导致输出画面调用了Gralloc的PostFB去输出,而在Anbox中是未做这部分RPC调用的,输出画面失败。
3.把相关方案在Android 10上进行测试,测试可以输出画面,但卡在安卓Launcher第一屏画面。
总计≈80%1. 本项目自立项以来经历了三个月的时间进行研究与开发,实现方案的过程中遇到困难重重,主要遇到的阻力在系统庞大、相关实现的资料缺失方面。
2. 目前还有部分的工作需要测试和完成。由于Android 11在图形和音频方面变动较大,即使目前进行了相关模块的移植,但是还需要在图形模块、音频模块、输入模块方面进行各类测试和调试工作。
3. 项目将放在Github进行公开,把截至目前学习的成果公开,希望后续有更多的参与者参与进来进行开发完善。