在 Linux 上通过 Waydroid 使用安卓应用

最近翻开了尘封已久的《标准日本语》,而学习语言,就不得不多听多练,教材提供了功能还不错的 APP,但如果能在电脑上运行显然更方便

(教材附赠光盘上的内容可以在一位热心 up 的 专栏 里查看)

参考 官方文档 ,先安装 waydroid

1
yay -S waydroid

然后初始化

1
waydroid init

如果网络没有问题, waydroid 会自动下载所需要的镜像,否则需要手动下载后将镜像解压到特定目录,再使用 -f 参数设置使用本地镜像(可看官方文档) 记得启动相关的服务

1
2
sudo systemctl stars waydroid-container.service
sudo systemctl enable waydroid-container.service

接下来就是排错时间 😎

会话启动错误

美滋滋地启动(不需要 sudo,需要你 sudo 的时候程序会告诉你)

1
waydroid session start

发现报错 RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start,查看详细日志

1
waydroid log

发现如下信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(000848) [17:04:10] % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
vnic is waydroid0

dnsmasq: failed to create listening socket for 192.168.240.1: Address already in use
Failed to setup waydroid-net.
Failed to setup waydroid-net.
(000848) [17:04:11] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(000848) [17:04:11] NOTE: The failed command's output is above the ^^^ line in the log file: /var/lib/waydroid/waydroid.log
(004399) [17:04:11] org.freedesktop.DBus.Python.RuntimeError: Traceback (most recent call last):
  File "/usr/lib/python3.13/site-packages/dbus/service.py", line 712, in _message_cb
    retval = candidate_method(self, *args, **keywords)
  File "/usr/lib/waydroid/tools/actions/container_manager.py", line 31, in Start
    do_start(self.args, session)
    ~~~~~~~~ ^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/waydroid/tools/actions/container_manager.py", line 138, in do_start
    tools.helpers.run.user(args, command)
    ~~~~~~~~~~~~~~~~~~~~~~ ^^^^^^^^^^^^^^^
  File "/usr/lib/waydroid/tools/helpers/run.py", line 58, in user
    return tools.helpers.run_core.core(args, msg, cmd, working_dir, output,
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                     output_return, check, sudo)
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/waydroid/tools/helpers/run_core.py", line 343, in core
    check_return_code(args, code, log_message)
    ~~~~~~~~~~~~~~~~~ ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/waydroid/tools/helpers/run_core.py", line 219, in check_return_code
    raise RuntimeError("Command failed: " + log_message)
RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start

(004399) [17:04:11] RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start

在网上找了一大圈,感觉这个问题各有各的解决方案,我在一个 issue 里找到了一个神奇的解决方案,经测试, clash-verge-rev 与 waydroid 存在冲突,在打开 waydroid 之前需要将 clash 临时关掉,之后再将 clash 重新打开即可 🐱 启动会话时命令会阻塞,不太方便,只要不报错我们就关掉,从程序菜单里面的 waydroid 快捷方式启动就好

apk 架构不支持

因为一般安装的都是 x86_64 的安卓,而我们的标日 app 只支持 arm(那为什么之前安装明日方舟没有问题呢 😎 ,大概是因为本生就支持 x86_64 ),通过搜索发现我们需要安装转译层, github 上提供了很好用的 waydroid 脚本 ,跟着 readme 来就行,我安装的是 libhoudini,因为 libndk 会导致闪退

网络问题

文档里说,网络应该开箱即用,但是我却访问不到网络,这里可以通过

1
waydroid shell

进行调试,经过 deepseek 排查发现可能是没有配置 nat 的缘故,通过以下命令可以解决

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 添加正确的 NAT 规则(使用 192.168.240.0/24 ),这个是你 waydroid 启用的子网,不同机器上可能不一样
sudo iptables -t nat -A POSTROUTING -s 192.168.240.0/24 -j MASQUERADE
sudo iptables -A FORWARD -i waydroid0 -j ACCEPT
sudo iptables -A FORWARD -o waydroid0 -j ACCEPT

# 保存规则(确保安装 iptables)
sudo iptables-save | sudo tee /etc/iptables/iptables.rules

# 重启服务使配置生效
sudo systemctl restart iptables
sudo systemctl restart waydroid-container

可能还需要配置服务让每次开机时生效,我自己一连上网就把离线资源下好了

声音问题

发现没有声音,鼓捣一会发现是声音太小,去安卓设置里面把媒体声音调大点 😆

tips

可以通过

1
waydroid prop set persist.waydroid.multi_windows true

设置多窗口模式

 成功运行!

主页访问量: ~
使用 Hugo 构建
主题 StackJimmy 设计