前言
开源,是这个时代的主旋律。作为一名 Android 开发工程师,我有理由置信咱们是开源的最大受益者,因为那个养活咱们的 Android 其自身就是 Google 的开源我的项目。在这样一个开源的时代,就连之前那个最排挤开源的 ” 微软 ” 也不得不踊跃拥抱开源,大手笔收买 github 以表本人的开源信心。
前段时间我在逛 github 的时候,偶然间发现,我的 github 曾经领有 12 个 star 过百的开源我的项目,2 个 star 过千的我的项目。回首一想,原来我做开源我的项目曾经快 3 年了,想想这一路走下来真的十分不易。
深夜和周末是我做开源我的项目的主战场,电脑和 AndroidStudio 是我创作的纸笔,各种 bug 和 issues 是我通往卓越我的项目的拦路虎,常常为了解决一个问题单独思考到凌晨。这其中还要饱受喷子们的讽刺和质疑,以及白嫖党的夺命连环 call。当然,也会有人站进去说几句公道话,然而平心而论,国内的开源环境真的很差。
如果不是因为对技术的酷爱以及支持者的激励,我置信我很难坚持下去,就像那些慢慢隐没的开源我的项目创作者一样,提交记录永远地停留在了那一刻。
所以,为了可能记录下我的这段艰辛开源之旅,同时也是心愿可能改善国内的开源环境,帮忙更多心愿从事开源我的项目的有志青年,我决定写下这篇开源我的项目经验总结。
为什么做开源我的项目
在决定做开源我的项目之前,你十分有必要问一下本人:我到底为什么要做开源我的项目?无论是出于什么目标,只有你有答案的话,那么你就能够持续往下看,否则以下的内容可能对你来说没有任何意义。
说起开源,就不得不提 Google 这家极具开源精力的公司。作为一家美国科技公司,每年都在一直地对外输入着有数优质的开源我的项目,与此同时,近几年咱们国家的科技公司们也开始着手开源打算,开源了不少乏味的我的项目。
那么为什么大型的科技公司都在踊跃地做开源我的项目呢?其实起因很简略,无非就是为了名气和企业的形象嘛。作为一家市值超百亿的科技公司,不搞点开源我的项目进去装装逼,都不好意思说本人是大厂。
那么作为咱们集体开发者而言,有必要做开源我的项目吗?在答复这个问题前,你有必要问一下本人:你真的酷爱做技术吗?如果说你做技术的目标只是为了养家糊口的话,我感觉接接私活,做做外包比拟适宜你。因为做开源我的项目真的是那些 ” 闲得蛋疼 ” 的人打发工夫的玩具,在这条路线上你会发现十分没有 ” 钱途 ”。只有当你真正将技术作为一种趣味来酷爱的时候,你能力领会到那种开源我的项目被有数人援用后的价值和喜悦感。
所以,说了这么多,咱们到底为什么要做开源我的项目呢?以下列举我的几点理由,供大家参考:
进步本人的技术水平。
毕竟开源我的项目就相当于把本人扒光了给他人看,兴许这样比喻不是很失当,但的确能进步本人代码的品质和解决问题的能力。毕竟如果你的开源我的项目真的有人用的话,你必然会收到很多的 issue 以及倡议,这些货色可能你之前基本就没有想到。让我的项目变得更加强壮。
开源的最大妙处就在于,任何人都有权力看到你我的项目的代码,提出本人的倡议。这其中就有可能发现我的项目中存在的破绽,以及一些十分有建设性的倡议,同时也能让你明确本人我的项目中存在的有余,这样就会推动我的项目一直的优化降级,我的项目的品质也会呈螺旋型回升而变得更加强壮。结交气味相投的敌人。
你在做开源我的项目的同时,很容易就能结交到与本人气味相投的开源创作者,毕竟大家都是心愿开源我的项目越做越好,很有可能你的开源我的项目被其余的开源者所赏识而一起开发和保护。这样一来一去你们很有可能成为 ” 同志 ”,哈哈。帮忙别人,晋升本人的行业影响力。
这也是很多人做开源的重要目标。如果你有幸可能在某个畛域做出一个十分优质的开源我的项目并且有很多人援用的话,那么你在该畛域的名气肯定会蹭蹭的往上冒,到那时什么都会有的,具体可参考 vue.js 的创作者:尤雨溪。展现集体的技术水平。
很多人做开源项的目标就是它可能在应聘面试中加分,尤其是应聘某些大厂。因为通过那短短几小时的面试其实并不能很全面地考查出一个人的技术水平,而且面试通常仅仅是两个人面对面空谈几小时,如果这个时候你能拿出一个较为优良的开源我的项目的话,肯定会加分不少,至多能在面试前给面试官营造一个不错的印象。实现本人的人生价值。
开源给予了你无穷大的创作自由,在下面没有产品经理提出的各种脑残需要,也没有测试提出的各种适度测试 bug,更没有各种技术条条框框以及企业标准。你能够做任何你认为对或者感兴趣的事件;你能够实现本人儿时扭转世界的幻想;你能够留下你在这个世上存在过的印记;你能够 … 开源给予你无穷大的舞台,你能够做很多有意义的事件,当热前提还是不能守法法律 … 触犯法律的事件咱们不能做,毕竟还是保命要紧,哈哈。播种意想不到的业余支出。
尽管开源是收费的,不应以盈利为目标。然而不得不说没有经济效益的驱使,单纯靠对技术的酷爱其实是很难坚持下去的,尤其是当你面对很多现实生活的压力时,情怀就显得那么苍白无力,这也是为什么各大开源平台都为开源者提供了资助和打赏的渠道,毕竟开源者也要赚钱生存。好的开源我的项目其实是可能播种相当可观的打赏的,更有甚者能够搞一个商用版,受权应用,赚取服务费等,当然能做到这一步的开源我的项目还是不多的。
如何做好开源我的项目
下面我简略讲述了咱们为什么要做开源我的项目,如果此刻你心中有了答案,那么祝贺你,你曾经成为一名准开源创作者,那么下一步咱们就是探讨如何做好一个开源我的项目。
我做了近 3 年的开源我的项目,其中最为胜利的 XUI 近 600 次的代码提交,齐全的文档和视频教程,目前也不过播种了 2.7k 的 star 量,所以说做好一个开源我的项目其实是十分不易的。
上面我就简略拿 XUI 我的项目为例,简略介绍一下掂量一个开源我的项目品质的几项指标。
- 我的项目的热门水平:我的项目的 star、fork 和 watch 量。
- 我的项目的活跃度:这里考量的因素蕴含 issue 的总体数量、open issue 和 closed issue 的数量、issue 回复和解决的速度、pull requests 的数量、我的项目最初一次提交的工夫。
- 文档是否齐全:是否有 wiki 或者 README.md。
- 我的项目的稳定性:代码提交的频率,我的项目版本公布的频率。
- 我的项目的后劲:我的项目开发的分支数、我的项目的开发计划以及我的项目参与者的数量等。
- 我的项目代码的品质:设计是否正当,是否合乎设计模式准则,思考我的项目的可扩展性、便利性和稳定性。
- 开源作者的程度:作者其余我的项目的 star 量和行业影响力。
只有理解了以上指标,咱们能力创作出更加优质的开源我的项目。那么说了这么多,咱们如何能力做好一个开源我的项目呢?请持续往下看!
1. 选对开源托管平台
开源托管平台以 github 作为首选,码云 作为备份。
尽管目前市面上开源我的项目的托管平台十分多,比方:码云、码市、gitlab、BitBucket、SourceForge,不过我还是极力推荐 github,毕竟 github 应用的人群最广,人数最多,谁不想本人幸苦创作的开源我的项目能被更多人看见呢。尽管 github 是一家美国企业,日后有被禁掉的危险,然而我置信一个崇尚自在、专制的国家,对禁开源平台这件事件还是不会那么顺利的,毕竟开源无国界,开源不应政治化,商业化!如果你还是放心 github 日后会被禁,那么很简略,你间接把你的 github 我的项目一键导入到码云中作为备份,毕竟码云是失去国家认可的,还是比拟牢靠的。
2. 好的创意或者理念
如果一项性能、一件事件大家每次都须要反复去做,然而又没有什么好的解决方案或者轮子的话,这个时候咱们就能够尝试去做一个。
一个好的开源我的项目都是为理解一个问题而诞生的。如果你有好的创意或者理念,那么你就更能吸引更多的人参加到我的项目的建设中,那样也会有更多的人关注到你的我的项目,这样你的我的项目想不火起来都难。
我当初创作 XUI 就是心愿可能简化 Android 界面开发的难度,晋升 Android 界面开发的效率而做的尝试。置信做过 Android 的人都晓得 Android 原生组件在国内很不受设计师的待见,至于 Google 推广的 Material Design 设计格调更是无人问津,这就导致了设计师给出的原型图简直是清一色的 IOS 格调,更难堪的是,网上 Android 相干的开源 UI 库是少之又少,简直所有的根底组件都须要本人重写。刚巧过后我接触到了 React 和 Vue,发现它们都有十分不便的 UI 库,间接在示例代码的根底上修修改改就能大抵上实现本人想要的成果,极大地提高了开发的效率, 起初我又借鉴了 QMUI 相干的思维,最终创作出了 XUI 这个开源我的项目。
所以,一个好的创意或者理念对于开源我的项目来说十分重要,能够说是开源我的项目的灵魂。
3. 好的设计和代码品质
如果说一个好的创意或者理念是开源我的项目的灵魂的话,那么一个好的设计和代码品质就是开源我的项目的骨骼和精神了。
3.1 把握设计模式
要想有好的设计,首先你须要十分熟练地把握 设计模式
,那么如何能力熟练地把握 设计模式
呢?在这里我能够教大家一些教训:
- 1. 首先理解设计模式的几大根本准则。这里我有一篇讲对于 设计模式准则的博客 可供大家参考。
- 2. 其次初步学习现有的二十几种设计模式,并在平时的工作或者开源我的项目中尝试应用。这里我有一个专门介绍设计模式应用的开源我的项目 , 外面有相应的介绍和源码可供大家参考。
- 3. 最初等你纯熟应用了下面的二十几种设计模式后,忘掉他们,从新回顾之前的设计模式根本准则,并以此作为日后我的项目设计的根本准则。
其实学习 设计模式
十分像武侠小说中修练一门文治,学习设计准则是修炼心法、内功,而学习现成设计模式则是修炼招式。只有晋升内功,牢记心法,遗记招式能力真正意义上把握了 设计模式
这一项技能。
3.2 严格的代码标准
进步代码品质最简略的路径就是严格遵循通用的代码标准,这里我举荐阿里巴巴 Java 开发手册 和它的 IDE 插件 p3c 我的项目。
只有遵循通用的代码标准,这样才更加利于开源我的项目的多人合作,除非你想一个人保护整个我的项目,否则你的代码写得那么骚,谁能看得懂?
4. 丰盛的案例或者测试用例
作为一个合格的开源我的项目,提供一些单元测试用例还是十分有必要的,因为你写进去的货色并没有专门的人给你测试,这个时候如果还没有相应的单元测试用例,你如何保障你写进去的货色不是个坑呢?
如果你的我的项目不太适宜写单元测试用例的话,那么你最好能提供丰盛的应用案例,这样能力让你的开源我的项目更具吸引力,让他人有货色能够上手实际,否则赤裸裸的啥也没有,你写这个我的项目的意义又在哪里?
5. 欠缺的文档
这里的文档次要包含README
(简介)和wiki
(应用文档)。上面是文档的几项根本要求:
- 1. 文档内容该当尽可能的简洁明了,层次分明,并且将其搁置于显眼的地位,便于别人寻找。
- 2. 文档该当及时更新,避免出现文档与代码不统一的状况。
- 3. 提供多语言版本的文档,至多英文版文档是要有的。
5.1 README 编写
README 堪称是开源我的项目的门户,每个人都是从浏览你写的 README 开始理解你的开源我的项目的。README 写得好与坏,可能间接关系到他人在你的开源我的项目主页上停留的工夫,以及他们是否会给你的我的项目一个小星星,记住这里很要害!
如果你之前素来都没有写过 README,那么这里我举荐一个国外人写的教科书式的我的项目 Standard Readme , 外面写的内容十分经典,能够拿来借鉴。
那么,一个写得好的 README 该当蕴含哪些内容呢?以下是我总结进去的教训仅供参考:
- 我的项目简介(必须):用几句话简要形容你的我的项目特点、劣势以及我的项目指标(解决何种问题)。
- 作者简介(选填):这里是你推广本人或者其余我的项目的中央。
- 我的项目背景(选填):这里能够写你创作该项目标原因和过程。
- 我的项目特点(必须):这里是你区别于其余我的项目的要害,能够写你我的项目独有的性能、劣势、理念等。
- 我的项目设计(选填):这里能够论述我的项目的设计思维和理念。你能够借助流程图、思维导图、UML 类图、时序图等形式进行论述。
-
我的项目演示(必填):这里是他人能最直观感触我的项目魅力的中央。你能够通过以下 5 种路径进行演示。
- gif 动画演示
- 视频演示
- 图片演示
- 在线演示
- Demo 下载
- 集成 / 装置指南(必填):这里你得通知他人如何能力疾速地应用上你的我的项目。
- 应用文档(必填):这里你须要通知他人该如何正确应用你的我的项目,越具体越好。当然如果内容过多的话,还是倡议间接给一个应用文档首页的链接或者视频教程,这样可能会更敌对一点。
- 相干我的项目(选填):这里是你推广其余开源我的项目的中央,是让你的我的项目粉丝数产生裂变的中央,肯定不要错过。
- 如何奉献(选填):这里的奉献包含两个方面:代码奉献和打赏和资助。对于代码奉献,你须要写出你的提交标准和行为准则,以防止不必要的麻烦。
- 特别感谢(选填):这里写上对你我的项目有过帮忙或者启发的人或者我的项目的地址,以此表白对他们的感激。
- 联系方式(选填):这里能够写你为此我的项目创立的 QQ 技术交换群、微信公众号等。
- 许可申明(选填):这里你能够写你我的项目的开源协定或者许可应用的范畴(比方:禁止用于商业用途,仅供学习)。如果你分免费版或者商用版的话,也能够在这里进行阐明。
具体内容你能够参考 XUI 我的项目的 README 或者我的 README 模版。
5.2 wiki 编写
wiki 的编写和及时更新十分重要。wiki 最好分模块进行编写,做到条理清晰,层次分明,通俗易懂。
上面我就以我的另一个开源我的项目 XUpdate 的 wiki 来简略说一下,wiki 咱们该如何编写。如果你会在线文档编写的话,这里能够间接跳过。
wiki 次要能够分为三块,如上图所示,最下面是我的项目的简要形容,左侧是文档的首页,右侧是文档的目录。这里我为了偷懒,左侧的文档首页间接照抄了右侧的文档目录。
上面我简略列举咱们的 wiki 中该当蕴含哪些内容:
-
简介:尽管这里的简介绝大多数是和 README 反复的,然而最好还是不能漏。
- 我的项目简介:这里包含我的项目形容、我的项目特点、我的项目背景、我的项目设计思维等内容。
- 集成 / 装置指南:如果你的我的项目是轮子库,那么就编写集成指南。如果你的我的项目是残缺我的项目,那么就编写装置指南。
- 我的项目演示:gif 动画、视频、图片演示,在线演示和 demo 下载二维码任选几项提供即可。
-
如果应用
- 根底应用:顾名思义,可能满足最根底需要的应用介绍。
- 进阶应用:这里次要介绍一些个性化(自定义)、深刻应用的操作。
- 常见问题:常见问题的整顿十分重要,它往往产生于 issue 或者技术交换群中常见的问题,对刚接触该项目标人十分有用。
- 配套设施:一个优良的开源我的项目往往会自建相应的生态,这时配套设施就十分有必要了。
6. 正当的版本治理和布局
新版本的发行不宜过于频繁,也不宜间隔时间过长,胡乱无规律的版本发行对使用者而言几乎是场劫难。
最失当的做法应该是:在保障充沛测试没有问题之后,定期公布最新版本,实时更新我的项目的最新进度以及将来的开发计划。
这里我提供几点倡议供大家参考:
- 每次在进行新版本的开发时,倡议独自拉一个 dev 版本分支,缩小对主分支的影响。
- 能够应用 github 上的 projects 来布局你的我的项目开发计划。
- 能够在 issues 中建一个置顶的 issue 来收集使用者的反馈,以此作为新版本开发的布局素材。
- 每次新版本公布的时候,肯定要提供具体的版本日志,不便使用者参考和追踪。同时,对于几个改变比拟大的版本调整肯定要有明确的阐明,否则使用者会十分纳闷。
7. 关注反馈,继续更新
7.1 及时处理 issue
issues 是使用者与我的项目开发者之间沟通的桥梁。很多使用者提出的 issue 还是十分有建设意义的,及时高效地解决掉它们,能够让咱们的我的项目变得更加完满。
在解决 issues 的过程中,咱们能够收集整理 ” 常见问题 ”,播种好的 idea,理解本人我的项目存在的有余等。这就要求咱们须要及时关注和解决使用者提出的这些 issues。
那么咱们怎样才能疾速高效地解决 issues 呢?这里我提供几点倡议:
- 1. 提供 issue 模版,过滤有效 issue,晋升沟通的效率。这里你能够参考 XUI 的 issue 模版。
- 2. 自定义 issue 标签,对 issue 做分类管理,局部 issue 能够优先解决。
7.2 欢送 PR,及时处理 PR
在开源我的项目初期,靠一个人保护一个我的项目还是不难的。一旦我的项目热度下来来,光靠一个人的精力是远远不足以保护整个我的项目的,这里我深有体会。
所以咱们须要提供 PR 提交标准和行为准则,踊跃欢送更多的人参加到我的项目的保护中。同时对于他人提出的 PR,咱们要及时 review 验证,对于没有问题的提交该当适时合入以进步他人参加奉献的积极性。
8. 做好推广
酒香不怕巷子深,这句名言在互联网时代是行不通的。你就是有再好的创意、再好的设计,如果没做好推广的话,也是没人能看到你的开源我的项目的。
如何推广本人的开源我的项目,对此我还是十分有教训的,上面我就提供几个路径:
- 在各大技术论坛、博客、社区一直地发文章介绍本人的开源我的项目。我罕用的几个平台有:CSDN、掘金、思否、简书、知乎、哔哩哔哩。
- 在一些开源我的项目举荐分享平台上提交本人的我的项目申请收录。比方我的开源我的项目 XUI 和 XUpdate 提交到了 HelloGitHub 上。
- 组建本人的开源社区。你能够创立 qq 交换群、微信公众号或者社区网址来推广你的我的项目。
- 退出出名的组织。比方我就退出了 B3log 开源社区。
9. 不忘初心,摆正心态
做开源我的项目是一件十分漫长的过程,你可能基本设想不到后方的路线有如许的波折。
如果你的开源我的项目做了几个月了也无人问津,不要泄气,分心去做你认为有价值的事件即可,总有一天会有人发现你我的项目的价值。
如果你的开源我的项目做胜利了,在播种到不少人赞叹的同时,那么势必会受到很多喷子们的冷言冷语以及各种无脑喷。不要理睬那些只会喷然而啥也不会做的麻瓜,不要把你无限的精力放在这些人身上。请把你无限的精力放在那些给你开源我的项目提出贵重倡议的人身上,分心去做你认为对的事件。
最初
我花了整整一周的工夫整顿才写下了这篇文章,也是真诚地心愿可能改善国内的开源环境,帮忙更多心愿从事开源我的项目的有志青年。如果你感觉有用的话,倡议你珍藏此文章。最初,还是祝福大家能早日写出属于本人的优良的开源我的项目!!!
微信公众号
更多资讯内容,欢送扫描关注我的集体微信公众号:【我的 Android 开源之旅】