在游戏变得日益简单的明天,一根加载进度条不再仅仅只是开启冒险的倒计时,更是连贯玩家与开发者的信使。
玩家们总是心愿游戏能马上加载结束,这意味着 “ 加载 ” 这件事件自身也有轻重缓急: 游戏开始几分钟内会被用到的资源须要打包进 APK,其余的内容则等玩家启动游戏后在后盾下载。
经营总是心愿游戏里有数不清的新花样,这意味着 “ 变动 ” 这件事件自身成为了 “ 常态 ”: 不同的节日须要不同的开屏和主题格调,甚至连游戏的观感都要让玩家感觉 “ 啊,原来明天也是重要的一天呢 ”。
卓盟科技的乐变游戏分包服务,通过在游戏加载及运行时动静下载并插入新资源,来帮忙游戏开发者满足玩家的需要。
网易的《流星群侠传》、龙渊的《多多自走棋》、紫龙的《梦幻模拟战》、游族的《少年三国志 2》……等诸多厂商的游戏,带给玩家们的体验也各不相同。但它们有一个共同点: 都应用卓盟科技的乐变游戏分包服务来动静加载资源。
甚至就连卓盟科技本人,也须要借助动静加载资源来为自家 SDK 的用户们——也就是游戏厂商——提供更好的开发体验。比方让 SDK 的集成尽量简略,以及在须要调整 SDK 外部资源的时候提供快捷修复,无需开发者们更新 SDK。
在 Android 11 提供 ResourcesLoader 接口之前,卓盟科技打造动静资源加载的过程并不轻松。
旧版解决方案
当卓盟科技开始构建其产品时,Android 并没有公开接口反对动静资源加载的用例。团队尽了最大的致力,最终应用了非公开接口增加内部资源。尽管这个实现满足了技术需要,但其实十分软弱——它依赖于非公开接口,这些接口的兼容性保障远远低于官网公开 SDK,并且随时可能在没有提前告诉的状况下被更改或删除。
卓盟科技发现,随着每次 Android 新版本的公布,兼容性问题会意外呈现。这些都须要进行额定的测试和开发,以确保产品的稳定性。通过屡次迭代团队一共破费了 6 个工程师 * 月和大量的代码将其解决方案稳定下来,同时了解它可能还会在下一个 Android 版本中再出问题。随着 Android 严格 限度非公开接口 以晋升利用的稳定性和兼容性,卓盟科技须要移除对那些非公开接口的依赖。
可继续的解决方案
随着 Android 零碎团队越来越专一于帮忙利用迁徙到公开接口的工作,卓盟科技看到了彻底解决兼容性问题的曙光。他们分割了 Android 团队来提供反馈,阐明他们的具体用例和对公开接口的具体需要。
在单方的屡次沟通和继续合作下,Android 11 中首次公布了反对动静资源加载的公开接口。卓盟科技曾经迁徙至新的 ResourcesLoader 接口,并取得了生产率和产品质量的大幅晋升。卓盟科技认为 ResourcesLoader 接口具备以下劣势:
- 应用简略。 开发团队两天内便实现了从现有计划至新计划的切换及测试。
- 性能无损。 和间接将资源内置在包内相比并无升高 (某些场景下甚至有进步,因为包内的局部资源是压缩的,而通过 ResourcesLoader 增加进去的资源是非压缩的)。
- 开发高效。 以前的计划须要高级工程师先去理解 AssetManager 的原理,找到对应的公有接口及其在各个系统版本上的实现细节;同时须要把握 zip 文件构造等和 Android 开发无关的技术细节。而应用新的公开接口后,一个能看懂文档的高级工程师即可轻松应答。
- 保护简略。 之前的计划为了兼容各种状况,累计代码行数超过 1,000 行,而新的计划代码仅几行即可!
- 向前兼容。 通过应用 Android 官网反对的公开接口,开发者的解决方案将在将来的 Android 平台上具备更好的兼容性。
String sdkroot = getApplicationInfo().dataDir + "/lebian";
ResourcesLoader rl = new ResourcesLoader();
rl.addProvider(ResourcesProvider.loadFromDirectory(sdkroot, null));
Resources res = getResources();
res.addLoaders(rl);
final AssetManager assetManager = res.getAssets();
△ 应用 ResourcesLoader API 之后,外围代码只需几行
性能晋升
卓盟科技以 16,028 个文件 (总大小 1.47GB,压缩后为 1.36GB) 为例,应用四种加载计划进行测试:
- 间接从 APK 中读取
- 应用某些公有接口加载目录后读取
- 应用 ResourcesLoader 接口加载 APK 后读取
- 应用 ResourcesLoader 接口加载目录后读取
前三种计划都对资源文件进行了压缩,均匀加载工夫都在 19 秒左右;而计划四通过 ResourcesLoader 加载目录后间接读取未压缩的资源,均匀加载工夫仅为 3 秒左右,性能进步了 6 倍!
卓盟科技首席执行官兼产品负责人黄杲总结了这套新接口的作用: “ 新的 ResourcesLoader 接口大大降低了开发和保护老本,使咱们可能更加专一于产品和业务翻新。”
共执画笔,共绘良图
△ 卓盟科技团队
“ 依附 Android 平台,咱们开发了一些有价值的产品和服务,这些产品也撑持着咱们继续在 Android 平台投入更多的资源去开发更多翻新的产品。” 卓盟科技示意,” 心愿能有更多的机会参加到 Android 生态的建设中,奉献咱们的绵薄之力,让 Android 对消费者更易用,对开发者更轻松。”
卓盟科技致力于晋升其解决方案的长期兼容性。迁徙至 ResourcesLoader 公开接口晋升了稳定性和运行性能、简化了代码复杂性、升高了将来 Android 零碎上的兼容性危险。更为重要的是,因为 ResourcesLoader 是 Android 11 中的公开接口,整个 Android 开发者社区都能够利用它来取得收益。
Android 团队判若两人地器重开发者的反馈和创造力。动静资源加载接口的诞生,与开发者的反对与单干密不可分。咱们也期待更多的开发者和卓盟科技一样,在 Android 生态中挥洒创意、发明价值、播种胜利,同时也帮忙 Android 成为开发者和用户们的绝佳平台!