给 Xamarin Android Player 加点料

更新于

Xamarin Android Player

Xamarin Android Player(以下简称“XAP”)是 Xamarin 公司开发的一款免费的安卓模拟器,目前最新的公开版本是 0.5.6,不断迭代更新。
XAP 目前已支持 Jelly Bean、KitKat、Lollipop 三个安卓系统,Nexus 手机和平台模板。

与常见的第三方安卓模拟器一样, XAP 的系统包也是基于 VirtualBox 和 Android x86/ia 版,默认已 ROOT,但没有带权限管理软件,而且并没有集成 ARM 转换器。
后者的缺失导致很难将其当作日常用途,因为虽然 Android NDK 很早就可以生成 x86 的 so,但还有很多应用和库仅生成 arm 的包,也许是懒,也许是出于业务需要,
但没办法,这是现状,虽然这个现在在不断改善,但从手机终端来看,还是需要不断前进。

Xamarin Android Player 加料区

ROOT 权限管理相关

前面已经提到 XAP 默认是 ROOT 状态,但缺少权限管理应用,直接安装常见的权限应用 SuperSU,会提示二进制更新失败,所以还是直接替换自带的 su 吧。

可以参考 Intel 写的指南:Guide to rooting Android* IA user debug builds for MinnowBoard MAX

首先下载直刷ZIP
解压提取 x86 下的 libsupol.sosusupolicy 和 common 目录下的 Superuser.apk
并复制到 adb 所在的目录。

XAP 自带的 adb 在安装目录下的 minimal_adb 文件夹内。

因为默认已 ROOT,所以我们跳过 ROOT 步骤直接替换相关文件

1
2
3
4
5
6
adb connect <ip address>
adb remount
adb push su /system/xbin
adb push supolicy /system/xbin
adb push libsupol.so /system/lib
adb push Superuser.apk /system/app/Superuser.apk

现在你可以测试一下是否成功

1
adb shell "su –-daemon&"

如果提示 Permission Denied 的,说明文件权限不允许,那就改权限

1
2
adb shell "chmod 06751 /system/xbin/su"
adb shell "chmod 06751 /system/xbin/supolicy"

然后再来测试一下,如果没有其他错就可以了,一般来说这样是不用重启的。

没有问题后,打开 SuperSU 应用,提示二进制更新,可以选择更新,更新成功后重启,
这样第一味料就完成了。

CMFileManager

XAP 自带没有文件管理器,所以我们给他加个,可以选择拖拽APK,也可以通过 adb 命令。
因为我打算重新制作个 vdi 包,所以我就直接 adb push 了。

APK 下载到 xda 某贴 载。
需要注意的是,虽然帖子里写的 CMFileManager 3.0 可以运行在 4.4.x 以上,反正我用 4.4.2 的包没法安装。
不过 2.0 确实可以,毕竟提取自 CM 11 →_→

ARM 转换器

ARM 转换器,这个是通俗的说法,实际上也就是 Intel Houdini 项目,
目前应该没有开源,偶尔有个别版本的部分源代码和较为完整的包(可能是第三方自行编译)泄露。

对于4.4.x 来说,可以选择 houdini4_32.tgzhoudini4_64.tgz
也可以直接从一些手机 ROM 包里提取与之类似的文件。

而对于 5.x 以上,目前只能到 ROM 包里自提取,但结构是否还是这样,不清楚,没有验证。
因为模拟器跑 Lollipop 还是感觉有点压力,而且 Houdini 对其的支持还达不到在 KitKat 稳定。

就稳定性和兼容性而言,手机 ROM 自提要好一点,
一些应用我用 houdini4_32 是运行不了的,用自提取的是可以运行的。

而对于手机 ROM 的话,当然选择新机的-=-虽然 Android x86 的手机基本没有,
不过,华硕的几个机器官方 ROM 更新还是挺频繁的。

houdini4_32

将该压缩包解压到 /system/lib/arm 文件夹中,有些系统版本是可以直接认到 libhoudini.so 的,有些不行。
那就只好将 /system/lib/arm 中的 libdvm_houdini.solibhoudini.so
剪切到 /system/lib 目录下

手机 ROM 自提

ROM 包的下载到华硕官网下,他还是比较方便的,下载下来的是个zip,里面的 system 也没有打包成 img,
在 windows 下就可以直接打开,不用其他操作。根据上面的,可以大概看到跟 houdini 有关的目录和文件
system/lib/libhoudini.sosystem/lib/arm/system/lib/libdvm_houdini.so,但查看 ROM 结构,
发现第三个没有,这我就不清楚了,我是直接取 system/lib/libdvm.so 重命名为 system/lib/libvm_houini.so的。

另外,还可以发现 ROM 包内与 houdini 有关的文件可能还有 system/bin/houdini,虽然并不知道啥用,
我猜有部分功能是读取 system/lib/arm/check.xml。要不要加 system/bin/houdini 这个文件,
在 Android 4.4.x 我是没看出来有啥区别。

制作 Flashable Zip

简单的制作,直接参考 Genymotion | Installing ARM Translation and GApps
的目录结构,或者通过 Flashable Zip Creator制作类似的 Zip 包。

目录结构类似这种:

复制文件到安卓系统的代码主要在 updater-script 中。

制作完成后,直接拖拽 zip 到 XAP 中。

不过搞不懂,set_perm(0, 0, 06755, “/system/xbin/su”) 或者 set_perm_recursive 全都不起作用,我后来还是把这些权限的代码删了。
这是因为 su 还在运行么?
所以现在还是要手动更改 su 文件的权限才算成功。

个人制作的 Android 4.4.x 的 ZIP 是度盘中的first.zip

不过真想吐槽一下度盘,现在离线 Xamarin 基本不会成功了,20个链接就1个成功,现在都懒得版本同步了。