Surface Go平板在Win10系统下的表现我认为还是比较出色的,x86架构CPU意味着不考虑性能的情况下,台式机上能跑的程序,这台平板也能跑,新Galgame一出就能直接安装上躺床上玩,妙哉。
但遗憾的是现实世界还是要考虑性能问题的,这平板玩Galgame在转场动画都会肉眼可见地掉帧,虽然不影响食用,但还是足以证明这板子配置是真的差,我还是很想挖掘一下这板子的游戏潜力的,不然只能推个Galgame也太可惜了点(其实还能玩玩Helltaker的)。
因此我就试着给板子安装上了Android系统,这个笔记就是用来记录我这一年来折腾的点点滴滴。
市面上可以在x86架构CPU上安装的Android系统有很多,除了Android x86这种比较原生的系统以外还有BlissOS、PrimeOS、凤凰OS、RemixOS等,此外还有FydeOS这种虽然不是Android系统但也可以直接运行Android程序的系统可供选择。我安装的是Android x86,虽然BlissOS有专门针对Surface系列的适配版本,网上也有很多人夸另几个系统,不过我还是很倔强地选择了不一样的路。
我一共尝试装了Android x86的一下几个版本(按时间顺序):8.1、CM14.1、7.1、9.0,之前在台式机上装过一个模拟器是Android 5.1,本来想装个看看但镜像不知道为啥下载下来没法用,所以没试,而且现在模拟器都开始用7.1了嘛。
Android 8.1
Android 8.1是我最开始(2019年6月)装的系统,装它的原因是因为它当时在Android x86官网下载列表的最上面,有挺多小毛病的,比如平板物理键时不时就不灵了,电源键没法长按的,有时开机后触摸屏会失灵(好像已经有解决方案了),有时不认触摸板不显示鼠标,有时候系统会一睡不醒,wifi也会时不时地不能用等等
不过,游戏能玩了啊啊啊啊啊啊啊
以下是应用测试情况,大部分是一年前的数据了所以可能没啥参考价值:
王者荣耀,能玩
绝地求生:刺激战场,很卡没法玩,当时好像还没改名
绝地求生:全军出击,能打开,因为低等级没法进训练场(就没见过这种设计)所以随便开了一局结果伞还没打开就说我故意绕过模拟器检测机制封了一年,所以是不能玩
崩坏三,能玩
明日方舟,能进去,不过密码忘了所以没具体玩
多多自走棋,直接打不开
BanG Dream,能玩
(近期测试)双生视界,2020年4月大更新前能玩,大更新后开始频繁闪退
(近期测试)公主连结R,能玩,但是战斗场景很容易让解码进程崩溃导致后续整个游戏崩掉,推测是显卡驱动问题
B站与Taptap,打开1秒后自带报错,做特殊处理后能正常运行
(近期测试)微信,无法安装
因为大部分Android设备都是用的ARM架构的CPU,很多Android应用都只带有ARM指令集的二进制库,这种二进制库在x86架构的CPU上无法运行,因此x86的Android系统需要一个名叫houdini的东西来模拟ARM的CPU来运行(据说是国内的intel分部写的,不保证真实性)。
Android x86的作者已经将houdini打包好并针对各个版本的Android x86系统做了调整,但Android x86的镜像中并不自带,需要在安装系统后以root身份执行enable_nativebridge命令手动下载打包好的houdini.sfs文件。
houdini.sfs分xyz三种,x是用32位x86指令集模拟arm32,y是用64位x86指令集模拟arm32,z是用64位x86指令集模拟arm64,如果安装的是64位系统,enable_nativebridge脚本会自动下载y包,否则会下载x包,如果执行的是enable_nativebridge 64,则会去下载z包,不过从Android x86 从8开始就没有z包了,也就是说8和9是没法安装只使用arm64库的应用的,这也是为什么微信没法安装的原因。
不过虽然Android 8没有模拟arm64但有Vulkan,这个是7没有的。
双生视界大更新后闪退是因为程序员新打包的apk中删掉了x86的库导致系统要模拟arm运行,就这个频繁闪退的情况来看,Android x86 8.1对arm的模拟效果还挺差的……
B站与Taptap需要做特殊处理是因为这俩客户端自带一小部分x86的库,但不完整,缺了挺多库,所以安装后启动会因为缺失库文件报错闪退,我修改build.prop文件让系统安装器优先安装arm的库,重装再启动一次再把优先级改回来就能正常运行了。如果不先启动一下直接把优先级改回来,它们程序里的SoLoader库就会根据优先级重新把x86的库搞回来然后再报同样的错误闪退……有点傻傻的
这个系统使用中途我更新了一次,从r2更新到了r4,直接把我system的读写权限更没了……研究了下怎么把system挂载成读写的,需要一点linux的知识,回想那堆我tabtab就能出来的命令挺麻烦的就不写具体命令了:
首先挂载Android系统所在的分区,进入分区后有个Android啥啥的文件夹,再进去应该有个system.sfs,好像是这个名,把这个sfs文件解压会有个system.img文件,接下来
接下来把system.sfs删掉重启就好了
因为它判断system目录挂载读写权限的逻辑就是判断有没有sfs有就挂只读没有就去找img挂读写
如果想改回只读的话,就自己再压缩成sfs文件呗,如果没做啥修改用安装镜像自动升级一下也行的
注:这个是8的方法,7好像是直接解压成system文件夹
Android x86 CM 14.1
这个是最近几天(2020年7月25日左右)装的。
直接说结论,兼容性最好的Android x86系统没有之一,推荐使用。
看了下init.sh,里面已经包含了修复触摸屏失灵的代码。
电源键直接没法用,从根本上解决了锁屏睡不醒的问题(笑)。
音量键会被系统识别成实体键盘,如果想要在摘下Surface的键盘后让系统正常弹出虚拟键盘,需要屏蔽音量键,具体做法是在grub配置文件里在系统的kernel那一行加个i8042.nokbd参数,不过Android x86默认的配置文件……稍微有一点点绕,但读懂了还挺好用的。
如果3秒没有声音播放声卡就会休眠,再播放声音时就会爆音,可以在init.sh的Surface*Go这一行下面加一行
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
来解决,意思是关闭声卡的省电功能
触控板与wifi好像也不会掉了,至少现在没掉过,就是触控板体验不是很好,win下触控板是有误触判断的,Android那边一碰鼠标就乱飞,而且指针加速没得关。
但是首先CM14.1是基于Android 7.1的,它是有houdini的z包的,也就是说绿色修改器(指微信支付)能装了,而且它对arm的模拟也挺完美的,至少玩双生视界比Android8流畅而且没有闪退。
但是会让整个界面卡死……
看了下游戏崩溃的log,提示是Failed to create agent because it is not close enough to the NavMash.然后后面跟着各种取向量除以0空指针报错,我寻思贴吧那边也没有谁说有卡死的问题,所以估计着是houdini又搞了啥幺蛾子,可能是浮点数模拟出问题了,试着用x包代替y包,游戏没再报错,但是没那么流畅了,又试了下Android x86 6.0的houdini的y包(中间也试过8和9的y包,不过都没法用),这次是既流畅又不报错了,完美
不过公主连结R还是一如既往地会把解码进程mediacodec搞崩,看来这个不是很好修,主要还是平板配置太烂了
之后又测试了几款游戏,有崩坏2(x86)、崩坏3(x86)、明日方舟(有x86但不知道为啥会装成arm库)、万灵启源(arm)、战双帕弥什(arm),都能运行的很稳定,B站客户端也可以直接安装运行了,爽了。
微信装了能进到登录页面,不过听说微信封模拟器比较凶就没尝试登陆,我有tx封模拟器ptsd了。
不过CM14.1有个稍微严重的问题,就是运行大负荷任务时会时不时整个系统卡住一下,公主连结R在Loading时出现过几次卡很久的情况,B站打开视频时出现过一次差点把系统卡崩掉的情况,其他游戏倒只出现过稍微卡1、2秒的情况,目前不清楚原因在哪里,对我来说只要不闪退啥都好说。
Android x86 7.1&Android x86 9
在解决CM14.1双生视界崩溃问题的时候我曾尝试换了下这俩系统,结果……挺惨的,Android x86 7.1对arm的模拟效果还不如Android x86 8.1(明明CM14.1就是基于7.1,迷惑),而Android x86 9干脆系统应用直接不停地弹报错,根本没法用(Android x86 9安装时格式化弹了个已格式化132%把我吓不轻)
最后,因为我上面提到自己手动更换houdini了,所以说一下如何手动下载houdini包:
http://dl.android-x86.org/houdini/6_y/houdini.sfs
把链接中的6_y改成需要的包,比如Android 7的z包就是7_z,下完还需要自己根据自己的系统在结尾加上6_y、7_z这样的标签,变成houdini7_z.sfs这样
下好后传到Android里,su获得权限进入/data/arm目录,如果没有需要自己mkdir一个,把刚下好的sfs文件放进去,执行enable_nativebridge
如果这次是覆盖安装,需要执行以下命令
xy包
umount /system/lib/libhoudini.so
umount /system/lib/arm
enable_nativebridge
z包
umount /system/lib64/libhoudini.so
umount /system/lib64/arm
enable_nativebridge 64