logo 泡单词 Android · 十年项目史

一个单词 App 的十年

paoword · android · 2016 — 2026

从 2016 年 4 月 27 日的一笔 first commit.,到 2026 年 10 月 17 日四条历史被接回同一个 root commit。中间有两年写掉 4000 多笔提交的高峰,也有长达 1258 天的空白。 这个故事完全由 git 记录还原。

4,682
COMMITS
46
TAGS
37
BRANCHES
10.5
YEARS

序章 2016-04-27

53835d5 — “first commit.”,作者 shichaohui <464206200@qq.com>,一次提交 2587 个文件。

同一天还有两笔:nukix 的 message 只有一个 123;同一个 nukix 的 Delete ._.DS_Store。 甚至还有一条 guangmomo <your_email> 的占位提交——邮箱都没改。

这个项目从第一天起就不是一个人的项目。首周出现的身份就有五个以上。

第一幕 2016

1971 个 non-merge commit。从 5 月起稳定在每月 200 笔上下,四条产品线同时铺开。

月份commits主线
2016-0424立项,第一天 2587 个文件
2016-05189基础框架、登录、学习卡片
2016-06265计划 / 复习 / 单词本
2016-07286v1.9.0_r1 起版本号
2016-08237会员、支付、分享
2016-09238离线下载
2016-10190竞技场起步
2016-11246多人竞技、RTC
2016-12296包体积优化,.so 开始被排除

四条线同时推进

单词 127复习 119计划 118竞技 113 下载 76离线 62分享 51会员 31 支付 20优惠券 11

上排数字是当年 commit message 里关键词出现的次数。

两个“减法”定下了后来的规矩

2016-12-01 zxy 提交「优化包大小」,删掉 libgdx.so、libjpush219.so 的多个 ABI。
2016-12-16 nukix 提交「本地添加x86库,添加 .gitignore 进行过滤」——从此 jniLibs/{arm64-v8a,armeabi-v7a,x86} 被排除在版本控制外。

“二进制不进 repo” 的约定,就是这两天定下的。代价是 2026 年 clone 下来一个 .so 都没有。

第二幕 2017

2214 个 non-merge commit,项目绝对高峰:1 月 333 笔,5 月 329 笔。

版本线:几乎每两周一个 release

v3.0.1.1 · 02-21v3.0.5 · 02-28v3.0.6/.1 · 03-22 v3.0.8 · 04-06v3.1.0 · 04-11v3.1.2 · 04-27 v3.1.4/.1/.2/.3 · 05-09~15v3.1.6/.1 · 05-26 / 06-01 v3.1.7_527 · 06-19v3.1.7.6/.7/.8 · 07 v3.1.8 · 08-10v3.1.10 · 09-14v3.2.0 · 10-17v3.2.2 · 11-06

5 月那串 .1/.2/.3 是最典型的“线上出问题 → 当天修 → 当天发”。

分支动物园(30 条)

3.1.4_msg_push3.1.4_msg_puss23.1.9_download 3.1.9_mix3.1.7.6_hotfix3.2.0_retrofit 3.2.1_dev3.2.1_opt3.2.3_dev f_3.2.2_af_3.2.2_baseactivity_optf_jenkins code_slicestudy_opt

第二条把 push 拼成了 puss,一直没改。f_jenkins 说明有人认真试过 CI,但 repo 至今没有任何 pipeline 配置。

2017-01-11:一次大规模回滚

时间作者动作文件数
09:56cenzeren修改卡片的单词显示,加入一个自定义 view—
14:44zhouxiaoyi回滚到 2cf1ae4…2345
14:57zhouxiaoyi未push的commit1798

五小时内完成“整体回滚 + 重放”,没有一条说明。

从堆功能转向修 bug

崩溃 相关提交:2016 年 71 笔 → 2017 年 190 笔;内存 22 笔。 功能堆到一定程度,一年里近十分之一的提交在修崩溃。

一种很特别的 commit message 文化

625 条 message 用了统一模板(占全部 non-merge commit 的 15%):

[泡单词]:<一句话变更>
变更原因:Bug/需求/崩溃/CodeReview
适用机型:All 关联变更项: 验证建议:无

这是提测/发版流程的痕迹:提交信息不只是给自己看的,是给测试和发布用的。2018 年 “all in” 之后,这个模板再没出现过——流程随团队一起消失了。

2017-11-08 17:06 → 2018-08-30 00:43 294 天

第三幕 2018 — 2020

18-08-30 00:43 的 “all in”

zhouxiaoyi <zhouxiaoyi@mac.pro>,message 只有两个词:

all in

1409 个文件变更,tree 里 2972 个文件,父提交是 2017-11-02 的 master。

这条 commit 是分水岭:对老仓库(A)它是“另一条线”的起点,对新仓库(B)它是 root commit,对 2026 年的整合它是必须被 graft 的那一个点。

同一秒还有一条内容相同的 1c68c5b 在另一条历史里——两条历史的差异只有 message 末尾的换行(\n\n vs \n),SHA 因此不同。

2019:一笔

272 天后,Weity 提交 “new version”。全年 2 笔。

2020:隐私合规的开端

447 天后(2020-08-18),Weity 升级 targetSdk;8 月底 Jeffrey 连续提交:改 gradle 配置(compileSdk 26)、加隐私协议弹窗、改第三方注册失败提示。全年 21 笔。

2020-10-12 → 2021-08-26 318 天

第四幕 2021 — 2023

六年不到 50 笔提交,Jeffrey(归并后 885 笔,跨越 2016–2023)几乎一个人完成。

年份commits主要动作
202114权限授权弹窗显示逻辑、去掉 X5 申请设备权限、手机号正则、versionCode 851/852
20224优化隐私弹窗逻辑、去掉友盟统计
20236更新 SDK 版本、适配隐私政策审核

中间的空档:351 天(2021-09 → 2022-09)、161 天(2022-10 → 2023-03)。

做的不是功能,是让应用还能上架:去推送、去统计、去高德定位、升级 SDK、补隐私弹窗、收敛权限。

2023-05-07 20:42,最后一笔。

2023-05-07 → 2026-10-17 1258 天

第五幕 2026

一天之内发生的事:

时间作者内容
00:02huaqidao同步 target35 工作版:迁移 androidx、升级 targetSdk 35、接入局域网调试后端(1278 个文件)
03:43huaqidao支持无网络登录与离线学习
11:15shopv2统一新增文件权限:与仓库既有约定一致(100755)
19:03–19:27shopv2README、项目史、.so 现状、术语统一

从 2016 年的 Java + support 库,到 2026 年的 Kotlin 2.0 + AndroidX + targetSdk 35——这个项目跨过了 Android 生态的两个时代。

同一天晚上,四条历史(A / B / C / D)被合到一个 repo:单 root commit 53835d5,v2 线与 master 线共享前 6 个 commit,在 d71e161(2020-08-26)diverge。

九年前那个 “first commit.”,重新变成所有 branch 的起点。

尾声 数字

commit 总数4,682
non-merge4,241
merge441
tag46
branch37
HEAD 文件数3,008
.java1,665
.kt1
.xml650
root commit1

细节与彩蛋 DETAILS

人物志 PEOPLE

按 email/name 归并,多个 id 很可能指向同一个人,归并结论为推断。

推断身份commits活跃期说明
chaohui / shichaohui1,1452016-04 → 2017-11第一笔提交的人,提交数第一,三个邮箱
Jeffrey / caiwenqiang8852016-07 → 2023-05跨越七年半,最后三年的唯一维护者
nukix8302016-04 → 2017-08第一天就开始,第一笔 message 是 123
zhouxiaoyi / zxy / zhouxy4252016-05 → 2018-08“all in” 的作者,2026 整合的起点
cenzeren2302016-07 → 2017-02
huangxirong2052016-11 → 2017-05
tanyang1302017-09 → 2017-11项目停止前的最后一批人
lihuanbin / Lee1082016-12 → 2017-02
xuliwen1042016-07 → 2016-10
王宇飞 (wangyufei)492017-04 → 2017-05
欧读书 (oudushu)472017-04 → 2017-05
gr19901105382016-04 → 2016-06
Eleven362017-04 → 2017-05
Wensj72017-05阿里推送改造
Weity42019 → 20202019 年唯一的提交
huaqidao22026-10androidx / targetSdk 35 迁移
shopv252026-102026 收尾与文档

一句话 SUMMARY

一群人在 2016–2017 两年里写了 4000 多笔提交,把产品做到能打;
2018 年有人用一条 “all in” 重开了历史;之后六年靠一个人守着合规底线;
2026 年又被重新捡起来迁到 AndroidX,最后把断掉的历史全部接回同一个 root commit。