Administrator
发布于 2026-08-26 / 24 阅读
0
0

系列文章《Android 工程师的 100 篇进阶笔记》第 97 篇:Android 工程师的开源之路:从使用者到 Contributor

前言

工作 3-5 年后想转架构师、转技术 leader、转面试官,"影响力"都是绕不开的关键词。做开源是做影响力最快的方式——但 90% 的人都卡在第一步:"我不知道怎么开始。"

这一篇不讲"开源有什么好处",直接讲怎么走,从选库到 PR 合进去。

一、先看清现实:开源 ≠ 写框架

新人常以为开源就是"自己造一个框架"。其实大多数贡献者是从这些事开始的:

  • 修 typo、补充文档;

  • 复现并修一个 Issue;

  • 添加测试用例;

  • 把内部工具迁移到上游;

  • 在 Stack Overflow / 掘金答题。

很多资深 Contributor 的"代表作"是"修了 N 个 bug"——而不是"从零写了一个库"。

二、找合适的库

不要直接冲 Compose Coil、OkHttp 这种超级项目。你会卡在:

  1. Issue 列表 2000+ 个,maintainer 根本没时间 review;

  2. 没有 Good First Issue 标记,新人不知道从哪下手;

  3. 沟通风格、PR 要求对新人很高冷。

更合适的起步:

  • Jetpack 周边小工具——大部分由 Google 工程师自己维护;

  • 大厂出品的工具库——如 Square 的 Moshi、OkIO、Retrofit;

  • 特定方向的"小而美"——Kotlin 协程周边、Compose Modifier、Lint 规则;

  • 国产开源——如 JessYan/AndResGuard、megatronking/StringFog。

我的第一条 PR 合到 Kotlin 的 kotlinx-coroutines,做的修改是改了一个错别字和补充一个冷门场景的测试——大概用了 30 分钟合进去。

三、第一份 PR 怎么写

PR 写不好直接被 close。即使你代码很对,maintainer 也会觉得"沟通成本高"。

模板

## What does this PR do?

[One sentence summary]

## Why is this change needed?

[Specific bug / missing feature / unclear docs]

## How is this implemented?

[Just enough context, link to related issues]

## Test plan

- [ ] Unit tests added
- [ ] Manual test steps (if UI change)
- [ ] Documentation updated

## Related issues

Closes #1234

关键细节

  • 一个 PR 只做一件事。不要"顺手把别处也改了"——很容易和"修改了某行"冲突;

  • 自己先跑 CI——CI 红了自己改,不要把红 CI 推给别人;

  • 如果有 breaking change,单独标注;

  • 不要为了 PR 而 PR——虚假贡献会被识破。

四、和 Maintainer 沟通

很多新人一上来就喷 maintainer:"这个 API 太烂了,必须改!"——这种人会被无情 close。

沟通纪律:

  1. 先确认事实。复现是否一样?版本是否一致?

  2. 先在 Issue / Discussion 里发起讨论,不要直接 PR。

  3. 不要挑战设计决策。如果 maintainer 说"为了向后兼容我们故意这样",不要争——除非你能给出 5 个 Big User 同意迁移的理由。

  4. 永远附数据。"我们这边有 5000 用户因此失败" 比 "我觉得有问题" 强 100 倍。

Issue 模板:

**环境**
- 库版本: 2.4.1
- 平台: Android 14 / Pixel 6
- 复现频率: 总是

**预期**
期望行为...

**实际**
实际行为...

**最小复现代码**
```kotlin
// 几行能复现的代码

日志

stacktrace

## 五、维护一个小库:从 0 到 1000 Star

如果你想"自己造一个库",下面是已经被验证过的路径。

### 第一阶段:解决你自己的痛点

不要做"做个通用的某某库"——做"我下周就要用的东西"。需求从自己工作里抽出来。

### 第二阶段:起名 + 仓库 + 文档

- 仓库名要短、要可拼读:`ImageOK`、`FedCache`、`RRouter`;
- README 三段式:
  - **What**:一行话告诉读者这是干嘛的;
  - **Why**:你的库和同类区别;
  - **How**:3-5 行代码 demo。

### 第三阶段:发布到 Maven Central

```kotlin
// gradle/libs.publish.gradle.kts
publishing {
  publications {
    create<MavenPublication>("release") {
      groupId = "com.yourname.libname"
      artifactId = "libname"
      version = "0.1.0"
      from(components["release"])
    }
  }
  repositories {
    maven {
      url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
      credentials {
        // 从 Sonatype Token 拿用户名+密码
      }
    }
  }
}

第一次发版本至少要 1 周——OSSRH 账号审核 + GPG 签名 + groupId 验证。提前做这一步,不要等版本号都写好了再折腾。

第四阶段:传播

  • 写一篇"为什么我做这个"的中文博客,发布到掘金/知乎;

  • 准备一份英文介绍,发到 r/androiddev、Hacker News、Twitter/X;

  • 主动联系大 V(先小 V),让他们试用并给建议;

  • 在现有项目 README 末尾加"Used by"列表,列出早期 adopters。

六、常见踩坑

  1. 承诺过高的 roadmap — "我要做最牛的网络库",没人信。改为:"这周我要修 3 个 issue"。

  2. 回复不及时 — 别人提的 Issue 一周没人回,下次就不来了。可以借 GitHub Actions 自动 reply bot。

  3. 代码风格不统一 — 用 ktlint + detekt CI 卡住。

  4. 拒绝一切"和我设计不同"的 PR — 这会让库 dead。

七、把开源变成"工作产出"

公司里做开源最大阻力是"老板觉得没用"。把开源变成可衡量的产出:

  • Bug 反馈与修复 → "季度修复 5 个上游 issue";

  • 方案对外输出 → "季度发 1 篇技术博客 + 1 个开源工具";

  • 招聘 → "季度从社区引荐 3 个候选人"。

把这件事写进 OKR,让老板能看见它对招聘、品牌、业务的价值。

八、一个时间表(针对普通工程师)

阶段

时间

目标

启动

1-2 周

选 1 个库完成第一份 PR

持续

3 个月

累计 5-10 个 merged PR

主导

6 个月

有一个自己维护的小库

影响

12 个月

在知名项目成为 Active Contributor

小结

做开源不是一蹴而就——它是一份 30 分钟的 PR + 一份 3 个月的方向 + 一年的坚持。下一篇文章我们聊聊如何把技术影响力"带到 App 外"——技术写作与个人品牌建设,这是与开源相辅相成的能力。

参考阅读

  • 《Working in Public》— Nadia Eghbal

  • Open Source Guides (opensource.guide)

  • Kotlin 开发者社区 How to Contribute


评论