wsl2安装anbox


anbox是一个安卓容器,可以在linux上原生运行安卓应用(近期国产系统的安卓子系统基本是基于这个项目),既然wsl2运行的是linux内核,那应该也能跑anbox,加上wslg和gpu加速可用性应该不错。


安装准备:

  • windows dev 21364及以上。
  • 已安装wsl2和wslg。
  • 本教程使用Debian发行版安装,ubuntu系统无法启动,其他发行版请自行测试。

安装步骤:

编译内核并启用binder和ashmem模块(懒得自己编译的可以自动编译

  1. 安装依赖sudo apt update && sudo apt install g++ make flex bison libssl-dev libelf-dev bc libncurses-dev,这是编译linux内核必需的软件包。
  2. GitHub克隆内核的代码git clone -b linux-msft-wsl-5.10.y --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel
  3. cd WSL2-Linux-Kernel
    cp Microsoft/config-wsl .config
  4. make menuconfig
    分别开启
    device drivers -> android -> android drivers & android binder ipc driver
    device drivers -> staging drivers -> android -> Enable the Anonymous Shared Memory Subsystem
  5. make
    等待编译完成将arch/x86/boot/bzImage复制到你的Windows用户目录下改名为kernel
  6. 在Windows用户目录下创建.wslconfig并写入以下内容
[wsl2]
kernel = C:\\Users\\<你的用户名>\\kernel
  1. 重启wsl,在powershell输入wsl --shutdown并重新开启,用uname -a检查新内核是否启用(看看编译日期是否正确)

安装anbox

  1. 首先通过apt安装anbox
    修改软件源sudo sed -i 's/main/main contrib non-free/' /etc/apt/sources.list
    安装sudo apt update && sudo apt install anbox dbus-x11 pulseaudio-utils libgl1
  2. 此处下载anbox镜像放到/var/lib/anbox/android.img
  3. 建立/etc/init.d/anbox
#!/bin/sh
### BEGIN INIT INFO
# Provides: anbox-container-manager
# Required-Start:       $syslog $local_fs $remote_fs $network
# Required-Stop:        $syslog $local_fs $remote_fs $network
# Should-Start: $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: Anbox Container Manager
### END INIT INFO

. /lib/lsb/init-functions
prog=anbox-container-manager
PIDFILE=/var/run/$prog.pid
LOGFILE=/var/run/$prog.log
DAEMON="/usr/bin/anbox"
PARAMS="container-manager --daemon --privileged --data-path=/var/lib/anbox --use-rootfs-overlay"
DESC="Anbox Container Manager"
start() {
	log_daemon_msg "Starting $DESC" "$prog"
	if [ ! -s /var/lib/anbox/android.img ]; then
		log_end_msg 1
		exit 0
	fi
	start_daemon /usr/share/anbox/anbox-bridge.sh start
	if [ $? -ne 0 ]; then
		log_end_msg 1
		exit 1
	fi
	start_daemon $DAEMON $PARAMS > $LOGFILE &
	if [ $? -ne 0 ]; then
		log_end_msg 1
		exit 1
	fi
	if [ $? -eq 0 ]; then
		log_end_msg 0
	fi
	exit 0
}

stop() {
	log_daemon_msg "Stopping $DESC" "$prog"
	killall $DAEMON
	if [ $? -ne 0 ]; then
		log_end_msg 1
		exit 1
	fi
	if [ $? -eq 0 ]; then
		log_end_msg 0
	fi
	/usr/share/anbox/anbox-bridge.sh stop
	if [ $? -ne 0 ]; then
		log_end_msg 1
		exit 1
	fi
	if [ $? -eq 0 ]; then
		log_end_msg 0
	fi
	exit 0
}

force_reload() {
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	force-reload)
		force_reload
		;;
	restart)
		stop
		start
		;;

	*)
		echo "$Usage: $prog {start|stop|force-reload|restart}"
		exit 2
esac

并设为可执行sudo chmod +x /etc/init.d/anbox
4. 修改网络服务文件sudo nano /usr/share/anbox/anbox-bridge.sh在第一行插入alias iptables=iptables-legacy

启动anbox

新建启动脚本sudo nano /usr/share/anbox/start-anbox.sh

export $(dbus-launch --autolaunch=`cat /var/lib/dbus/machine-id`)
PROC_NAME=anbox
if [ `ps -ef |grep -w $PROC_NAME|grep -v grep|wc -l` -le 0 ];then
	sudo service anbox start
	anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
	echo 'ip rule add pref 32766 table main;ip rule add pref 32767 table local;ip route add default dev eth0 via 192.168.250.1;exit' | sudo /usr/share/anbox/anbox-shell.sh
else
	anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity
fi

增加执行权限sudo chmod +x /usr/share/anbox/start-anbox.sh,然后执行脚本看一下能否启动。

运行效果

image

当然还有一些问题,包括网络配置和音频与视频支持以及arm兼容层安装,下次再说吧。。。


更新:

  • 修复网络问题,在安卓启动后输入
    echo 'ip rule add pref 32766 table main;ip rule add pref 32767 table local;ip route add default dev eth0 via 192.168.250.1;exit' | sudo /usr/share/anbox/anbox-shell.sh
  • 有些软件无法安装是因为架构问题,需要安装houdini兼容层才能运行arm应用,参考此处
  • 安装软件请使用adb,直接在wsl中安装adb就可以连接anbox,可以先装一个酷安,之后就可以用酷安安装软件。
  • 没有声音/无法播放视频是解码器问题,参考此处
  • 声音延迟是anbox本身的问题,可以自己编译带patch的版本解决,相关资料
  • 鼠标在窗口边缘点击会改变窗口大小,无法点击屏幕,目前没有解决方法。。。
  • 输入法不可用,目前没有解决方法。
  • 目前正在尝试折腾deepin的uengine😂(应该解决了声音延迟和输入法问题)。

如有相关问题的解决方法欢迎探讨。


参考文章:在 WSL 2 下运行 Anbox 以及其他各种杂七杂八教程~~~~


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM