Android Studio -从Maven Central迁移到JCenter

这篇文章最初发表于Techno Talkative博客通过Paresh Mayani.请在这里评论或在那里

在android研讨会期间,在办公室和与一些android开发人员的聊天中,我收到了一些关于构建脚本和存储库的问题:

  • 为什么早期版本的android studio使用maven central?
  • 为什么android项目,使用android studio创建,是使用jcenter?
  • android studio使用JCenter存储库的原因/好处/目的是什么?
  • JCenter Vs. Maven Central

当时我已经分享了一些观点,但我试图深入了解更多关于从maven central到jcenter的迁移。我从几个链接中发现了有趣的细节:

在继续讨论从maven central到jcenter的迁移之前,先简要介绍一下存储库(以防您真的不知道!)

什么是存储库?

在Maven术语中,存储库是存放所有项目jar、库jar、插件或任何其他项目的目录Maven可以轻松地存储特定的工件

在构建。gradlefile, you need to specify which repository to use when resolving dependencies for building your project, so you need to put something like the following in your build.gradle file:

存储库{jcenter()}

是的,在使用任何外部依赖项之前,您至少需要指定一个存储库。阅读更多依赖管理基础而且存储库

Maven中心到jcenter的迁移

下面是关于jcenter以及从maven central到jcenter的转换的一些细节和有趣的地方:

  • 如前所述,jcenter是与Android的gradle插件一起使用的新的默认存储库。
  • Jcenter是一个Java存储库在Bintray,这是世界上最大的Java和Android OSS库、包和组件的回购。
  • jcenter中的所有内容都通过CDN提供,并使用安全的https连接。在迁移的时候(Android Studio 0.8),中心maven 2存储库只支持HTTP,不支持HTTPS。参考:51.6.2.Maven中央存储库.(这可能是谷歌是HTTPs粉丝的原因之一!)
  • jcenter()是mavenCentral()的超集,它包含许多额外的存储库和工件。参考:博客@ Bintray
  • jcenter的人说,他们的性能比maven center好。
  • Bintray与传统的Maven Central有不同的包标识方法。
  • 如果您确实需要将包放到Maven Central(用于支持遗留工具),您也可以从Bintray中完成,只需单击一个按钮,甚至可以自动完成。

关于性能改进,一些android开发人员已经面临/注意到maven central的巨大索引问题。

Tor Norbye

我用一个全新的设置目录运行AndroidStudio,所以它连接了maven中心,下载了一个可用工件的索引。

然后我碰巧看到了我的目录的大小。

我的~/Library/Cache/AndroidStudioPreview是1.5G,其中1.2G被“Maven”子目录占用。

那太荒唐了。我们几乎不用指数。它的主要用途是项目结构对话框中的依赖项编辑器,但我们真的不需要为它预先计算索引。MavenCentral有一个快速的在线JSON搜索,当有人搜索工件时,我们可以按需使用。在https://android-review.googlesource.com/#/c/94843/我们添加了一个lint检查,它检查依赖项是否是最新的,并且对少量工件的搜索几乎是即时的。

简而言之,我们真的不需要缓存;它可能有助于在.gradle和maven .pom文件中完成代码,但这并不是一个超级重要的用例,当然也不是所有用户都应该牺牲1.5G的下载速度和磁盘空间来实现的。

阅读更多:Maven索引太大了!

我必须说,从maven cetnral迁移到jcenter之后,android studio的性能是显而易见的。之前在4GB内存配置的笔记本电脑上加载android studio,都是这样的:

无论如何,这不是这次研究的结束,我仍然想知道更多的改进或优点(如果有的话)。如果您对jcenter和maven central有足够的了解或了解,请分享您的意见。而且,由于这几乎是一个没有记录的点,我真的很期待听到这个迁移,从android开发人员倡导者或在android工具团队工作的工程师。