欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在 Arch Linux 上安装 Anbox:轻松搭建移动端模拟器环境

最编程 2024-02-24 07:31:34
...

Anbox 介绍

  • Anbox 是一个可以在 GNU/Linux 发行版上运行 Android App 的容器,是一个开源兼容层。
  • 其工作原理是在 LXC 容器中运行 Android 环境,重新创建 Android 的目录结构作为可挂载的 loop 镜像,同时使用本机 Linux 内核来执行应用,所以没有虚拟化的开销,既轻量又保障了运行速度。
  • 每个 Android 应用将在一个单独窗口打开,就像 Linux 本地应用程序一样。

安装过程

1、环境要求

  • Anbox 的 dkms 模块在内核版本 ≥ 5.7 下不会工作。
  • 需要运行带有 ashmem 和 binder 模块的内核,但它们不是 Arch Linux 默认内核 ( linux ) 的一部分。获得带有 Anbox 所需模块的内核的可选方法:
    • 自行重新编译内核
    • 从 AUR 里构建一个已经包含特定补丁的内核包
    • 安装其他自带所需模块的内核,如 linux-zen

2、开始安装

  • 安装 Linux 内核头文件和所需模块:

    sudo pacman -S linux-headers
    yay -S anbox-modules-dkms-git
    
  • 安装 Anbox 镜像和容器:

    yay -S anbox-image anbox-git
    
    • anbox-image 是官方镜像,可根据需要选择其他镜像,如 anbox-image-gapps。
    • 安装过程中如果 anbox-git 和 anbox-modules-dkms-git 因 99-anbox.rules 文件而发生冲突,将该文件删除后重新安装即可。
  • 加载 DKMS 模块:

    sudo modprobe ashmem_linux
    sudo modprobe binder_linux
    

    检查设备:

    ls -1 /dev/{ashmem,binder}
    

    看到如下信息,说明模块加载成功:

    /dev/ashmem
    /dev/binder
    
  • 如果内核正在使用 binderfs,则还需挂载 binderfs 文件:

    • 创建文件 /etc/tmpfiles.d/anbox.conf ,写入以下内容,实现启动时创建/dev/binderfs
      d! /dev/binderfs 0755 root root
      
    • 在 /etc/fstab 中添加下面这一行,实现启动时挂载 binderfs :
      none                         /dev/binderfs binder   nofail  0      0
      
  • 启动服务,设置开机自启:

    sudo systemctl start anbox-container-manager.service
    sudo systemctl enable anbox-container-manager.service
    

3、配置网络

  • Arch Wiki 提供了三种联网方案:NetworkManager、systemd-networkd、anbox-bridge。
  • 笔者采用 anbox-bridge 方式:
    • 下载 anbox-bridge.sh 脚本到 /usr/bin 目录下,并赋予可执行权限
    • 创建文件 /etc/systemd/system/anbox-container-manager.service.d/enable-anbox-bridge.conf 并写入以下内容:
      [Service]
      ExecStartPre=/usr/bin/anbox-bridge.sh start
      ExecStopPost=/usr/bin/anbox-bridge.sh stop
      

4、安装 adb 工具

  • adb ( Android Debug Bridge ) 是安卓开发调试工具,我们用它来管理 Anbox 内的安卓应用。
    sudo pacman -S android-tools
    

adb 使用

  • 安装应用

    adb install /path/to/app.apk
    
  • 查看应用列表

    adb shell pm list packages
    
  • 卸载用户应用

    adb uninstall app.name
    
  • 卸载系统应用

    adb uninstall --user 0 app.name
    

尚未解决的问题

  • 某些应用打开后,窗口上方的标题栏消失,导致整体画面上移但实际点击区域未移动,且下方留有黑边。
  • 未挂载 binderfs 时,开关机会提示 [FAILED]Failed to Mount Android Binder File System
  • 按 Arch Wiki 步骤挂载 binderfs 后,开关机提示 [FAILED]Failed to Mount /dev/binderfs

Reference

  • Arch Wiki: wiki.archlinux.org/title/Anbox
  • Cloud Atlas: cloud-atlas.readthedocs.io/zh_CN/lates…
  • Bigshans' Blog: bigshans.github.io/post/anbox-…