如何检查Gradle依赖项是否有新版本?

277
在 Android Studio 中,当我在版本号中使用 + 时,例如:com.android.support:recyclerview-v7:21.+,会显示一个“避免在版本号中使用 +”的警告。

但是如果我使用特定的版本号,就不能始终使用最新的版本。因为我的项目有很多依赖项。

如何检查依赖项是否有更新的版本?

是否有Android Studio插件(或类似的工具)可以在依赖项有新版本时通知我?

编辑:
Android Studio会突出显示过时的Android Support库和Google Play服务。但对于其他自定义库则不适用。

Android Studio highlights


对于正在更新库的开发人员,请参阅:如何在Bintray中更新新版本的库? - Suragch
3
在至少 Android 3.0 中,自定义库的更新现在显示与您在问题图像中看到的支持库相同的通知。 - Suragch
@Suragch,这对我在Android Studio 3.0.1中的某些依赖项不起作用。 - Rémy
11个回答

292

更新(05/23/18):

新版的Android Studio在“项目结构”对话框中不显示版本更新。相反,Adam的答案适用于Android Studio 3+。

分析 > “按名称运行检查”

然后搜索“可用较新库版本”。

以前的方法:

从Android Studio 2.2开始,一个新的“项目结构”对话框会显示应用程序正在使用的依赖项列表以及本地和远程存储库中可用的更新。

  • 通过转到Android Studio > 设置 > 构建,执行,部署 > Gradle > 实验并选中使用新项目结构对话框来激活它(感谢@jessehensold)
  • 然后通过转到文件 > 项目结构 > 消息来打开它。

进入图像描述

对于较旧版本的Android Studio,请参见下面的其他响应。


1
关于编辑;它是关于Android Studio的,因为我正在寻找一个Android Studio插件。谢谢回答,但我已经看过了。 - osrl
12
这个功能在最新版本的Android Studio中已经不存在了(使用beta 2)。 - Gonzalo
8
我需要进入“首选项>构建、执行、部署>Gradle>实验性”并勾选“使用新项目结构对话框”。 - jessehensold
1
必须前往“依赖项”选项卡以启用“应用”按钮。是否存在某些错误? - Mateusz Kaflowski
2
我尝试在Android Studio 2.3中进行此操作,但是“Project Structure”对话框的“Dependencies”选项卡无法找到我的项目的任何依赖项。 - jakub.g
显示剩余10条评论

228

这个功能现在已经作为Android Studio中的Lint检查内置。你可以在此处启用它:

设置 > 编辑器 > 检查 > "可用新版本的库"

对于这个检查的描述:

可用新版本的库

该检测器会检查一个中央仓库,以查看此项目使用的依赖项是否有更新的版本。这类似于GradleDependency检查,后者会检查Android SDK工具和库中是否有更新的版本,但它能与任何MavenCentral依赖项配合使用,并且每次连接到该库,这使得它更加灵活,但也更加缓慢

由于这可能引入的减速,我建议定期手动运行它,而不是始终开启它。您可以通过以下方式实现:

分析 > "按名称运行检查"

然后搜索“可用新版本的库”,并在您的模块上运行它。

编辑:自Android Studio 2.3起,上述步骤应该可以直接使用。如果您使用的是旧版本(您应该进行更新),则以下内容可能有所帮助:

请注意,似乎必须启用该检查才能手动运行它 - 因此(截至Android Studio 2.0 Beta 2),您需要在设置中找到该检查,启用它,然后按名称运行它,然后再次禁用它(以恢复先前的性能)。


6
不知道是否有做错什么,但那对我没用。 - osrl
2
是的,我也一样,Realm不在MavenCentral上。你的Retrofit版本是否定义为这样?我的是这样的,但它也找不到它。 def okhttpVersion = '2.7.2' compile "com.squareup.okhttp:okhttp:$okhttpVersion" - osrl
2
这显示了“检查”选项卡中可用的更新,但它不会在build.gradle中将其突出显示为警告。我还没有找到能够实现这一点的解决方案。 - Bitcoin Cash - ADA enthusiast
1
这个答案可以更新,删除关于先启用检查的最后一段。在Android 2.3.3上,手动运行检查而没有先在设置中启用它对我有用。 - Ray Li
4
不得不回到这个答案来报告,只有 MavenCentral 依赖项才能使用此方法更新。这意味着来自 Jitpack 或其他来源的存储库不会自动更新。获取所有依赖项的最新版本的正确方法在此答案中 [https://dev59.com/d14b5IYBdhLWcg3w61Z3](这里)。 - Ray Li
显示剩余12条评论

101

除了Android Studio内置的功能外,还有一个很好的Gradle插件叫做Gradle Versions Plugin,它能够完全满足您的需求,并且作为一个纯Gradle扩展具有许多优点,不会被绑定到任何IDE中,只是纯粹的Gradle工具。

Gradle Versions Plugin可以创建人类可读的纯文本格式报告,还可以将其转储为JSON或XML格式,这对于自动化/脚本处理非常有用。

使用起来非常简单。一旦添加到您的Gradle文件中,您只需要执行:

$ ./gradlew dependencyUpdates

并且它应该生成类似于这样的项目依赖关系报告:

------------------------------------------------------------
: Project Dependency Updates (report to plain text file)
------------------------------------------------------------

The following dependencies are using the latest milestone version:
 - com.github.maksim88:PasswordEditText:v0.9
 - com.marcinorlowski:webnet-log:1.0.3
 - com.nulab-inc:zxcvbn:1.2.2

The following dependencies exceed the version found at the milestone revision level:
 - com.hannesdorfmann.fragmentargs:annotation [4.0.0-SNAPSHOT <- 3.0.2]
 - com.hannesdorfmann.fragmentargs:bundler-parceler [4.0.0-SNAPSHOT <- 3.0.2]
 - com.github.bumptech.glide:glide [3.7.0 <- 3.6.1]
 - com.hannesdorfmann.fragmentargs:processor [4.0.0-SNAPSHOT <- 3.0.2]

The following dependencies have later milestone versions:
 - com.github.PhilJay:MPAndroidChart [v2.2.5 -> v3.0.1]
 - com.android.support:appcompat-v7 [25.1.0 -> 25.1.1]
 - com.jakewharton:butterknife [8.4.0 -> 8.5.1]

Generated report file build/dependencyUpdates\report.txt

有关详细使用示例,请参见文档


4
太棒了!我找到了这个普通Java项目所需的东西。一种不依赖于Lint的Android特定性的好的通用解决方案。 - TWiStErRob
3
“新版图书馆可用”方法不起作用,但这很完美!(我使用多个Gradle文件,其中包含库版本的变量) - norbDEV
但是你需要一个编译系统。如果你想最初找出一个库的当前版本,该怎么办? - Martin
1
我认为这是长期项目的最佳做法。因为这是Gradle任务,所以您可以将其添加为构建步骤之一,这样可以实现半自动更新流程。在我看来,完全自动化是不可能的,但有一些工具可以尝试实现它。我在这里写得更详细:https://medium.com/@thecodeside/updating-dependencies-in-android-project-my-approach-df986d0414af - Artur Latoszewski
我将插件添加到我的安卓项目中,然后运行了命令./gradlew dependencyUpdates,但它扫描了55分钟而没有结果,我不得不手动停止它。 - Astha Garg
显示剩余5条评论

37

在Android Studio中,依次选择“文件”>“项目结构”,然后单击“建议”。我知道,这个解决方案是由Hemant Sharma和Jeremías Gersicich提出的,但在3.4.1版本中,Android Studio对此进行了更改。

输入图像描述

这通常会有所帮助,但有时库会更改其ID(路径)。因此,有时您需要访问它们的网站,并查看为什么这些库很长时间没有更新。之后手动更新。


有其他人在使用Android Studio 3.5时遇到了这个空白的屏幕吗? - Nicola Beghin
@NicolaBeghin,我刚刚在一个空项目上检查了一下,得到了4个建议。是的,在7月份有一个时期,它没有显示建议,但他们已经修复了这个错误。我猜测这是Google服务器的问题,有时可能会发生。 - CoolMind
4
不支持Gradle KTS - Vlad
1
谢谢@CoolMind!不知道为什么这个建议在Android Studio 4.2.1的build.gradle文件中没有直接显示?以前,这些建议会通过启用设置中的Lint显示,即Settings > Editor > Inspections > Newer Library Versions Available - AdamHurwitz
1
太棒了@CoolMind,我创建了一个新的帖子,Android Studio未显示建议的Gradle依赖项更新与Lint,以解决这个问题。 - AdamHurwitz
显示剩余2条评论

15

已弃用 - 请查看最新方法的已接受的答案

我下面介绍的工具不适用于新版本的Android Studio / Gradle,而且其作者也不再维护它 (截至2016年10月30日)。因此,除非使用旧版本的Android Studio,应使用所接受的答案中提出的解决方案。


自2016年1月以来,Android Studio中有一个名为“Dependencies Version Checker”的插件可以执行类似的操作,其源代码可以在GitHub上找到。

可以通过内置界面(设置 > 插件 > 浏览存储库...)添加它:

本地界面内部的样子

安装并重启后,UI中会出现以下选项卡:

重启后出现的新UI选项卡。

然后将相关的build.gradle粘贴到VersionChecker面板的左侧,并按下Version Check按钮。结果是在右侧出现一个表格,其中包括过去脚本中使用的库的最新版本(如上图所示)。


尽管这正是我最初期望的,但它并没有按预期工作。我在Github仓库中提出了一个问题。https://github.com/takuaraki/DependenciesVersionChecker/issues/5 - osrl
当我点击“检查版本”时,出现了一个通用的错误/失败消息气球,我尝试过这个。 - Greg Ennis
@GregEnnis 最新版本的插件有问题。要么使用旧版本,要么等待更新... - Dev-iL

6

前往Android Studio -> 首选项 -> 插件(Mac系统)或文件 -> 设置 -> 插件(Windows系统),搜索“检查依赖更新插件”。 安装并重启Android Studio。您将能够在右侧看到“Dependencies”选项卡,显示是否有任何依赖项需要更新。

enter image description here


1
此插件未显示所有依赖项的更新 o.O(例如 exoplayer..) - Jemshit Iskenderov
它只显示标记为testImplementation的依赖项。 - Dziki Arbuz
无法工作... - Arst

2

对于支持库(com.android.support)依赖项,有一个更好的选择-andle

它可以查询jcenter和maven center。

只需三个简单步骤即可同时更新所有项目。

1.安装:

    $ sudo pip install andle

2. 设置SDK:

    $ andle setsdk -p <sdk_path>

3. 更新依赖项:

    $ andle update -p <project_path> [--dryrun] [--remote] [--gradle]

--dryrun:仅在控制台中打印结果

--remote:检查jcenter和mavenCentral中的版本

--gradle:检查gradle版本

更多信息请参见https://github.com/Jintin/andle


仅供支持库使用? - osrl
如果你添加 --remote 或 -r,它将解析 jcenter 上的版本。 - Jintin

2
我正在处理同样的问题,并尝试了答案https://dev59.com/gV4b5IYBdhLWcg3wzUUp#35371234
对于我在Android Studio 3.4.1上真正起作用的是:
最初的回答
File -> Project Structure -> Dependencies

一旦您到达此点,您项目或模块中包含的所有依赖项都将列出。已过时的依赖项将被强调,并且当您选择一个依赖项时,它的详细信息将显示,使您可以更新变量(如果与声明分开)或依赖项的选项。
有点晚了,但这是对我有效的方法。

我也发现了这种方法。奇怪的是有人标记为负。 - CoolMind

1
你可以使用Gradle refreshVersions。它会生成一个Java属性文件,告诉你有哪些版本可用,并允许你在所有依赖实例中更改版本号。因此,如果您需要更改依赖项的版本,则只需编辑此文件。
Java属性文件versions.properties看起来像this

0
我尝试了不同的库,但都没有找到我喜欢的。有些需要迁移您的代码,有些需要通过命令行运行。因此,我制作了一个Gradle插件,可以添加更新注释。最大程度地减少您的代码修改。 https://github.com/zeroarst/dependency-updates-commenter

示例:

之前

object Junit {
    const val junit = "junit:junit:4.12"
}

之后

import io.github.zeroarst.dependencyupdatescommenter.CommentUpdates

object Junit {
    // Available versions:
    // 4.13-rc-2
    // 4.13-rc-1
    // 4.13-beta-3
    // 4.13-beta-2
    // 4.13-beta-1
    @CommentUpdates
    const val junit = "junit:junit:4.12"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接