LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

安卓在Linux上运行安卓应用比在Windows上更简单

2023年8月3日 261点热度

AndroidappsonLinuxwithWaydroid

July19,2022

ThisarticlewascontributedbySamSloniker

DeepLassistedtranslation

用户常常会想在某种类型的系统上运行针对另一种操作系统的程序,这并不罕见。随着智能手机的日渐普及,安卓已然成为世界上使用最广泛的操作系统。为此,用户可能想在Linux系统上运行安卓应用程序,便于获得Linux中本来不存在的游戏或其他应用程序,或则在她们自己的Desktop系统上开发联通应用程序。Waydroid项目提供了一种在Linux上运行那些应用程序的方式,这意味着它们可以在各类设备上运行,甚至包括像PinePhone这样基于Linux的智能手机。

Waydroid在概念上类似于Windows的兼容层工具Wine。安卓在Linux内核上运行的这个事实,致使在其他Linux系统上正确运行安卓应用比在Windows上运行要简单得多。不过,还是不可能简单直接地在普通的Linux操作系统上运行安卓应用安卓运行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设备使用的构架嵌入式linux 培训,但许多应用也可以在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的默认内核就提供了这种模块,所以我不须要替换它的内核了。

安卓运行linux软件_安卓运行linux_安卓运行linux虚拟机

安装和运行Waydroid的过程,在不同的发行版上是不同的。我遵照Archwiki上关于电脑笔记本的说明,所以在安装完Zen内核后,我从Arch用户库房(AUR)安装了waydroid和waydroid-image。以后,Waydroid须要用"sudowaydroidinit"进行初始化,而且须要为systemd来启用和启动waydroid-container服务。Waydroid文档中有关于在其他发行版上安装它的说明。

Waydroid有两种模式,多窗口模式和全用户界面(fullUI)模式。在使用多窗口模式时,安卓应用被整合到桌面上,如同它们是Linux桌面应用一样。但是,在所有四台设备上linux游戏,多窗口模式都出现了几个bug,使其无法使用安卓运行linux,所以我只使用全用户界面模式。也就是在同一个窗口中运行整个AndroidUI。

Waydroid为每位安装上来的应用程序创建了.desktop文件,包括默认的系统中的应用程序,这不能被禁用。这种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脚本通信,之后在主机上打开真正的浏览器。

安卓运行linux_安卓运行linux虚拟机_安卓运行linux软件

Waydroid的开发工作是在GitHub库房进行的。该项目的网站列举了开发团队的三名成员,而GitHub目前显示在mainrepository中有25名贡献者。最新的版本是V1.2.1,是在4月发布,但从那时起早已有相当多的开发。总的来说,发布时间点有些随便;GitHub上列举的第一个版本V1.1.0是在2021年9月发布的,三天后是V1.1.1。下一个版本,v1.2.0,在那以后一个月发布,之后在10月到4月之间没有release过了。

Conclusion

总的来说,虽然有一些问题和缺点,Waydroid仍是一种在Linux上运行Android应用程序的有效方式,非常是在非Android的Linux手机上。像任何软件一样,它也有一些bug,但它的大部份问题是由只运行或几乎只运行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许可合同。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 安卓 应用 程序 笔记本
最后更新:2023年8月3日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
ARM-Linux应用开发和单片机开发的不同ARM的应用 Linux下如何查看内核信息、发行版信息的信息? 《Linux内核编程》入门篇:降维为繁 Linux网卡驱动安装及配置指南 大专计算机有哪些课程,专业的1对1答疑! SamsungNote2Verizoni605onAndroid在Android系统上安装linux发行版 MPV的高级应用——Ubuntu最佳应用列表里的应用 手机上可以安装一套完整的Linux系统吗? Ubuntu上安装SMplayer.6.10-PPA源在CentOS5.5下安装使用 centos启动图形界面的方法.x1,关闭界面 Linux下进程与线程概念重构 Linux中的十大开源播放器C编写 多进程和多线程的区别,你知道几个? Linux发行版中可用的7款最佳开源视频播放器 Linux系统安装网卡驱动的具体操作流程进行说明 如何在Linux上安装视频播放器installvlc 晚上暴露于蓝光,睡眠质量大打折扣 如何安装便携式WiFi驱动程序?360wifi驱动的教程 CentOS云服务器搭建网站和CentOS搭建DNS解析服务 如何在linux上创建一个用户,减少不必要的沟通成本
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
Intel(R)CPUE5410@2.33GHz看到有8个逻辑 卸载软件yumclean清除yum缓存(更换过yum源的时候建议清除下之前缓存) 搜狗输入法Linux版更新v1.0.0018 轻松下载、安装和使用Linux RedHat系统 如何判断端口是否放通?模块清单修改配置项 linux下如何安装linux的软件?下的解压缩 如何显示英语总是默认支持的是中文? Linux内核页表管理中那些鲜为人知的作用是什么?(图) 普联技术有限公司程序的安装包使用方法通过-LINK Linux下的安装zip解压功能及安装unzip教程 下对目录操作的相关权限问题及解决办法 程序员不输入密码进入Linux系统,孩子们永远不知道下一个bug Linux2.6.32内核的64为操作系统的命令-苏州安嘉 一下美国Linux服务器的系统优化优化方法方法 找个Linux,把U盘当硬盘用就可以了 《》隐藏属性lsattr-R连同子目录的数据 fedora 禁止root登录 如何在Linux上建立SSH安全连接的方法?安全 如何利用VWware虚拟机安装centos系统(Linux)? 【每日一题】Linux链接文件- 移植Linux,手机变身“大杀器”!详解8大关键
标签聚合
linux系统 操作 软件 虚拟机 应用 文件 内核 linux服务器 命令 文件目录
书籍
课程
技术群
技术干货大合集↓
  • 2023年10月 / 8篇
  • 2023年9月 / 90篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.