无法摆脱不正确的“ build.gradle”弃用警告(“编译”)

时间:2018-07-15 22:13:15

标签: android-studio

这是我的build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.payne.simpletestapp"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:support-vector-drawable:27.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    api 'com.google.firebase:firebase-auth:16.0.1'

    implementation 'org.osmdroid:osmdroid-android:6.0.1'
    implementation 'org.osmdroid:osmdroid-wms:6.0.1'
    implementation 'org.osmdroid:osmdroid-mapsforge:6.0.1'
    implementation 'org.osmdroid:osmdroid-geopackage:6.0.1'
    api 'com.github.MKergall:osmbonuspack:6.5.1'
}

apply plugin: 'com.google.gms.google-services'

这是我在Android Studio中收到的警告:

Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

是我的compileSdkVersion行引起此消息吗?当我第一次删除所有“编译”时,为apiimplementation随机更改它们(因为我不知道有什么区别),警告停止出现。但是有一天,我集成了一个使用compile的新依赖项,因此再次收到警告。因此,我将其更改为api(无特殊原因),但现在我无法摆脱此警告消息。

任何想法如何摆脱它?

1 个答案:

答案 0 :(得分:0)

我们来回顾一下API和编译的区别:

  • 实施:
  

当您的模块配置实现依赖项时,它会让Gradle知道该模块不想在编译时将该依赖项泄漏给其他模块。即,该依赖关系仅在运行时可用于其他模块。

  • API
  

当模块包含api依赖项时,它会让Gradle知道该模块要将该依赖项可传递地导出到其他模块,以便它们在运行时和编译时都可用。

(来自https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration?utm_source=android-studio#new_configurations

API的行为完全就像编译一样。如果您不想为实现而烦恼,请使用API​​。

实现有点棘手,iirc只会允许您的依赖项在运行时使用,而不能在编译时使用。您可以按实现替换导入,如果项目构建失败,则用api替换。

警告可能来自您具有的依赖项,该依赖项又具有依赖项,这些依赖项称为编译。尝试更新依赖项的版本,也许您使用的是尚未更新其gradle构建文件的旧版本。