5 运行方法与参考借鉴

编译Android镜像

5.1 下载安装repo

# 下载repo,参考了清华源的https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/的帮助
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
# 临时配置repo使用国内清华源镜像,也可以加入~/.bashrc永久配置
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
# 在android目录下初始化repo使用当前manifests仓库来下载代码

5.2 拉取源码

5.2.1 Bitcomet Demo1版本代码

mkdir android && cd android
repo init -u https://gitlab.eduxiji.net/Willzen/project788067-124647.git -b bitcomet-demo1
# repo开始同步拉取
repo sync

5.2.2 Anbox Android10的测试代码(调试图形输出用)

mkdir android && cd android
repo init -u https://gitlab.eduxiji.net/Willzen/project788067-124647.git -b anbox10
# repo开始同步拉取
repo sync

5.2.3 Bitcomet决赛最终代码

mkdir android && cd android
repo init -u https://gitlab.eduxiji.net/Willzen/project788067-124647.git
# repo开始同步拉取
repo sync

5.3 编译安卓镜像

# 切换进android目录,引入环境变量
cd android
source build/envsetup.sh
# 选择编译工程
lunch anbox_x86_64-userdebug
# 开始编译(-j32表示最大用32线程去编译,请根据现有自己CPU核心数选择)
make -j32
# 编译成功后打包镜像
pack

5.4 编译Anbox(第一版Demo不需要)

# 下载本项目的Anbox源码
git clone https://gitlab.eduxiji.net/Willzen/proj156_vendor_anbox.git
# 进入源码目录
cd proj156_vendor_anbox
# 编译
mkdir build
cd build
cmake ..
make -j8
# 编译成功的二进制文件在build/src/anbox

5.5 测试运行

注意以下步骤需要root权限

5.5.1 第一版Demo测试方法

# 挂载打包后工程当前目录下出现的android.img镜像
mkdir tmp
mount android.img tmp
# 导入镜像到Dokcer
cd tmp
tar --xattrs -c . | sudo  docker import - bitcomet:latest
# 检查Ubuntu 20.04内核的BinderFS能否正常挂载
mkdir /dev/binderfs
mount -t binder binder /dev/binderfs
# 运行Docker的Android容器
docker run -itd --rm --memory-swappiness=0 --privileged -p 5555:5555 --name bitcomet bitcomet:latest /init androidboot.hardware=bitcomet

5.5.2 Bitcomet决赛最终方案测试方法

# 挂载打包后工程当前目录下出现的android.img镜像
mkdir tmp
mount android.img tmp
# 导入镜像到Dokcer
cd tmp
tar --xattrs -c . | sudo  docker import - bitcomet:latest
# 检查Ubuntu 20.04内核的BinderFS能否正常挂载
mkdir /dev/binderfs
mount -t binder binder /dev/binderfs
# 运行Anbox的Session Manager
./anbox session-manager --standalone --experimental
# 运行Docker的Android容器
ddocker run -itd --rm --memory-swappiness=0 --privileged -p 5555:5555 --name anbox -v /run/user/1000/anbox/sockets/qemu_pipe:/dev/qemu_pipe -v /run/user/1000/anbox/sockets/anbox_audio:/dev/anbox_audio:rw -v /run/user/1000/anbox/sockets/anbox_bridge:/dev/anbox_bridge:rw -v /run/user/1000/anbox/input/event0:/dev/input/event0:rw -v /run/user/1000/anbox/input/event1:/dev/input/event1:rw -v /run/user/1000/anbox/input/event2:/dev/input/event2:rw anbox:test22 /init androidboot.hardware=goldfish
# 使用Anbox launch打开Launher启动器APP
./anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity