最近几个月,在GPD Win Max / Max 2上尝试安装了GNU/Linux上的安卓容器waydroid。现在来记录一下体验。
什么是容器
容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。
容器与虚拟机的区别
虚拟机通常包括整个操作系统和应用程序,里面运行的是一个真实的操作系统。本质上虚拟机是Hypervisor虚拟化出来的硬件上安装不同的操作系统,而容器是宿主机上运行的不同进程。从用户体验上来看,虚拟机是重量级的,占用物理资源多,启动时间长。容器则占用物理资源少,启动迅速。相对地,虚拟机隔离的更彻底,容器则要差一些。
既然Android/Linux和GNU/Linux都是基于Linux这一内核构建的操作系统,那自然也可以在GNU/Linux上跑Android的容器,或者在Android/Linux上跑GNU的容器。前者的代表就是之前的anbox和现在的waydroid,后者的代表就是termux。
但是,Android的权限等等控制得很严格,termux一不小心就会被杀后台,可玩性显然是比不过GNU/Linux上跑Android的。
waydroid支持wayland不支持x11,所以我将操作系统升级到了Debian GNU/Linux 12 trixie,同时抛弃了自己使用多年的Xfce转投了KDE。注意waydroid需要使用Mesa驱动,所以waydroid中是用不了Nvidia显卡的硬件加速的(Linus Torvalds的著名中指表情包.gif)。不过GPD的微型笔记本和掌机本来就跟N卡没关系,所以这对GPD用户来说不是个问题www
按照教程装好waydroid之后,只能运行纯java字节码或者是带有x86机器码的apk。如果要运行带有arm机器码的apk,需要转译。
目前常用的转译库有两个,libndk和libhoudini。libhoudini体积更大,对Intel CPU更友好,支持的apk似乎更多些。但还是有一些ARM应用无法正常启动,事关libndk和libhoudini本身的兼容性,无解,只能等待google和intel更新。
「waydroid里的LineageOS X86_64安卓系统并没有被预先root……但是waydroid容器不用那么复杂,只需要在宿主机上执行
sudo waydroid shell
即可以最高root权限进入waydroid系统内执行命令。」(出自《在Archlinux上使用waydroid运行安卓app》)
这下「从世界之外,我们取得否定世界的力量」了www
玩了一段时间的后,感觉GNU/Linux+安卓容器的方案是非常适配2合1平板、触屏笔记本的。接上键盘鼠标的时候使用FreeDesktop/GNU/Linux上的应用,不接键盘鼠标或将屏幕旋转180度、将机器作为平板使用时则使用waydroid内的安卓应用。如果是GNU/Linux on ARM,那么连libndk和libhoudini这样的转译都不需要,且最近随着信创电脑的推行,不少国产专有软件也有了GNU/Linux on ARM的版本,例如QQ(GNU/Linux版QQ有AMD64、ARM64、mips64el、龙架构64四个版本)。
相比之下,Windows on ARM除了能靠转译运行许多Galgame之外,缺乏杀手锏应用。安卓子系统需要用虚拟机实现,消耗的资源远远多于GNU/Linux+安卓容器。Windows11本身系统就需要约4GB内存,再启动一个(已被微软砍刀部砍死的)WSA安卓子系统,又去了6GB内存,一下子就10GB了。而我在KDE上打开一个Firefox,再在waydroid里面再打开一个Firefox,系统不过使用了5GB多内存而已。另外,Windows上的许多专有软件都不倾向于提供ARM64的二进制版本,比如Windows版QQ似乎只有x86版。
stage1论坛上的ylns1314在评测华为MateBook E Go时则说:
1. 半年多了,绝大多数华为生态圈和自带软件都还是x64转译,根本没有重新编译arm64版本的意思。
2. 沙雕华为电脑管家,做不到跟Windows Update一样的集成性和稳定性那至少把你驱动更新固件更新都顺便上传一份到官网上啊?我的华为电脑管家已经显示了好几个月的“网络异常”了。就检查更新那块报错,别的啥应用商店玩机指南一堆垃圾没一个加载不出来的。
3. WOA 16G内存不够用。WSA不开常驻的话每次冷启动要十多秒,常驻会至少占用30%以上内存,开启一个Android app内存再占用些,基本常年90%了;WSL2跑个 node的服务器开两个vscode的WSL session也能做到90%内存占用。总之就是不行。
所以,要做ARM2合1平板、触屏笔记本就应该考虑GNU/Linux+安卓容器而不是Windows on ARM+(已被微软砍刀部砍死的)WSA安卓子系统。事实上已经没了开发者的UWP就更不用说了。
但是,GNU/Linux on ARM也有很多挑战:
许多ARM设备没UEFI/ACPI。
许多ARM设备没有官方主线Linux驱动,只有被谷歌魔改过的安卓版Linux的驱动。龙芯的设计师胡伟武就踩过这个坑:「龙芯2H集成了商用的GPU核,该GPU核有 Android操作系统的驱动程序,但我们需要Linux的Xserver驱动,厂家自己开发不了,我们希望厂家把内部配置寄存器如何使用的手册给我们,我们自己开发,可是厂家说这是商业机密,不愿意给,至今龙芯2H只有在Android上有3D驱动。」
目前看来高通骁龙860、870是有官方主线Linux驱动的,因为小米平板5和小米平板5 pro已经先后有ubuntu或debian可装了。如果有厂家能基于高通骁龙860、870开发一款有多个USB-A、USB-C、HDMI、SD卡等等的设备,那作为2合1平板、触屏笔记本,用起来的感觉应该会比小米平板5/5 pro更方便。
什么是容器
容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Control groups)、切根(chroot)技术把资源、文件、设备、状态和配置划分到一个独立的空间。
容器与虚拟机的区别
虚拟机通常包括整个操作系统和应用程序,里面运行的是一个真实的操作系统。本质上虚拟机是Hypervisor虚拟化出来的硬件上安装不同的操作系统,而容器是宿主机上运行的不同进程。从用户体验上来看,虚拟机是重量级的,占用物理资源多,启动时间长。容器则占用物理资源少,启动迅速。相对地,虚拟机隔离的更彻底,容器则要差一些。
既然Android/Linux和GNU/Linux都是基于Linux这一内核构建的操作系统,那自然也可以在GNU/Linux上跑Android的容器,或者在Android/Linux上跑GNU的容器。前者的代表就是之前的anbox和现在的waydroid,后者的代表就是termux。
但是,Android的权限等等控制得很严格,termux一不小心就会被杀后台,可玩性显然是比不过GNU/Linux上跑Android的。
waydroid支持wayland不支持x11,所以我将操作系统升级到了Debian GNU/Linux 12 trixie,同时抛弃了自己使用多年的Xfce转投了KDE。注意waydroid需要使用Mesa驱动,所以waydroid中是用不了Nvidia显卡的硬件加速的(Linus Torvalds的著名中指表情包.gif)。不过GPD的微型笔记本和掌机本来就跟N卡没关系,所以这对GPD用户来说不是个问题www
按照教程装好waydroid之后,只能运行纯java字节码或者是带有x86机器码的apk。如果要运行带有arm机器码的apk,需要转译。
目前常用的转译库有两个,libndk和libhoudini。libhoudini体积更大,对Intel CPU更友好,支持的apk似乎更多些。但还是有一些ARM应用无法正常启动,事关libndk和libhoudini本身的兼容性,无解,只能等待google和intel更新。
「waydroid里的LineageOS X86_64安卓系统并没有被预先root……但是waydroid容器不用那么复杂,只需要在宿主机上执行
sudo waydroid shell
即可以最高root权限进入waydroid系统内执行命令。」(出自《在Archlinux上使用waydroid运行安卓app》)
这下「从世界之外,我们取得否定世界的力量」了www
玩了一段时间的后,感觉GNU/Linux+安卓容器的方案是非常适配2合1平板、触屏笔记本的。接上键盘鼠标的时候使用FreeDesktop/GNU/Linux上的应用,不接键盘鼠标或将屏幕旋转180度、将机器作为平板使用时则使用waydroid内的安卓应用。如果是GNU/Linux on ARM,那么连libndk和libhoudini这样的转译都不需要,且最近随着信创电脑的推行,不少国产专有软件也有了GNU/Linux on ARM的版本,例如QQ(GNU/Linux版QQ有AMD64、ARM64、mips64el、龙架构64四个版本)。
相比之下,Windows on ARM除了能靠转译运行许多Galgame之外,缺乏杀手锏应用。安卓子系统需要用虚拟机实现,消耗的资源远远多于GNU/Linux+安卓容器。Windows11本身系统就需要约4GB内存,再启动一个(已被微软砍刀部砍死的)WSA安卓子系统,又去了6GB内存,一下子就10GB了。而我在KDE上打开一个Firefox,再在waydroid里面再打开一个Firefox,系统不过使用了5GB多内存而已。另外,Windows上的许多专有软件都不倾向于提供ARM64的二进制版本,比如Windows版QQ似乎只有x86版。
stage1论坛上的ylns1314在评测华为MateBook E Go时则说:
1. 半年多了,绝大多数华为生态圈和自带软件都还是x64转译,根本没有重新编译arm64版本的意思。
2. 沙雕华为电脑管家,做不到跟Windows Update一样的集成性和稳定性那至少把你驱动更新固件更新都顺便上传一份到官网上啊?我的华为电脑管家已经显示了好几个月的“网络异常”了。就检查更新那块报错,别的啥应用商店玩机指南一堆垃圾没一个加载不出来的。
3. WOA 16G内存不够用。WSA不开常驻的话每次冷启动要十多秒,常驻会至少占用30%以上内存,开启一个Android app内存再占用些,基本常年90%了;WSL2跑个 node的服务器开两个vscode的WSL session也能做到90%内存占用。总之就是不行。
所以,要做ARM2合1平板、触屏笔记本就应该考虑GNU/Linux+安卓容器而不是Windows on ARM+(已被微软砍刀部砍死的)WSA安卓子系统。事实上已经没了开发者的UWP就更不用说了。
但是,GNU/Linux on ARM也有很多挑战:
许多ARM设备没UEFI/ACPI。
许多ARM设备没有官方主线Linux驱动,只有被谷歌魔改过的安卓版Linux的驱动。龙芯的设计师胡伟武就踩过这个坑:「龙芯2H集成了商用的GPU核,该GPU核有 Android操作系统的驱动程序,但我们需要Linux的Xserver驱动,厂家自己开发不了,我们希望厂家把内部配置寄存器如何使用的手册给我们,我们自己开发,可是厂家说这是商业机密,不愿意给,至今龙芯2H只有在Android上有3D驱动。」
目前看来高通骁龙860、870是有官方主线Linux驱动的,因为小米平板5和小米平板5 pro已经先后有ubuntu或debian可装了。如果有厂家能基于高通骁龙860、870开发一款有多个USB-A、USB-C、HDMI、SD卡等等的设备,那作为2合1平板、触屏笔记本,用起来的感觉应该会比小米平板5/5 pro更方便。