引论
在Android开发,关于aar你应该知道的一文中掌握了如何引用本地的aar,更多情况下我们是直接从网络上获取公开的第三方库来进行开发,而这个网络位置就是jCenter,在gradle中使用:
jCenter是Bintray提供的公开下载服务,使用自身开发的artifactory开源应用搭建,后绪会介绍如何使用artifactory来搭建团队内部的私有仓库。
什么是jCenter
artifactory其实就是带有版本管理的文件服务器,基本功能和FTP服务相同,公开服务是jCenter,还提供托管的私有仓库,同github一样,提供企业收费服务,更多的功能,更快的下载速度。
开发者先将Library提交到自己的私有库,再同步到公共jCenter库,其它开发就可以简单的来添加依赖了:
在这个架构图中,还有一个maven central和ivy仓库,都提供类似的下载托管功能,但要么太老了,要么太少人使用。
再说下maven仓库引用的格式
定义为:
GROUP_ID:com.squareup.retrofit,组,方便公司或团队进行逻辑上的管理。
ARTIFACT_ID:retrofit,Library名称。
VERSION:1.9.0,Library指定版本。
Module中的完整依赖:
在依赖中不要使用动态版本号
Gradle中支持使用+
来引用动态版本,人生苦短,不要使用它!
任何依赖的改变,你都应该被显式的知晓,以便知道自己的项目中有除了自己的代码,依赖都发生了哪些变化。
这个+
,会大大增加你代码的不确定性!!
理由:
- 依赖也是你应用的一部分,任何变更,都要知道。
- 每个人的开发不尽相同,在你的机器上可以运行,在其它机器上可能运行不起来,因为依赖版本不一样。
- 同样的,在你的机器上也会出现由于版本不同而运行失败,昨天好好的,今天怎么就跑不进来了?那是因为早晨另一个项目中升级了本地依赖!
- 版本回滚,显示的版本号支持精准的回滚。
- 不要自动依赖升级,任何依赖更新都有可能引入安全问题,回到第一点,任何变更,都要知道,升级要验证。
不要犯懒,依赖管理很重要,程序开发过程就是消除不确定性的过程,一个+
的犯懒,可能会让你和项目消耗极大的精力。
不要假设依赖总是好的,是人都会犯错误,任何的开发在减少不确定性的时候也同时在引入新的不确定性。
PS:jCenter不只支持maven和gradle,还提供Yum, Apt, Vagrant and Docker。
Android Studio为什么使用jCenter
Java的构建工具从ant,maven到现在的gradle,依赖包仓库也经历了maven central和jCenter,同样Android Studio中的Gradle默认仓库也经历了先使用maven central后来又升级到了jCenter的过程,简单来说:
- jCenter完全兼容maven,maven central中有的,jCenter有,maven central中没有的,jCenter也有,是maven central的超集,现在是全球包含Java和Android开源项目最大的仓库。
- 使用CDN加速下载,基于https安全传输,Google最喜欢的传输方式,杜绝在传输过程中偷梁换柱,造成类似xcodeghost的惨剧。
- 包的上传和管理操作更简便,流程更优(让包开发者更懒)
- 支持一键同步到maven central(尊重历史,还有什么理由不用)
让gradle使用maven central(团队内部库/被jCenter拒了/偷懒不进jCenter):
还有一种情况是使用私有Maven仓库:
发布到jCenter
准备
帐户
在https://bintray.com上注册,可使用github登陆。
创建私有Maven仓库
添加Package
新建包
包名,License和代码码本管理必填。
Andorid Studio中的工作
New Project
File
-> New Project
New Project默认都是先创建一个Application Module,正常创建就好,正好可以用来做Library的Demo App。
New Module
创建Library ModuleFile
-> New Module
新建的Library与正常的Application最大区别是module build.gradle中是apply plugin: ‘com.android.library’ 而不是 apply plugin: ‘com.android.application’。
在这里发挥才智实现功能。
完整的Project Structure:
添加上传的Gradle脚本支持
在weatherlib/build.gradle中:
在weatherlib/build.gradle中添加Package信息,当然这里的信息都是Package相关的,使用时要改成自己的:
发布
⌘F9
,上传前Build下代码,确保正常。
然后在Terminal Panel中执行:
BINTRAY_USERNAME
和BINTRAY_KEY
在bintry profile页面获取,注意username不是name。
https://bintray.com/profile/edit
发布成功
在bintray界面:
上传的版本:
上传的文件列表:
添加到jCenter公共仓库
一键添加到jCenter
添加到jCenter公共仓库需要简单的人工审核
等几个小时,会有邮件通知审核结果。这个审核是必要的,公共仓库还是要有人把守,要不然鱼龙混杂,不好用了。
OK了,你的包已经自动同步到jCenter,任何人可以公开获取使用了。
http://jcenter.bintray.com/里有jCenter全部的公开库。
总结
jCenter是现在最好用公开Android库,对于使用还是使用者都提供了最好的使用体验。
BinTray开发一个artifactory提供三种形态:个人私有库,公开社区库和商业库,保证了整个业务的良性发展,也是这一类开发者服务最好的商业模式。
后记
由于Maven Central已经老去,从jCenter同步到Maven Central的步骤本文不做介绍了(同理ivy)。
Reference
Android Studio – Migration from Maven Central to JCenter
bintray-release