CQ备忘录

一间存放故事的仓库

GitHub LinkedIn
2 July 2020

Android:OBB为何不流行?

by ChenQi

之前在知乎上回答的问题,搬运至此。

原问题

为什么国外的安卓游戏总是要有数据包(obb文件),而国内很多游戏没有数据包?

举个例子吧,就PUBG mobile和和平精英。不带附加数据都是接近2G。但是PUBG M 是1.7GB数据包+50MB安装包,和平精英是整个就一1.8GB安装包。王国纪元这款手游就哪怕真的只有300MB的数据也要放到obb下面做个数据包,咱们某些游戏都2,3个G了,obb下文件夹也是空的。不是贬低咱们的开发者,就是觉得一个大型安装包给用户整的不舒服,安装那么大的一个安装包要耗费很长时间,还容易安装失败,而采取分开安置的方法就可以比较好的解决这个问题。还是说其实我只是在第一层,而人家已经想到了第五层?

回答

  1. 都有数据包。
  2. 区别一是国外一些游戏用obb格式这套方案。国产游戏用自定义格式方案。
  3. 区别二是数据包动态下载,还是打进apk包里一次性下载安装。
  4. 有一个小坑:obb目录下的obb后缀名文件,不一定是真的obb格式。只是借用了obb方案的命名和文件夹规则。

————历史故事分割线————

Android obb文件格式,是Android系统早期就标配的扩展资源文件分包格式。印象里,除了更新一些bugfix,一直没怎么变更过。
早期Google play上很多app用它,除了大型游戏,还有amazon kindle app,每一本电子书就是一个obb文件。
Google play以前一直限制上架app size < 50MB。大约2015年提高到100MB上限。现在应该仍然是这样。所以大数据文件一定要做扩展包。(国内电子市场的限制和变化不一样。)
以前的安卓机内存小,直接安装一个超大apk,失败率高。(现在基本没这个问题了。)
Google Play及其配套的GMS(Google Mobile Services)提供了两个服务:download service和后台自动静默下载/更新。

所以…………

apk 50MB限制 + 官方obb方案 + GMS自动下载/更新obb数据包服务 = 默认用它。
但是obb方案本身有问题,以及国内差异问题。
obb文件就是FAT32格式,Android系统使用mount/unmount方式,把这个文件挂载/卸载成一个分区,当成一块小磁盘来对待。存在一个bug:挂载识别失败率高。stackoverflow上有很多相关问题讨论。一直无法彻底解决。
国内手机用不了Google Play。没有GMS。国产手机阉割 download service,国内电子市场应该也从未支持过obb数据包的下载服务(所以需要app/game开发商自己搞定这块)。
国内电子市场很早实现了apk增量更新(diff&patch),大幅减少版本更新的下载量。Google Play这一方面反而跟进的很晚。obb既然是FAT32格式,那么其中的数据文件,要不要压缩呢?不压就导致文件超大,压了就引起增量更新困难。

所以…………

国内app/game很难直接用obb这套方案。

上面说的那个小坑:obb文件未必是obb格式。

PUBG(Mobile)是用UE4开发的。UE3/4的数据文件Android版做出来是obb后缀名,但是格式完全是自定义的,跟标准obb完全无关。从Google Play下载的obb文件也没有使用mount方式加载,而是app自己读取和解析。(UE源码是这样实现的,至于PUBG有没有改动,那就不知道了。)

最后一个非技术因素,产品运营相关。

从CR(用户转化率)角度看,究竟是一个小apk+多个数据包,下载一部分就能玩一部分,这样效果好?还是一个大apk搞定,一次性下载完,再开始玩,这样效果好?

不一定,要看数据和ABTest,不同的产品,结果表现不一样。

追问

关于增量下载这块 国内的网络手游很少使用这个方案吧 单机手游那边用的更多 这点应该如何说。
而且就感受而言还是小安装包+数据包的安装模式舒服。(除了崩3国服这种近1G的安装包还得下载3G以上的数据包的)

追答

手游增量更新的使用,印象里很多。以及之前看过一个iOS用户调研报告:
用户在AppStore上选择游戏,第一印象很重要,200MB 以下的游戏默认标签是2D/低精度/换皮/小游戏。1GB 是AAA级游戏起步,2GB 游戏的资源量和画面精细度可能不错。所以大安装包给用户的暗示是:我的品质很好。

tags: