我过去几个月独自开发了 Stroop Overload:一款基于 Stroop 效果的反应游戏(点击油漆颜色而非文字),包含单人模式和最多 4 名玩家的在线匹配。客户端使用 Kotlin + Jetpack Compose,后端是 Firebase(Firestore + Cloud Functions),支持六种语言。三件事让我吃了不少苦,而没有任何教程提前警告:
-
发布版在启动时对所有测试者都崩溃,调试版正常。升级到 AGP 9 后,R8(代码压缩器)不再保留老版 Room 和 WorkManager 需要的无参构造函数,这些被广告 SDK 拉入,仍然被需要:“Failed to create an instance of WorkDatabase”。因为调试版不压缩,我在第一批测试者打开它时才发现。添加了两条 keep 规则后解决。现在我会在每次上传前在真实手机上安装并打开发布版。
-
音乐在 Samsung 手机上是静音的。我的 Ogg 文件包含嵌入的封面艺术流。大多数播放器忽略它;Samsung 静默拒绝播放整个文件。没有错误日志,只有一片寂静。我之前两次因此丧失(可能是指浪费时间),直到写了一个测试,只要音乐文件包含非音频内容就会让构建失败。
-
每场在线匹配的第一个答案卡顿了一两秒。回合大约 3 秒,所以这很严重。答案在服务器端检查(防止作弊),最可能的原因是首次调用触发了冷启动的 Cloud Function。现在应用在进入房间以及比赛开始时会唤醒该函数,而不是支付费用让它一直保持热启动。
全篇披露:音乐是我用提示词在 AI 工具生成的;设计、代码和视觉效果都是我自己的。
如果想看到最终结果:Stroop Overload 在 Google Play – https://play.google.com/store/apps/details?id=com.softyorch.stroopoverload
评论 (0)