Waydroid的碎碎念

封面
安卓系统,已经融入了我们的生活,那怎么在电脑上运行安卓系统呢,小编
(好了请停止你的营销号模式

当然这是基于我的arch linux系统进行操作2333
至于为什么不配置Nvidia显卡相关设置,问就是Fa♂️Q Nvidia(逃
平时基本都是把n卡屏蔽了,省心hhh

将显示管理器从X11迁移到Wayland上

从X11迁到wayland上,当然不会山删掉x11,这样在sddm登陆的地方可以选择用wayland来开桌面

1
pacman -S plasma-wayland-session plasma-wayland-protocols qt5-wayland qt6-wayland xorg-xwayland

后面就是引用Ivon大佬的一些操作了

迁移内核

迁移到linux-zen内核

1
sudo pacman -S linux-zen linux-zen-headers

安装binder_linux并且加载到内核

1
2
paru -S binder_linux-dkms
sudo modprobe binder_linux # 现在不需要这样手动启动模块了

安装Waydroid

装依赖
如果你执意不配置venv的话,先执行这段指令再继续,不然pip会报错:sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk

1
2
paru -S python-gbinder python-pyclip dbus-python xclip wl-clipboard mailcap python-pgi
pip install PyGObject dbus-python

建议先开一个新的venv然后在其中操作完成后,再将该venv的site-packages整个丢到/usr/lib/python3.xx/site-packages/下,然后再恢复source你自己的venv。
如果后续系统更新的时候出现python-gobjectpython-cairofile already exist问题,强制覆盖安装一下以下的包然后就可以正常系统更新了:

1
sudo pacman -S python-gobject python-cairo --overwrite '*'

装Waydroid

1
paru -S waydroid waydroid-image

记得去grub里添加内核启动参数psi=1要不然waydroid启动会报错Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start

第一次启动的话,得先init一下容器
不过我是不打算弄带gms的,苏菲性能实在太差(悲

1
2
sudo waydroid init # for non Gapps
sudo waydroid init -s GAPPS -f # for Gapps

当然如果想要重新初始化waydroid就比如我之前闲得无聊弄了个安卓13的然后发现没libhoudini就想保数据回退,就这么做

1
sudo waydroid init -f

开一次机试一下

1
2
sudo systemctl start waydroid-container
waydroid show-full-ui

配置防火墙

不放通防火墙会导致Waydroid连不上网,甚至你无法使用adb connect进行调试。如果你跟我一样使用ufw防火墙,可以参考ArchWiki这样进行操作:

1
2
3
ufw allow 67
ufw allow 53
ufw default allow FORWARD

安装libhoudini

1
2
3
4
5
git clone --depth=1 https://github.com/casualsnek/waydroid_script
cd waydroid_script
sudo python3 -m pip install -r requirements.txt
cd waydroid_script
sudo python3 main.py

然后按照命令行的提示来操作就行

当执行完成后,就可以快乐的玩耍了

一些基本常用的操作

开机

1
waydroid show-full-ui

关机

1
sudo waydroid session stop && sudo waydroid container stop && sudo systemctl stop waydroid-container

以root身份进adb

1
sudo waydroid shell

连接adb网络调试
这东西会在你的电脑里再nat出一个子网,然后waydroid的ip被静态分配到192.168.240.112

1
adb connect 192.168.240.112

性能调优

对应用进行dex2oat优化
苏菲太需要dex2oat了要不然卡的很
如果你在带有root权限的安卓的shell中…

1
2
3
4
# 使用everything模式编译所有应用
cmd package compile -m everything -f -a
# 仅针对星穹铁道使用everything模式编译
cmd package compile -m everything -f com.MobileTicket

如果你在安卓的shell中…

1
2
3
4
# 使用everything模式编译所有应用
adb shell cmd package compile -m everything -f -a
# 仅针对星穹铁道使用everything模式编译
adb shell cmd package compile -m everything -f com.MobileTicket

可选编译类型
interpret-only: 不编译,仅靠解释运行应用,效率很低,占用空间最小;
space: 仅编译一小部分函数,其余不编译,占用空间较小;
balanced: 在占用空间与运行效率上做一平衡;
speed-profile: 将配置文件中标明的函数编译一遍,这些函数可能是热点函数,为部分编译,频繁使用的功能运行效率会变高,不常使用的效率便会很低;
speed: 将程序中所有函数都编译一遍,效率和占用空间均较高;
everything: 译所有代码,效率最高,能耗较低,占用空间最高。
细节见这篇文章

激活冰箱

1
adb shell dpm set-device-owner com.catchingnow.icebox/.receiver.DPMReceiver

开启全局小窗模式
这样你可以跟win11的WSA一样体验安卓程序

1
waydroid prop set persist.waydroid.multi_windows true

一些sao操作

Waydroid的内部存储是被映射到你的home目录下的,具体在这个目录:

~/.local/share/waydroid/data/media/0

你发现了啥?对的没错,它甚至很慷慨的把整个/data分区给映射出来了,也就是~/.local/share/waydroid/data这个目录
不过里面的东西所属的用户组跟你电脑的用户组不是同一个,可以通过ls -al进行查看
但是你可以以root用户的身份去对它进行一些读写,如果要让waydroid可以正常读写你改过的东西的话,还得记得把文件权限改回去哈
可以用这个命令将目录下所有文件(夹)的权限全改成安卓默认

1
sudo chown -R 10138 . && sudo chgrp -R 10138 . && sudo chmod -R 755 ./*

卸载waydroid

停止容器

1
sudo waydroid session stop && sudo systemctl stop waydroid-container

删除容器

1
2
paru -Rs waydroid
sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid

注意,最后rm的那个目录会把内部存储给清空,如果要备份数据,记得按上一步提到的去备份资料再删除。


Waydroid的碎碎念
http://blog.coolenoch.ink/2023/07/30/1Waydroid的碎碎念-230730/
作者
CoolestEnoch
发布于
2023年7月30日
许可协议