本文原创发布于微信公众号 AndroidDeveloper「googdev」,并由 stormzhang 授权发布于极客头条,转载请务必注明出处!

前天发了一篇文章「如何选择开源项目?」广受大家喜爱,其实我们在使用开源项目的过程中有不少注意的事项,今天就来给大家补充下「如何正确的使用开源项目?」

如果你是个人练手项目,那随你心情,想怎么用怎么用,没啥需要强调的注意事项,本篇文章仅是以在商业项目采用开源库做介绍。

1.使用成熟稳定的开源项目

现在技术日新月异,可能隔几天就会出来一个新的开源框架,但是公司的商业项目永远以稳为主,也许你迫不及待的想尝鲜体验新技术,可以在你个人业余项目进行体验学习,觉得各方面都使用掌握了,并且该框架已经有不少商业项目采用了,再考虑在公司的商业项目中使用。所以,给大家的建议是:公司的商业项目永远不要以尝鲜为主,一定要保证稳定。

2.理解原理

如果我们在商业项目中采用了一些开源项目,前提是自己一定是理解其原理,完全掌握了才建议在商业项目使用,一些UI类的开源控件还好,尤其是对于一些框架类的开源项目,如网络请求库、ORM框架、各种图片加载库、依赖注入框架等等,不求你掌握他具体实现的每个细节,但是一定要理解其原理,并且熟练掌握他的各种API,再考虑运用到公司的项目中。

3.不要改源码

我们知道我们在使用一些开源项目的时候,不可能永远满足我们自己的需求,我们一般都会在其基础上定制些我们自己的业务需求,这个时候建议大家不要改源码,而是在自己的项目里对引用的开源框架进行扩展,如果他不可扩展或者说扩展起来很麻烦,只能说他的设计还不够好。

为什么不建议大家改源码?因为好的开源项目一般会持续维护与更新,而一旦我们更改源码,这意味着以后我们想要更新版本变得很麻烦。所以,不是特别必要,都强烈建议大家不要改源码。

4.使用Gradle远程依赖

对于 Android 开发来说,使用 Gradle 远程依赖是最方便,最流行的一种方式了,一行代码直接搞定,如果一个开源项目不提供 Gradle 依赖的方式,只能说有点 low 了。尽量不要使用本地 jar 或者本地 aar 的方式引用,不是不可以,更新起来稍微有点麻烦,如果我们使用 Gradle 只需更改一个版本号就直接升级了,而且使用 Gradle 还可以方便的统一管理,可以见这篇文章

「Gradle依赖的统一管理」

5.请一定要封装一层

计算机史上有个万能的解决方案就是,如果原有层面解决不了问题,那么就请再加一层!

对于开源项目,我们知道有些库设计的确实很棒,使用者调用起来非常方便,一行代码直接搞定,拿图片加载库 Picasso 举个例子:

Picasso.with(context).load(imageUrl).into(imageView);

使用起来是不是特简单?你也许问我,都封装的这么好了还用得着再封装一层么?那你错了,哪怕他已经很完美了,我都会这么做:

public class ImageLoader {public static void with(Context context, String imageUrl, ImageView imageView) {Picasso.with(context).load(imageUrl).into(imageView); }
}

这样我所有项目调用的方式直接就是 ImageLoader.with() ,这样做的好处是:

入口统一,所有图片加载都在这一个地方管理,一目了然,即使有什么改动我也只需要改这一个类就可以了。

随着你们业务的需求,发现 Picasso 这个图片加载库已经满足不了你们了,你们需要换成 Fresco ,如果你没有封装一层的话,想要替换这个库那你要崩溃了,要把所有调用 Picasso 的地方都改一遍,而如果你中间封装了一层,那真的非常轻松,三天两头的换一次也没问题。

这就是所谓的外部表现一致,内部灵活处理原则。

6.做好应急,以防万一

开源项目说白了是公开的,大家都可以采用,但是永远不要完全依赖,并不是非他不可,选择的时候最好有可替代品,这也是我为什么不建议大家使用哪种大而全的框架级开源库,除非他真的特别优秀,否则不要轻易使用,因为一旦他出问题了,或者说他突然宣布某一天不开源了,那你要崩溃了,替换的代价几乎可以重写了。所以建议大家使用那种专注的开源框架,如只做网络库的,只做图片处理的,而这种大多都有替代品,一旦他出事,你还有其他别的选择。

7.积累自己的轮子

开源项目用的多了,你会逐渐的意识到很多开源库基本是项目搭框架必须的,按照你自己或者你们公司的使用习惯,你应该积累出一套你们自己的专属「轮子」,你们项目组成员熟悉的「轮子」,一旦有新的项目开始,搭一个属于你们自己的框架分分钟的事,会大大的提升你们的开发效率!

以上,都是我这么多年采坑积累的宝贵经验,分享给你们,希望对你们真的有帮助!

如何正确使用开源项目?相关推荐

  1. 使用开源项目的正确姿势,都是血和泪的总结!

    阿里妹导读:开源精神是技术发展的源动力之一,受到工程师们的热烈欢迎.但是开源项目如此之多,哪一个最适合自己?如何更好利用开源项目,甚至做二次开发?今天,阿里资深无线开发专家李运华,总结多年与开源项目打 ...

  2. 开源项目使用经验原则

    软件开发领域有一个流行的原则:DRY,Don't repeat yourself,我们翻译过来更形象通俗:不要重复造轮子.开源项目主要目的是共享,其实就是为了让大家不要重复造轮子,尤其是在互联网这样一 ...

  3. 有赞开源项目最佳实践

    因为业务需求,有赞自己造了很多轮子,组件库尤其多,React,Vue,小程序都有涉及,其他开源项目有 zan-proxy 代理,PHP 的框架 zanphp 等.有人可能会觉得奇怪,为什么有赞要造这么 ...

  4. (转载) 有赞开源项目最佳实践

    因为业务需求,有赞自己造了很多轮子,组件库尤其多,React,Vue,小程序都有涉及,其他开源项目有 zan-proxy 代理,PHP 的框架 zanphp 等.有人可能会觉得奇怪,为什么有赞要造这么 ...

  5. ssm架构 开源项目_如何为您的开源项目选择正确的品牌架构

    ssm架构 开源项目 启动开源软件项目的大多数人并不是在等人与他们讨论品牌架构模型,而是很多人确实为他们的项目制定了长期目标,包括最终使其成为付费产品甚至是基础产品.一家为项目代码提供服务和支持的公司 ...

  6. Pull Request的正确打开方式(如何在GitHub上贡献开源项目)

    GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/fork-a-repo Using Pull Requests: https: ...

  7. 商业项目如何正确使用开源框架?

    1. ### 使用成熟稳定优秀的开源项目 1. 优先考虑成熟稳定,有定期维护的开源项目,新的开源项目要等生态建立完全后方可投入使用,学习成本不可过高. 2. 同类型框架中,优先选择github sta ...

  8. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  9. huggingface实操_盘点2018年度GtiHub开源项目TOP 25

    本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学和机器学习有较深入的研究和简介,致力于为使用机器学习和人工智能推动人类进步找到新途径.2018 这一年中,作者在 ...

  10. React Native开源项目如何运行(附一波开源项目)

    学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...

最新文章

  1. Xtreme.Toolkit.Pro编译简单教程
  2. 关于ospf区域认证以及虚链路之间的配置问题
  3. 网站推广期间如何理解定制网站推广基本要素
  4. Techparty-广州Javascript技术专场(学习分享)
  5. 【算法】ROI Align 原理
  6. html5跨平台桌面打包,Html5到跨平台app应用
  7. 如何实现线程间的通讯(转载)
  8. 阿里科学家再获世界级荣誉,平头哥首席科学家谢源当选AAASFellow
  9. 618电商大促 到底谁家赢了?大家都这么有钱的吗?
  10. Testng 运行Cannot find class in classpath
  11. [Swift]LeetCode664. 奇怪的打印机 | Strange Printer
  12. java集合学习笔记--二维集合HashMap
  13. android adb调试驱动,安卓手机上的调试工具adb驱动要怎么安装 手机安装adb驱动怎么做 - 驱动管家...
  14. 如何规避rm-rf导致的服务器删除问题
  15. cad2020直装版无需注册机
  16. Unity 崩溃问题解决方法——之一
  17. ps在psd格式图片里面切图流程
  18. 中企海外周报 | 宁德时代与大众拉美卡客车达成合作;亿航与沃达丰共建欧洲城市空中交通生态...
  19. 最新Android 黄油刀(Butterknife)的简单使用
  20. OpenCV 文字绘制cv::putText详解

热门文章

  1. naked 函数调用
  2. 无所不能的『十五郎』向您致敬!!!
  3. 「leetcode」538.把二叉搜索树转换为累加树【递归】【迭代】详解
  4. poj 1287 Networking prim最小生成树 基础!!!
  5. inDesign 教程,如何复制文本格式?
  6. 如何在苹果设备上查看 Apple Pay 交易?
  7. Nginx的配置使用,启动、重启、关闭,以及路径配置
  8. IP Scanner Pro for mac(局域网IP扫描软件)
  9. Ableton Live 11 Suite for Mac(数字音乐音频制作软件)
  10. macOS Big Sur:快速入门的50个使用技巧