传奇的 Google Sky Map 如何凭借纯粹的热情存活下来
还记得 2008-2009 年左右首批 Android 手机的发布会吗?当时 Google 骄傲地展示着内置运动传感器和指南针。2009 年 Searchology 大会上的明星应用是 Google Sky Map。你把沉重的 HTC Dream 举向夜空,转动手机,星座和行星就实时出现在小屏幕上。那一刻,未来似乎已经到来。
然而公司战略后来发生了变化。2011 年,Google 停止了主动支持,但开发者们不愿让这个项目就此消亡。他们恳求获得开源代码的许可,脱离了 Google 品牌,将项目扛在了自己肩上。GitHub 上的 stardroid 仓库仍以 Sky Map 的名义存活着,背后是一个关于工程坚持的精彩故事。
为什么仓库叫 stardroid
在 Google 内部,这个项目的代号是 Stardroid。公司的法务担心来自《星球大战》的版权纠纷,所以在发布时选择了平淡直接的 Sky Map。在代码库内部,名称 stardroid 一直是主包标识符。
独立之后,项目采用了 GPLv3 许可(尽管部分遗留代码保留了 Apache 2.0)。开发者们做出了一个深思熟虑的选择:让应用完全免费——无追踪器、无应用内购买、无广告。这是一款真正坦诚的开源移动天文工具。
以下是应用原型在早期的样子:

应用今天能做什么
Sky Map 将你的手机变成太空观测的交互式取景器。核心概念保持不变,但作者们多年来一直在打磨数学和算法。
- 基于传感器的定位。应用从加速度计、陀螺仪和磁力指南针收集原始数据,计算用户在天球上的视线向量。
- 天体对象目录。数据库包含亮星、太阳系行星、星座和梅西耶天体的坐标。
- 带指针的搜索。如果你想找火星或仙女座星系,在搜索框输入名称,应用就会在屏幕上显示箭头,精确指向你应该转动手机的方向。
- 时间旅行模式。你可以查看生日那天的天空是什么样子,或者六个月后木星会在哪里。
对开发者来说有什么有趣的内在
如果你现在打开这个项目,会看到 Kotlin 和遗留 Java 代码的混合。对于任何对移动开发和应用数学感兴趣的人来说,这个仓库有很多有趣的东西。
不施粉黛的传感器工作
任何智能手机天文应用的主要痛点都是指南针校准和噪声传感器。地球磁场会被手机壳、数据线和口袋里的金属物体扭曲。Sky Map 代码库实现了传感器读数过滤,使图像不会因为手部轻微颤抖而抖动,同时仍能即时响应设备旋转。
仓库中甚至有单独的文档 help.md 和 troubleshooting.md,作者在其中详细解释了为什么 Android 内置的指南针校准往往根本不像程序员预期的那样工作。
渲染与三角函数
所有绘制都与球面坐标、赤经和赤纬挂钩。应用将 3D 天球投影到平面智能手机屏幕上,同时考虑当前的纬度、经度和 GPS 时间。对于任何想了解如何在没有 Unity 等重型游戏引擎的情况下编写自定义渲染的人来说,这是一个很好的参考。
站在第二版的门槛上
目前作者已关闭了通往主分支的拉取请求。早在 Android 1.6 Donut 时代奠定的一版架构终于已经过时了。来自匹兹堡的一队前 Google 员工此刻正在完全重写应用,作为 V2 版本的一部分,将其迁移到现代技术栈。
与此同时,开发者们正在激烈地保护项目免受不诚信克隆的侵害。图形、标志和视觉资产受 Penterakt LLC 版权保护。这么做正是为了让投机商不能简单地重建项目、塞满横幅,然后以他人名义上传到 Google Play。
谁应该研究这个项目
深入研究 Sky Map 代码在两种情况下值得。
第一,如果你正在开发一款带有增强现实、指南针或陀螺仪的移动应用,想看看专业人士如何在真实实战条件下平滑传感器读数。
第二,如果你只是想在自己的手机上需要一个简洁、轻量的天文图集,不需要注册、不显示广告、只有几兆大小。你可以在 Google Play 和 F-Droid 仓库中找到这个应用。
相关项目