【问题标题】:"JCenter is at end of life" android lint warning, what is the replacement?“JCenter 即将报废”android lint 警告,替代品是什么?
【发布时间】:2026-01-18 15:10:01
【问题描述】:

Android Studio北极狐金丝雀8开始警告JCenter is at end of life

但我不能只删除 jcenter() 声明,因为它承载了很多 android 工件,它会导致 Could not resolve all artifacts 错误。解决此警告的正确方法是什么?

【问题讨论】:

    标签: android android-studio android-gradle-plugin


    【解决方案1】:

    有一个描述问题的文档部分:JCenter deprecation and end of service。您可以通过展开检查说明 (Ctrl+F1) 找到该链接。文档指出:

    JFrog,维护许多 Android 项目使用的 JCenter 工件存储库的公司, 最近宣布了 JCenter 的弃用和即将退役。根据the announcement, JCenter 将允许在 2022 年 2 月 1 日之前下载现有工件。

    在 JCenter 上发布工件的开发人员应该开始将他们的包迁移到新主机,例如 作为Maven Central

    在不久的将来,我们将提供有关将 Android 项目从 此页面上的 JCenter。

    扩展的检查说明(以及上述文档)建议将jcenter() 替换为mavenCentral()。实际上,JCenterMaven Central 的超集,但是在您的项目使用的所有 JCenter 工件都被移动之前,这样的替换不会解决问题到 Maven 中心

    我认为最佳解决方案是等到您正在使用的库从jcenter() 移出并尝试用mavenCentral() 替换它。如果仍然缺少某些工件,请查看文档,可能它们已移至另一个存储库,您也应该将其添加到 repositories 列表中。

    repositories {
        google()
    
    //  jcenter()       // <- removed
        mavenCentral()  // <- added
    }
    

    如果您是库作者,您应该迁移到另一个 repo,可能是 Maven Central。请注意,根据 JCenter deprecation announcement,仅允许在 2021 年 3 月 31 日之前提交新的提交。

    一些相关资源:

    【讨论】:

      【解决方案2】:

      我认为要坚持不间断的迁移,而不是删除 jcenter(),您可以保留两者并且只更改脚本本身的顺序。这样,当开发人员正在迁移他们的工件时,jcenter() 将始终是mavenCentral() 的后备。

      repositories {
          google()
          mavenCentral()  
          jcenter()       
      }
      
      

      【讨论】:

      • 是否有可能在几个月/几年后,当 jcenter() 被“结束”或“弃用”时,使用 jcenter() 的未更新应用程序会突然对所有用户崩溃?还是旧应用继续运行?
      • 从 2022 年 2 月 1 日开始,jcenter 将变为 work as a read-only repository indefinitely,这意味着开发人员将无法推送新的更新,除非您添加不可用的较新版本的库,否则您的应用将正常运行jcenter
      • 我认为这并不能解决任何问题,如果 jcenter 没有找到该版本,那么它将继续查看 mavenCentral。
      【解决方案3】:

      别着急! 在 Android Studio 的开发人员针对这种情况做出适当的自动解决方案之前,什么都不需要做

      【讨论】:

        【解决方案4】:

        等等。让 JCenter 结束服务。然后,拉出新的存储库。完全忽略警告也没关系。

        【讨论】:

        • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
        【解决方案5】:

        找到说 jcenter() 的行并在每行之前添加 mavenCentral() (确保在找到 jcenter() 的两个位置都添加 mavenCenteral()。)

        在 JCenter 之前添加 Maven Central 意味着默认使用 Maven Central,JCenter 仍将用作后备。

        如果您今天尝试从您的 Android 项目中完全删除 jcenter(),您可能会收到以下错误。

        > Could not resolve all artifacts for configuration ':classpath'.
           > Could not find org.jetbrains.trove4j:trove4j:20160824.
             Searched in the following locations:
               - https://dl.google.com/dl/android/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
               - https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
             Required by:
                 project : > com.android.tools.build:gradle:4.1.2 > com.android.tools.build:builder:4.1.2 > com.android.tools:sdk-common:27.1.2
        

        这个错误的原因是Android Core依赖仍然需要JCenter。

        Android Studio 4.1.2 和 AGP(Android Gradle 插件)仍然需要仅在 JCenter 上的依赖项 (trove4j) 版本。

        这已在 AGP 4.2.0 中解决,但仍处于测试阶段,需要 Android Studio 4.2 测试版或更高版本。

        【讨论】: