【问题标题】:build.gradle warning 'avoid using + in version numbers'build.gradle 警告“避免在版本号中使用 +”
【发布时间】:2017-10-17 15:32:27
【问题描述】:

这是我的build.gradle 应用级文件。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "it.myco.app.myproj"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

Android Studio 突出显示该行

compile 'com.android.support:appcompat-v7:26.+'

与消息

避免在版本号中使用 + 会导致不可预测和 不可重复的构建

此行由 Android Studio 自动生成。为什么这个警告信息?我需要写什么来解决警告?

【问题讨论】:

标签: android android-studio gradle libraries android-appcompat


【解决方案1】:

你可以使用类似的东西

compile 'com.android.support:appcompat-v7:26.1.0'

【讨论】:

    【解决方案2】:

    有一天,其他人可能会对您的代码执行git pull,然后尝试构建一个 apk。此 apk 可能具有不同的行为,甚至会出现构建错误或运行时错误,因为依赖项版本可能与您创建此代码时使用的依赖项不同。

    您应该使用显式依赖版本。我建议使用最新版本。您可以搜索bintray jcenter 以查看最新版本。如果您使用的是 Android Studio,File -> Project Structure -> Modules -> (your module, app usually) -> Dependencies -> Add library dependency (click the + sign) 会为您提供最新版本,甚至会自动添加库。

    【讨论】:

    • 这个答案给出了一个具体的场景来解释出了什么问题。然后进一步展示如何获取最新的依赖。我只是做了一个小修改来改进措辞。
    • @RickMajpruz 谢谢,抱歉我的英语不好:)
    • 我不清楚如何导航到Dependencies -> Add library dependency。大概我应该调出Project Structure 选项卡但是然后呢?我在顶部没有看到菜单条目,我尝试右键单击,但在上下文菜单中没有看到 Dependencies。也许这应该是一个单独的问题。我正在使用 Android Studio 2.3.3。
    • @RickMajpruz 首先选择Modules -> app。应该是Project structure -> app(module) -> Dependencies -> Add library dependency
    • 只是给读者一点额外的提示。您可以从 Android Studio 的顶级菜单中使用File -> Project Structure 调出 Project Structure 窗口。
    【解决方案3】:

    用最新版本的库替换它。通常AS会在你alt + enter警告时显示最新版本。

    More info on the reasons

    【讨论】:

      【解决方案4】:

      不要在依赖版本中使用 +。这意味着 Android Studio 将使用最新的库,这可能会在未来引起问题。在 android studio 中,建议使用相同版本的所有 android 库,假设您正在使用 + 并且如果任何单个库已更新,则 android studio 将使用该更新的库,因此该库的版本将会更改。这会导致构建应用程序出现问题。

      这就是 gradle 发出此警告的原因。最好写完整版本号而不是 +。

      【讨论】:

      • "此行由 Android Studio 自动生成。"
      【解决方案5】:

      为什么会出现此警告消息?

      在这里您可以找到有关此主题的good blog

      动态版本为您的构建添加了不确定性

      • 依赖项可能会意外地为您的应用引入行为更改。

      • 相同的源建立在两个 不同的机器可能会有所不同。

      • 同样,构建在同一台机器上,但 在不同的时间可以不同。

      • 过去的版本不能 完美再现。这使得很难安全地恢复。

      • 那里 如果不良行为者引入恶意 依赖项的版本。

      我需要写什么来解决警告?

      始终明确指定您的依赖版本。

      【讨论】:

      • 这也是一个很好的答案,就像我标记为解决方案的其他答案一样。
      【解决方案6】:

      这是一个正常的警告。

      你最好选择一个具体的版本而不是那样做。这是因为如果您使用“+”,它将选择最新的,因此在新版本中,您可能会得到一些已弃用或意外的更改,这些更改会使您的应用程序死掉。想想如果你在一个巨大的项目中使用它,你会有很多依赖,所以它会是一个混乱的环境。

      使用特定版本,如果有新版本...手动更新。

      要解决警告并选择最新版本,如果您使用的是Windows,请单击Alt+Enter,它将选择最新版本。

      如果它不起作用,您将不得不在 Internet 或 Project Structure > Modules >(your module) > Dependencies > +

      中搜索它

      【讨论】:

      • 永远不要将警告称为“正常”...
      猜你喜欢
      • 2019-01-17
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 2019-02-21
      • 2016-12-25
      • 2021-02-04
      相关资源
      最近更新 更多