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