如何检测Android Studio项目中build.gradle中何时存在依赖库版本更新

How to detect when dependency library version updates exist in build.gradle in AndroidStudio project

我有一个包含两个模块(典型的前端应用程序和后端)的 android 项目。我有三个 build.gradle 文件,每个模块一个,根目录一个。

我构建依赖项的方式是将所有版本提取到根级别 build.gradle 中的单独变量中

ext {
    // SDK and tools
    MIN_SDK_VERSION = 19
    TARGET_SDK_VERSION = 23
    COMPILE_SDK_VERSION = 23
    BUILD_TOOLS_VERSION = '24'

    // app dependencies
    GOOGLE_API_CLIENT_VERSION = '1.19.0'
    GOOGLE_PLAY_SERVICES_VERSION = '8.4.0'
    ANDROID_SUPPORT_LIB_VERSION = '23.1.0'
    [...]

    // backend dependencies
    [...]
}

后来在我的 say 应用程序 build.gradle 文件中使用

dependencies {
    [...]
    compile(group: 'com.google.oauth-client', name: 'google-oauth-client', version: rootProject.ext.GOOGLE_API_CLIENT_VERSION)
    /////////////////////////////////
    // Google Play Services explicit dependency
    compile(group: 'com.google.android.gms', name: 'play-services-auth', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
    compile(group: 'com.google.android.gms', name: 'play-services-plus', version: rootProject.ext.GOOGLE_PLAY_SERVICES_VERSION)
    [...]

    /////////////////////////////////
    // Local Testing
    testCompile(group: 'junit', name: 'junit', version: rootProject.ext.JUNIT_VERSION)
    testCompile(group: 'pl.pragmatists', name: 'JUnitParams', version: rootProject.ext.JUNIT_PARAMS_VERSION)
    [...]
}

注意:我在某个教程中发现了这个想法,我认为它非常漂亮。

但是,我正在努力跟踪哪些 lib 版本可用,哪些是可升级的,等等。跟踪这些事情变得越来越困难,因为我有一个合理大小的依赖项列表。好奇其他人是如何解决这个问题的。谢谢。

我如何管理依赖关系的总结。

所有依赖项定义都在 gradle/dependencies.gradle 中定义,它适用于所有项目和构建脚本。我通常将其分为三类。一个完整的例子是 here.

ext {
  versions = [
    caffeine: '2.3.1',
  ]
  test_versions = [
    testng: '6.9.12',
  ]
  plugin_versions = [
    versions: '0.13.0',
  ]

  libraries = [
    caffeine: "com.github.ben-manes.caffeine:caffeine:${versions.caffeine}",
  ]
  test_libraries = [
    testng: dependencies.create("org.testng:testng:${test_versions.testng}") {
      exclude group: 'junit'
    },
  ]
  gradle_plugins = [
    versions: "com.github.ben-manes:gradle-versions-plugin:${plugin_versions.versions}",
  ]
}

然后在我的根项目中我bootstrap它是,

buildscript {
  apply from: "${rootDir}/gradle/dependencies.gradle"

  repositories {
    jcenter()
  }

  dependencies {
    gradle_plugins.each { name, dependency -> classpath dependency }
  }
}

allprojects {
  apply from: "${rootDir}/gradle/dependencies.gradle"

  repositories {
    jcenter()
  }
}

这允许将项目中的依赖项定义为,

dependencies {
  compile libraries.caffeine
}

为了检测更新的版本,我编写了 gradle-versions-plugin。通过查询存储库的版本信息并将其与您的定义进行比较来生成报告。我 运行 它经常手动,但其他人在他们的 CI 中编写脚本并使用 json 或 xml 报告。

在我编写插件后,还开发了一些其他方法。 Spring 的 dependency-management-plugin works with Maven BOMs, as does Netfix's nebula-dependency-recommender-plugin. Netflix uses gradle-dependency-lock-plugin 定义动态版本并生成锁定文件以修复版本。还有依赖版本警报服务,虽然一个简单的 CI 工作可能是等效的。

我从来没有使用过任何替代方案,因为它们(对我来说)似乎不太直观,在我找到一个很好的解决方案多年后才出现,如果你来自 Maven,这是一种熟悉的方法。希望其他人可以阐明其他方法的好处。