适用于 Android 的 Mono - 支持的架构 - 放弃 x86?

Posted

技术标签:

【中文标题】适用于 Android 的 Mono - 支持的架构 - 放弃 x86?【英文标题】:Mono for Android - Supported Architecture - Drop x86? 【发布时间】:2012-10-27 22:44:12 【问题描述】:

我们有一个近乎完整的应用程序,并正在努力压缩 Google Play 的 50MB 下载限制。

在检查我们的 APK 以尝试找到减小文件大小的方法时,我注意到 here 中描述的 lib\x86lib\armeabilib\armeabi-v7a 目录。它们对应于 Mono for android 项目的项目选项中的“支持的架构”选项。

如果我删除 x86,我会在 APK 大小上节省大约 1.1 MB。 (这几乎足以让我们低于 50MB)

删除 x86 有哪些缺点? 我的 APK 还能在 x86 设备上运行吗? Google Play 上的 x86 设备是否有任何可观的市场份额? 如果不能在 x86 上运行,Google Play 会阻止我的 APK 安装在 x86 设备上吗?

【问题讨论】:

【参考方案1】:

请注意,以下答案是针对一般 Android 开发的,不反映任何特定于 Mono 的内容:

移除 x86 有什么缺点?

您的应用无法在 x86 设备上运行。英特尔可能会哭。

我的 APK 还能在 x86 设备上运行吗?

没有。

对于 x86 设备,Google Play 上是否有任何可观的市场份额?

恕我直言,目前没有。 2012 年发布了一些由英特尔驱动的手机(例如,摩托罗拉 RAZR i),第一代谷歌电视设备由英特尔 CPU 驱动。但 Google TV 已改用 ARM,英特尔 CPU 还需要一段时间才能在 Android 设备生态系统中占据相当大的一部分(恕我直言)。

如果不能在 x86 上运行,Google Play 会阻止我的 APK 安装在 x86 设备上吗?

应该的。如果不是,则 Play 商店存在严重问题。虽然我有一个 RAZR 我坐在这里,但我不知道有一个应用程序使用 x86 不附带的本机代码,以查看有问题的应用程序是否确实从 Play 商店中过滤出来。

正在尝试压缩 Google Play 的 50MB 下载限制

如果 1.1MB 的节省“几乎足以让 [您] 低于 50MB”,那么您已经遇到了麻烦。随着时间的推移,应用程序往往会增长,而不是缩小。如果您希望最终能够切换到其他分发架构(例如,使用 APK 扩展文件)并且只需要一个短期的权宜之计,那么削减 x86 可能是可以的。但是您确实需要制定一个计划来应对应用程序大小的增长,使您回到 50MB 的障碍,并且您现在可能会更好地解决这个问题,而不是交付一些东西并因此发现自己陷入困境。

【讨论】:

感谢您提供的信息,正是我需要知道的。刚才我们实际上找到了一种节省大约 10MB 的方法,所以我现在可以再次打开 x86。我认为 10MB 的差距将使我们的应用随着时间的推移保持可用。 @jonathanpeppers:哦,是的,10MB 是相当大的空间,只要你不疯狂地添加新的艺术作品、音频剪辑或任何占用剩余 40MB 的东西空间。 这是一篇旧帖子,但这个答案在谷歌对我的评价中排名很高,所以我怀疑其他人会读到这个。随着时间的推移,x86 将变得更加重要。现在尤其如此,Chromebook 能够运行 Android 应用程序。对于 Chromebook,Chrome 本身很可能也会如此。所以我想说应该包括x86支持。不过不确定 x86_64。 @Glaucus:请注意,一些 Chrome OS 设备使用 ARM,并非所有 Chrome OS 设备都会获得 Android 支持,Chrome OS 设备总体上约占 Android 设备生态系统规模的 1%。此外,许多 x86 设备支持libhoudini,这允许它们使用 ARM NDK 二进制文件。话虽如此,如果您通过 Play 商店(可能还有其他渠道)进行分发,使用 APK 拆分来提供单独的 ARM 和 x86 二进制文件是实现两全其美的一种方式:更小的 APK 和原生 x86 支持。

以上是关于适用于 Android 的 Mono - 支持的架构 - 放弃 x86?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 的 Mono 的 ActionBarSherlock 的 jar-Binding

适用于 Android/iOS/WinPhone 的 Xamarin 通用层

仅适用于 Android TV 的 Android 清单 - 支持的设备太少?

gles2 动态壁纸转换为 c# (xamarin) 符合错误“...mono.android.TypeManager 无法应用于

对 Kivy 的 Admob 支持(适用于 Android 的 Python)

适用于 Android 和 iOS 应用程序的 WebSockets