blog/_posts/2023-12-24-android.md

4.0 KiB
Raw Blame History

layout title tags
post 如何在Linux容器内运行Android
Linux
Android

原生运行Android肯定比虚拟机好

起因

前段时间我在树莓派上安装了openFyde后来发现原来它的ArcHero安卓子系统是基于anbox开发的和ChromeOS的安卓子系统有一些区别至于区别在哪我也不是特别清楚。不过既然它的安卓子系统和Linux直接安装的没啥区别那不如我试试看在普通的Linux上安装容器化的安卓系统效果怎么样

试用Waydroid

最开始我测试的是Waydroid因为听说anbox的升级版就是Waydroid据说性能比anbox强所以想试试看安装挺简单的执行个脚本之后用apt就能安装。不过我的测试平台是Ubuntu Server 20.04LTSWaydroid之所以叫这个名字是因为它要基于Wayland显示服务器运行可我是无界面的系统要怎么用它啊Waydroid好像没有无头模式这种东西不过我搜了一下weston实现了Wayland协议而且支持无头模式用法也很简单安装好weston之后执行weston --backend=headless-backend.so就可以了。
不过默认安装好的Waydroid不能运行ARM架构的程序似乎是因为libhoudini之类的库是有版权的所以不能直接集成不过还好有人开发了一个工具包可以给Waydroid安装包括libhoudini在内的多个因为版权等原因不能直接在项目里使用的程序而且操作起来也很简单体验还不错。
至于怎么查看界面因为是无头模式启动的所以没有界面只能通过adb查看不过我试了一下scrcpy不知道为什么不能用但是用Airtest就能看到界面就挺奇怪的……还有就是分辨率很低不过这个应该改weston的启动参数就可以改分辨率了吧但因为后来发现Waydroid不能开多个实例感觉有点废物就没有在继续研究了。
不过总的来看如果是在桌面版的Linux上而且界面是使用Wayland协议的效果应该会比较好好像Ubuntu22.04以上的系统默认会使用Wayland在这个系统上面使用Waydroid效果应该比在Windows上使用WSA的效果还要好。毕竟这可不是虚拟机运行而是使用容器技术原生运行的如果有机会的话还是值得一用的。

试用redroid

因为Waydroid不能开多个实例所以我搜了一下有没有类似技术而且能开多个实例的结果就找到了redroid。安装也很简单执行几个命令修改下内核模块然后直接用docker pull个镜像就可以用而且这个切换版本比Waydroid简单Waydroid想换别的安卓版本要自己整镜像不然就只能用基于Android 11的LineageOSredroid可以按镜像的版本号选择希望使用的安卓版本而且我测试了一下redroid是可以使用scrcpy连接的看起来效果还不错。
但是我试了一下运行一些ARM的安卓程序会出现闪退的情况我以为是因为没有ARM兼容库的问题但是文档上写的镜像里面已经自带了libndk……这么看来可能是因为libndk的兼容性不太行啊另外libndk好像是给AMD的CPU使用的我用的CPU是Intel的Intel应该用libhoudini才对然而我找了半天也没有找到怎么让redroid使用libhoudini……真是令人失望啊。

总结

看来在容器内运行Android系统的需求还是太少了很多问题都没人解决……不过想想也是那些搞云手机的大多直接拿真机运行Android用兼容层的性能损耗也很大而服务器级别的ARM芯片也不便宜……
另外就是使用Linux的人也很少而且像那些在Windows上玩安卓游戏的人都是用的虚拟机性能也都够用了毕竟那么高功率的桌面端CPU怎么样都比超低功率的手机CPU强啊所以容器内运行Android的需求比较少可能也很正常吧……