很多朋友可能已经知道这件事了,JCenter即将在Android上被弃用了。这么重要的事情,完全出乎我的意料。我以为是谷歌要搞砸它,因为谷歌喜欢丢弃东西。原来谷歌这次也是受害者。今年2月3日,JFrog(JCenter的运营方)在官网公布了这一重大决定。包括Bintray和JCenter在内的许多软件包管理和分发服务将停止运营。原文链接如下:https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/JFrog的说法杀伤力极强,为什么这么说呢?因为它即将影响到所有Android开发者,是的,你没听错,所有的人。只要你是Android开发者,你一定用过JFrog提供的服务。即使您从未听说过JFrog这个名字,您也一定在不知情的情况下使用过JFrog的服务。当我们在AndroidStudio中新建一个Android项目时,总能在build.gradle文件中找到这样的配置:repositories{google()jcenter()}这个配置的意思是可以指定当前项目从哪些repositories中使用到拉取当前项目的依赖库。其中,google()指的是谷歌自己的仓库。比如我们使用的很多第一方库,比如RecyclerView、JetpackComponents等,都是从这里拉取的。而jcenter()是指JFrog提供的JCenter仓库。Android上几乎所有的第三方开源项目都会选择在这里发布自己的库,比如OkHttp、Retrofit、RxJava等你在项目中集成的第三方库。从这里拉出来的。Android的第三方库非常庞大,远超Google的第一方库。可以说,任何Android项目都会依赖很多第三方开源项目。所以我才说JFrog的声明杀伤力极大。接下来给大家详细介绍一下JCenter停止服务的影响以及这些影响生效的时间。毋庸置疑,JCenter的停产必然会影响到两类人:开源库的开发者和开源库的用户。开源库的开发者可能是接下来一段时间里最头疼的人,因为当这篇文章发表后,你就不能再向JCenter提交任何库更新了。根据JFrog给出的时间节点,2021年3月31日之后JCenter将不再接受任何新的提交。正好我最近有一个新版本的开源库(PermissionX)要发布。前两天照常提交新版本到JCenter,结果提交失败。然后在JFrog官网上找到了这个时间节点。新版本暂时不能发布,实在是太可惜了。而如果你是开源库的用户,短时间内也不用担心,因为JCenter会持续提供服务到2022年2月1日。到那时,你仍然可以拉取提交给的开源库JCenter在2021年3月31日之前在AndroidStudio中正常运行。关于JFrog的声明中比较重要的内容和时间节点差不多就是这些了,但是对于广大Android开发者来说,我们现在该怎么办呢?我觉得现在能做的事情不多,因为整个事件中,还有一个非常核心的玩家没有表态,那就是谷歌。正如我刚才所说,谷歌也是这次事件的受害者。本来AndroidStudio在创建项目的时候默认集成了JCenter仓库。我以为Google已经与JFrog建立了战略合作伙伴关系。没想到,JFrog的服务停止声明直接影响了整个Android开源库的生态。而这一切发生的很突然。JFrog2月3日才公布消息,3月31日将不再接受任何新的图书馆投稿。我觉得谷歌没有足够的时间对此做出回应,所以才在官网发布了这么简单的声明Android开发者:大概意思是JCenter即将停止服务,建议大家改用MavenCentral,谷歌很快会公布迁移计划。其实我印象中,在JCenter之前,Android默认的第三方仓库是MavenCentral,现在好像有改回来的意思?我在想谷歌会不会打算为第三方开源项目建一个仓库,这样大家就不用担心突然停止服务了。于是又去Google查了一下,得到的答复是Google并没有这个计划,所以看来大概率会用到MavenCentral。如果现在想把自己的开源库发布到MavenCentral,可以参考这个文档来做:https://maven.apache.org/repository/index.html我发现有些库响应很快,now新版本已经发布到MavenCentral,比如Glide。如您所见,在存储库中,Glide已将jcenter()替换为mavenCentral()。但是手动添加仓库很难形成一个标准,所以这件事还是需要谷歌去推动。相信用不了多久,AndroidStudio在新建项目时,默认的仓库就会从jcenter()变成mavenCentral()。但是目前我们只能将一个库的新版本发布到MavenCentral,而之前的旧版本还保留在JCenter上。明年2月1日这些旧版本将完全无法访问,所以还是需要谷歌尽快给。迁移方案,让第三方开源库从JCenter无缝切换到MavenCentral。迁移计划会在以下网址更新,届时我当然会写一篇文章进行说明。https://developer.android.com/studio/build/jcenter-migration作为开发者,我们应该时刻保持拥抱变化的心态和能力。然而,作为一名Android开发者,我有时还是忍不住想吐槽一下:我们是不是变化的有点太快了?
