AndroidappsonLinuxwithWaydroid
July19,2022
ThisarticlewascontributedbySamSloniker
DeepLassistedtranslation
用户常常会想在某种类型的系统上运行针对另一种操作系统的程序,这并不罕见。随着智能手机的日渐普及,安卓已然成为世界上使用最广泛的操作系统。为此,用户可能想在Linux系统上运行安卓应用程序,便于获得Linux中本来不存在的游戏或其他应用程序,或则在她们自己的Desktop系统上开发联通应用程序。Waydroid项目提供了一种在Linux上运行那些应用程序的方式,这意味着它们可以在各类设备上运行,甚至包括像PinePhone这样基于Linux的智能手机。
Waydroid在概念上类似于Windows的兼容层工具Wine。安卓在Linux内核上运行的这个事实,致使在其他Linux系统上正确运行安卓应用比在Windows上运行要简单得多。不过,还是不可能简单直接地在普通的Linux操作系统上运行安卓应用,由于它们依赖于不同的用户空间环境(user-spaceenvironment)。但是,通过使用如namespace等内核功能,有可能在Linux系统的容器中运行整个Android用户空间。这就是Waydroid使用的技术;它在一个容器中运行一个完整的Android系统,其形式与在Fedora上的容器中运行Debian一样。这促使Waydroid拥有比在虚拟机或模拟器中运行更好的性能。
[PinePhone上的主屏幕]
Waydroid上运行的是LineageOSAndroid发行版的订制版。它拥有LineageOS的所有软件功能,虽然它并不模拟所有的设备功能。诸如不支持摄像头和电话功能;WiFi和蓝牙也不能在Waydroid内部来进行配置。但是,网路仍是支持的;Waydroid总是显示具有一个以太网联接,它实际上是通过主机路由那些网路传输。音频输入和输出都使用了host配置的audiopath。不仅诸这么类的小差别之外,Waydroid基本上类似于没有微软应用(Googleapps)的普通安卓设备。
Hardwaresupport
Waydroid支持32位和64位x86和Arm。64位Arm支持最多的应用,由于它是绝大多数常规Android设备使用的构架,但许多应用也可以在64位x86上运行。不过,我没有测试过32位设备。许多应用程序完全是用Java和/或Kotlin编撰的,这两种语言都可以编译成与构架无关的Java虚拟机(JVM)字节码;那些应用程序可以在所有构架上运行,不须要开发者做任何额外工作。其他应用程序中就包含由C或C++等语言编译的本地代码;那些应用程序必须为每位平台单独进行编译,但许多开发人员依然会针对X86编译,由于大多数Chromebook(其中许多是X86处理器)也支持Android应用程序。
英特尔和AMD的GPU,以及集成在大多数ArmSoC的GPU,都是支持硬件图形加速的。NVIDIAGPU仍未支持(不仅TegraArmSoC中的GPU),但Waydroid确实支持使用软件渲染(softwarerendering)作为一种变通方式。
我在我的PinePhone(64位Arm,运行DanctNIX和Phosh)、两台电脑笔记本(DellInspiron和LenovoIdeaPad3,都是x86-64且运行ArchLinux)和我的平板笔记本(MicrosoftSurfaceGo2,也是x86-64且运行ArchLinux)上测试了Waydroid;所有的设备都有触摸屏。我在所有四个设备上都使用了Wayland,由于Waydroid依赖Wayland。
不出所料,手机上的整体体验是最好的。在PinePhone上使用Waydroid的体验与使用普通的安卓手机没有太大区别,不仅Waydroid的这些限制在普通安卓设备上不存在,例如电话和摄像头难以工作的问题。因为PinePhone的硬件比大多数其他安卓设备都要慢,我禁用了用户界面的动漫。但这是硬件的问题,而不是Waydroid的问题。在禁用动漫后,Waydroid的响应速率几乎与真正的Android手机一样。
[电脑上的2048游戏]
Waydroid在电脑笔记本上的表现也相当不错。由于大多数应用程序没有针对使用鼠标和键盘进行优化,我在Waydroid中更多地在使用电脑笔记本的触摸屏,这是跟使用普通的Linux软件不一样的地方。相当多的应用程序都被设计为支持鼠标和键盘输入,便于与Chromebooks兼容,所以那些应用程序的疗效体验甚至愈发好。在台式机或非触控电脑笔记本上的体验会差好多,但经过Chromebook优化的应用程序依然可以挺好地工作。
在tablet平板笔记本上,触摸手势不能正常工作(swipe操作被注册为在某个点的长按),虽然它们在Linux本身是可以正常工作的;这促使Waydroid在平板笔记本上几乎难以使用。因为这个问题,我没有做好多测试。不过,Surface设备在使用Linux时常常出现问题,所以这很可能是一个此设备所特有的问题(甚至可能是我的软件配置下特有的问题),而不是Waydroid在平板笔记本上的普遍问题。
Waydroid不能直接在一些发行版所提供的默认内核下正常工作,由于它须要binder和ashmem模块。看上去Ubuntu和Debian都默认提供了这种模块,而Fedora和Arch则没有。我没有检测过其他的发行版。在电脑笔记本和平板笔记本上,我安装了linux-zen,这是一个可用于Arch的可选内核,其中确实提供了这种模块。PinePhone上的DanctNIX的默认内核就提供了这种模块,所以我不须要替换它的内核了。
安装和运行Waydroid的过程,在不同的发行版上是不同的。我遵照Archwiki上关于电脑笔记本的说明,所以在安装完Zen内核后,我从Arch用户库房(AUR)安装了waydroid和waydroid-image。以后,Waydroid须要用”sudowaydroidinit”进行初始化,而且须要为systemd来启用和启动waydroid-container服务。Waydroid文档中有关于在其他发行版上安装它的说明。
Waydroid有两种模式,多窗口模式和全用户界面(fullUI)模式。在使用多窗口模式时,安卓应用被整合到桌面上,如同它们是Linux桌面应用一样。但是,在所有四台设备上,多窗口模式都出现了几个buglinux 论坛,使其无法使用,所以我只使用全用户界面模式。也就是在同一个窗口中运行整个AndroidUI。
Waydroid为每位安装上来的应用程序创建了.desktop文件linux启动默认打开蓝牙,包括默认的系统中的应用程序,这不能被禁用。这种desktop文件会以多窗口模式来启动应用程序。但是,假若你只使用全UI模式,它们只会给你在菜单中引起毋须要的误会。那些图标可以通过在~/.local/share/applications中的每位waydroid.*.desktop文件末尾添加Hidden=true来隐藏。删掉.desktop文件是没有用的,由于Waydroid会在上次启动时再度创建它们。
Appsupport
正如预期的那样,PinePhone上的应用支持是最好的,这是由于它是一个Arm设备,但是大多数Android应用主要是为手机设计的。在电脑笔记本上,大多数应用程序都是可用的,虽然许多应用程序对键盘的支持是不完整的;触摸屏工作挺正常的。
[F-Droid]
Waydroid和典型的安卓设备之间最明显的区别之一就是它缺少微软应用程序。这其实有利于保护隐私,但它确实有一些缺点。若果没有微软应用和服务,许多应用就没法安装或未能正常工作。
微软游戏商店不可用,大大限制了可安装的应用程序的数目。许多在Waydroid中能良好运行的应用程序,非常是专有的应用程序,不能很容易地进行安装,由于它们只通过Play商店分发。
F-Droid在Waydroid中运行良好,但是确实有良好的键盘支持。绝大多数列举的没有”anti-features”的应用程序都能工作,许多有anti-feature的也能工作。最有可能造成问题的anti-feature是”non-freedependencies”:一般,这个anti-feature所指的非自由软件就是GooglePlay服务。这可能造成出现没有推送通知或遗失地图甚至到难以打开应用程序等问题。其实,依赖不支持的硬件功能的应用程序也是未能正常工作的,无论它们是否有任何anti-feature。
虽然可以通过安装microG使其中一些应用能正常工作,但因为害怕使用它可能会违背GooglePlay的服务条款,我就没有进行测试了。AuroraStore是一个代替性的Play商店顾客端,很可能可以在Waydroid中工作,拿来安装许多只在Play商店中使用的应用程序;因为同样的缘由,我也没有对它进行测试。
Waydroid的一个限制是,当在Android应用中点击链接时,没有选项拿来在不安装额外软件的情况下在主机浏览器中打开该链接。在Waydroidrepository中,有一个关于这个问题的issue还是open状态,但在这个功能实现之前有一个变通办法,我写了一个Python脚本和Android应用程序来添加这个功能。Android应用程序安装在Waydroid容器中,并被设置为默认浏览器(尽管它不是真正的浏览器,但它被配置为出现在可用的浏览器列表中),而Python脚本在主机操作系统上运行。当点击Android应用程序中的链接时,”浏览器”会跟Python脚本通信,之后在主机上打开真正的浏览器。
Waydroid的开发工作是在GitHub库房进行的。该项目的网站列举了开发团队的三名成员,而GitHub目前显示在mainrepository中有25名贡献者。最新的版本是V1.2.1,是在4月发布linux启动默认打开蓝牙,但从那时起早已有相当多的开发。总的来说,发布时间点有些随便;GitHub上列举的第一个版本V1.1.0是在2021年9月发布的,三天后是V1.1.1。下一个版本,v1.2.0,在那以后一个月发布,之后在10月到4月之间没有release过了。
Conclusion
总的来说,虽然有一些问题和缺点,Waydroid仍是一种在Linux上运行Android应用程序的有效方式,非常是在非Android的Linux手机上。像任何软件一样,它也有一些bug红联linux论坛,但它的大部份问题是由只运行或几乎只运行FOSS的笔记本和拥有大量专利软件的智能手机之间的固有差别所导致的;在大多数Android设备上被觉得是必不可少的服务在Waydroid中是缺位的。并且,当它在台式机或电脑笔记本上使用时,输入设备(鼠标和键盘)与安卓(及其大多数应用程序)主要针对的触摸屏有根本差别。安卓用户界面和许多应用程序早已有挺好的鼠标和键盘支持,与Chromebook兼容,但很显著,安卓主要还是为智能手机设计的。
不幸的是,没有GooglePlay服务和PlayStore的设备十分罕见,以至于开发者没有哪些动力来防止Play服务或在其他渠道上发布她们的应用;主要的例外就是FOSS和/或这些重视隐私的应用的开发者。其实,一些Linux用户总之也不会想使用其他那些非FOSS的应用程序,所以这对好多Waydroid用户来说可能不是一个问题。
虽然有这种限制,Waydroid也大大扩充了Linux用户可用的软件范围,非常是这些拥有Linux智能手机的用户。其实,它不是一个理想的解决方案,如同Wine不是解决Linux桌面软件缺少的理想方案一样;倘若能有更多的原生mobile-Linux应用程序,那其实更好。但是,总的来说,Waydroid对这些不想局限于为Linux手机设计的少数原生应用的Linux手机用户来说相当有用。Waydroid绝对值得在任何希望运行Android应用程序的设备上尝试。
全文完
LWN文章遵守CCBY-SA4.0许可合同。