可能有许多朋友都已经知道了这个事情,JCenter 即将在 Android 上被废弃了。
这么重大的事件也是相当出乎我意料,本来我以为是 Google 又要整什么幺蛾子,因为 Google 很喜欢废弃东西。结果了解下来,Google 这次也是受害者。
今年 2 月 3 号,JFrog(JCenter 的运营方),在其官网宣布了这一重大决定,包括 Bintray、JCenter 在内的多项软件包管理和分发服务都将停止运营。原文链接如下:
JFrog 的这则声明可谓是杀伤力极强,为什么这么说呢?因为它即将影响到的是所有的 Android 开发者,是的你没听错,是所有。
只要你是一名 Android 开发者,就一定使用了 JFrog 提供的服务,即使你没听过 JFrog 这个名字,你也一定在不知不觉中使用了 JFrog 的服务。
当我们在 Android Studio 当中新建一个 Android 项目时,你总是可以在 build.gradle 文件里找到这样一段配置:
repositories {
google()
jcenter()
}
这段配置的意思是,指定当前的项目工程可以从哪些仓库上去拉取依赖库给当前项目使用。
其中,google() 指的是 Google 自家的仓库,比如我们使用的很多第一方库,如 RecyclerView, Jetpack Components 等等就是从这里拉取的。
而 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 日。在那之前,你仍然可以在 Android Studio 中正常拉取 2021 年 3 月 31 日之前提交至 JCenter 的开源库。
关于 JFrog 的声明里比较重要的内容和时间节点差不多就是这些了,但是对于广大的 Android 开发者而言,我们现在应该做什么呢?
我认为现在能做的事情还不太多,因为整个事件当中,还有一位非常核心的玩家没有表态,那就是 Google。
刚才说了,Google 也是这次事件的受害者,本来 Android Studio 创建项目时默认集成 JCenter 仓库,我还以为 Google 是和 JFrog 建立了战略合作关系。没想到被 JFrog 一则停止服务声明,直接影响了整个 Android 开源库的生态。
而这个事情发生得也比较突然,JFrog2 月 3 日才宣布的消息,3 月 31 日就不再接受任何新库的提交了。感觉 Google 对此也没有充足的时间进行应对,因此只在 Android 开发者官网发布了这样一条简单的声明:
大概意思就是说,JCenter 要停止服务了,建议大家改用 Maven Central,Google 会在不久之后发布迁移方案。
其实我印象中在 JCenter 之前,Android 默认的第三方仓库就是 Maven Central,现在看上去又是要改回去的意思?
我就在寻思着,Google 会不会有计划自建一个第三方开源项目的仓库,从而不用再担心这种突然被停止服务的困扰。于是我又跟 Google 那边去求证了一下,得到的答复是 Google 并没有此计划,那么由此看来大概率是要使用 Maven Central 了。
如果你现在想要将自己的开源库发布到 Maven Central 上,可以参考这篇文档来进行操作:
我发现有些库的反应非常快,现在已经将新版本发布到 Maven Central 上了,比如说 Glide。
可以看到,在 repositories 当中,Glide 已经把 jcenter() 替换成了 mavenCentral()。
但手动添加仓库毕竟很难形成标准,因此这件事还是需要 Google 来推动。相信要不了多久,Android Studio 创建新项目时默认的仓库就会由 jcenter() 变成 mavenCentral() 了。
不过目前我们只是可以将一个库的新版本发布到 Maven Central 上,而以前的老版本还是保留在 JCenter 上的,这些老版本会在明年 2 月 1 日彻底无法访问,所以我们仍然需要 Google 尽快给出迁移方案,从而让第三方的开源库可以无缝从 JCenter 切换到 Maven Central。
迁移方案会在以下网址更新,当然到时候我也会写文章来进行讲解的。
developer.android.com/studio/buil…
作为一名开发者,我们理应保持着时刻拥抱变化的心态和能力。然而作为一名 Android 开发者,我有时又忍不住想吐槽一句:我们的变化是不是有点太快了?
关注我的技术公众号“郭霖”,每个工作日都有优质技术文章推送。