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

Cre*_*eos 0 gradle android-build android-studio build.gradle android-gradle-plugin

我有一个带有两个模块的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
    [...]
}
Run Code Online (Sandbox Code Playgroud)

以后在我的说app 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)
    [...]
}
Run Code Online (Sandbox Code Playgroud)

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

但是,我正在努力跟踪哪些lib版本可用,什么是可升级的等等.由于我有一个合理大小的依赖项列表,因此很难跟踪这些内容.好奇其他人如何解决这个问题.谢谢.

Ben*_*nes 6

我如何管理依赖项的摘要.

所有依赖关系定义都定义在gradle/dependencies.gradle,它们适用于所有项目和buildscript.我通常将其分为三类.这里有一个完整的例子.

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}",
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后在我的根项目中,我将其引导为,

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()
  }
}
Run Code Online (Sandbox Code Playgroud)

这允许在项目中定义依赖项,

dependencies {
  compile libraries.caffeine
}
Run Code Online (Sandbox Code Playgroud)

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

我编写插件后开发了一些其他方法.Spring的dependency-management-plugin与Maven BOMs一起使用,Netfix的nebula-dependency-recommender-plugin也是如此.Netflix使用gradle-dependency-lock-plugin来定义动态版本并生成锁定文件来修复版本.还有依赖版本警报服务,但简单的CI作业可能是等效的.

我从来没有使用任何替代品,因为它们看起来不那么直观(对我而言),在我有一个很好的解决方案后几年出现,如果你来自Maven,这是一种熟悉的方法.希望其他人可以阐明其他方法的好处.