경고 : API 'variant.getJavaCompile ()'은 더 이상 사용되지 않으며 'variant.getJavaCompileProvider ()'로 대체되었습니다.


199

갑자기 Gradle을 동기화 할 때이 오류가 발생합니다.

경고 : API 'variant.getJavaCompile ()'은 더 이상 사용되지 않으며 'variant.getJavaCompileProvider ()'로 대체되었습니다. 자세한 내용은 https://d.android.com/r/tools/task-configuration-avoidance 영향을받는 모듈 : app을 참조 하십시오 .

나는 build.gradleapp 모듈을 위해 이것을 가지고있다 :

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'

apply plugin: 'io.fabric'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.2"
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "..."
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        versionNameSuffix = version_suffix

        [...]
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

            [...]
        }
        debug {
            [...]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.61"
    implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:preference-v7:28.0.0"
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.google.android.material:material:1.0.0-rc02'

    [...]
}

앱을 올바르게 컴파일 할 수는 있지만 약간 귀찮고 2019 년 말에 뭔가 작동하지 않을 것입니다. 무엇이 무엇인지, 어떻게 해결해야하는지에 대한 아이디어가 있습니까?


약간의 니트 선택처럼 경고는 오류가 아닙니다. 경고가 있더라도 코드는 동일한 방식으로 컴파일되어야하지만 오류로 인해 빌드가 실패 할 수 있습니다. 현재 진행중인 작업 방식은 향후 작동하지 않을 수 있으며 플러그인 업데이트로 수정 될 수 있습니다. 오류에 링크 된 페이지읽는 데 시간이 걸렸습니까 ?
Michael Dodd

2
내 개인적인 느낌은 새로운 Gradle API를 사용하도록 아직 업데이트되지 않은 플러그인으로 인해 발생한다는 것입니다.
Michael Dodd



답변:


81

이 문제는 이제 Fabric Gradle 버전 1.30.0 업데이트에서 해결되었습니다.

업데이트 릴리스 : 2019 년 3 월 19 일

이 링크를 참조하십시오 : https://docs.fabric.io/android/changelog.html#march-15-2019

프로젝트 레벨 Gradle에서 클래스 경로 종속성을 업데이트하십시오.

buildscript {
    // ... repositories, etc. ...

    dependencies {
        // ...other dependencies ...
        classpath 'io.fabric.tools:gradle:1.30.0'
    }
}

2
이것은 또한 정답이며 직면 문제를 해결하는 쉬운 방법입니다.
M.Noman

5
나는 지금있다 classpath 'io.fabric.tools:gradle:1.29.0'. 어떻게해야합니까?
Faizan Mubasher 2016 년

7
@FaizanMubasher Google 서비스를 4.2로 다운 그레이드 해보십시오
무한 루프

4
4.2로 다운 그레이드하는 @InfiniteLoops 제안은 효과가있는 것 같습니다.
HondaGuy

1
패브릭을 1.31.0으로 업그레이드하고 Google 서비스를 4.2.0으로 다운 그레이드
Mukeshkumar S

94

3.3.0으로 업데이트 한 후이 문제가 발생합니다.

gradle 파일에서 오류 상태를 수행하지 않으면이 문제를 일으키는 최신 API로 여전히 업데이트되지 않은 플러그인입니다. 어떤 플러그인인지 파악하려면 다음을 수행하십시오 ( 3.3.0 발표의 "사용되지 않는 API를 사용할 때 더 나은 디버그 정보"에 설명 된대로 ).

  • gradle.properties 파일에 'android.debug.obsoleteApi = true' 를 추가 하면 자세한 내용과 함께 오류가 기록됩니다.
  • 다시 시도하고 로그 세부 사항을 읽으십시오. "문제가있는"플러그인의 흔적이있을 것입니다
  • 식별하면 사용 중지하고 문제가 사라 졌는지 확인하십시오.
  • 플러그인의 github 페이지로 이동하여 자세한 로그와 명확한 설명이 포함 된 문제를 생성하십시오. 따라서 개발자가 모든 사람을 위해 더 빨리 해결할 수 있도록 도와줍니다
  • 문제를 해결하는 동안 인내심을 가지거나 문제를 해결하고 개발자를위한 PR을 만듭니다.

그것이 다른 사람들을 돕는 희망


4
이것은 내 의견으로는 가장 일반적이고 유용한 답변입니다. 필자의 경우, Groovy-Android 플러그인 (스팍 테스트 용) 을 사용하기 때문에이 경고가 발생 합니다.
AutonomousApps

2
이것이 정답입니다. 누가 gradle 버전 업데이트를 옹호 했습니까?
부두 베 토스

이것은 또한 나를 위해 일했습니다.이 문제에 새로운 것이 있습니까? 그동안 우리가 할 수있는 일은 없어요. 맞습니까?
Billyjoker

1
정말 도움이됩니다. 제 경우에는 휴고 플러그인이었습니다.
AlvaroSantisteban

6
추가 후 android.debug.obsoleteApi=true, 기록 된 세부 사항을 읽으려면 : 하단의 "빌드 출력"창으로 이동하여 "빌드 출력"창에서 "토글보기"를 클릭하십시오. 그 색을 클릭하면 색상이 사라지고이라고 표시된 맨 위로 스크롤합니다 WARNING: API 'variant.getAssemble()' is obsolete. 그런 다음 아래에 표시됩니다 REASON: Called from: ... 제 경우에는 medium.com/@xabaras/
누군가 어딘가에

62

필자의 경우 gms 서비스 4.3.0으로 인해 발생했습니다. 그래서 나는 그것을 다음과 같이 바꿔야했다.

com.google.gms:google-services:4.2.0

나는 이것을 실행하여 이것을 발견했다.

gradlew sync -Pandroid.debug.obsoleteApi=true

터미널에서. Android Studio에서보기-> 도구 창-> 터미널로 이동하십시오.


우분투에서 우분투에서 어떻게 할 수 있는지이 명령을 실행할 수 없습니다. 패키지 설치를 요청하고 해당 패키지를 여전히 설치해도 실행할 수 없습니다. 다른 방법이 있습니까?
Vasudev Vyas

3
방금 gms google 서비스를 4.2로 변경했으며 경고가 사라졌습니다.
무한 루프

2
@VasudevVyas android Studio 인 ./경우 명령 앞에 추가 하십시오. 즉, 터미널이 Android 프로젝트의 루트로 설정된 경우입니다. 그렇지 않으면 프로젝트의 루트로 cd해야합니다.
Racu

3
Google 서비스 종속성을 다운 그레이드해야하는 이유는 무엇입니까? 해결책이 아닙니다.
Ahamadullah Saikat

4
@AhamadullahSaikat 이것은 아마도 향후 릴리스에서 수정 될 것입니다. 그런 다음 다시 업그레이드 할 수 있습니다. 이것은 구글에 의해 해결 될 때까지 해결 방법입니다.
Numan Karaaslan

34

이것은 단지 경고 일뿐이며 플러그인 업데이트로 2019 년 전에 수정 될 것이므로 걱정하지 마십시오. 호환되는 버전의 플러그인과 gradle을 사용하는 것이 좋습니다.

더 나은 경험과 성능을 위해 여기에서 플러그인 버전과 gradle 버전을 확인할 수 있습니다.

https://developer.android.com/studio/releases/gradle-plugin

부드럽고 경고 / 오류없는 코드를 위해 안정적인 버전을 사용해보십시오.


24
실제로는 경고보다 더 교활합니다. 코드 편집기에 영향을 미치며 클래스에 대한 참조를 검색하지 못하게합니다.
IgorGanapolsky

이것은 dev / canary 버전뿐만 아니라 안정적인 경우에도 발생하지만 최신 업데이트로 수정 될 것이라는 경고라고 생각합니다.
말론 로페스

1
@HarshilShah 문제가있는 플러그인이 업데이트 될 것이라는 보장은 없습니다. 개발자는이 문제에 대해 전혀 알지 못할 수도 있습니다. 그 때문에 우리가 할 수있는 최선은 다음과 같습니다. stackoverflow.com/a/54213973/304270
Ewoks

25

나는 또한 같은 문제에 직면했다. 그리고 잠시 동안 검색 한 후 최신 버전의 google-services플러그인 (버전 4.3.0) 을 사용하여 경고가 발생한다는 것을 알았습니다 . 그건 그렇고 내 응용 프로그램에서 Firebase 기능을 위해이 플러그인을 사용하고있었습니다. 내가 한 것은 google-services다음과 같이 build.gradle (Project) 레벨 파일의 빌드 스크립트에서 플러그인 을 다운 그레이드하는 것입니다 .

buildscript{
    dependencies {
       // From =>
       classpath 'com.google.gms:google-services:4.3.0'
       // To =>
       classpath 'com.google.gms:google-services:4.2.0'
    }
}

1
나는이 해결책을 취했고 오류는 사라졌다. 감사합니다
wesley franks

1
일! 감사합니다
Сергей

3
이 경고가 다시 나타나지 않으면 서 4.3.2로 업그레이드했습니다.
tagy22

10

다음에서 Google 서비스 버전을 변경하십시오 build.gradle.

dependencies {
  classpath 'com.google.gms:google-services:4.2.0'
}

1
나는 4.3.0에 있고 문제는 여전히 존재합니다.
wesley franks

@wesleyfranks도 마찬가지입니다. 그러나 4.2.0으로 전환하면 더 이상 문제가 없습니다 ...
diAz

나는 4.3.1에있어하고 문제가 여전히
pvalle

8

이것은 두 가지 이유로 빌드 도구에 의해 경고되는 것입니다.
1. 플러그인 중 하나가 TaskProvider 대신 Task에 의존하고 있습니다.
2. TaskProvider를 지원하는 작업 사용을 구성했습니다.

WARNING: API 'variant.getGenerateBuildConfig()' is obsolete and has been replaced with 'variant.getGenerateBuildConfigProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getJavaCompile()' is obsolete and has been replaced with 'variant.getJavaCompileProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

WARNING: API 'variant.getMergeResources()' is obsolete and has been replaced with 'variant.getMergeResourcesProvider()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance

아래의 스 니펫을 찾아 업데이트하십시오.

android {
    <library|application>Variants.all { variant ->
        /* Disable Generating Build config */
        // variant.generateBuildConfig.enabled = true // <- Deprecated
        variant.generateBuildConfigProvider.configure {
            it.enabled = true // Replacement
        }
    }
}

마찬가지로,의 용도 찾을 'variant.getJavaCompile()'또는 'variant.javaCompile', 'variant.getMergeResources()'또는 'variant.mergeResources'. 위와 같이 교체하십시오.

작업 구성 회피에 대한 추가 정보


1
이것은 모든 Android Studio 프로젝트에서 발생합니다. 언급 한 스 니펫과는 아무 관련이 없습니다.
IgorGanapolsky

2
@ IgorGanapolsky, 그것은 또한 터미널에서 일어날 것입니다. 실행 해보십시오 ./gradlew. 이것은 AS와 관련이 없으며 빌드 도구에 있습니다. 에 / 다운 그레이드 업그레이드 com.android.tools.build:gradle:3.2.0및 실행 ./gradlew. 이것은 오지 않을 것이다.
VenomVendor

variant.generateBuildConfig.enabled내 프로젝트에서 찾지 못했습니다 . 여전히 위의 경고가 표시됩니다
kbsbng

variant.generateBuildConfig.enabled내 프로젝트에서 찾지 못했습니다 . 여전히 위의 경고가 표시됩니다
kbsbng

@ VenomVendor 이것은 내 문제에 따라 가장 유용한 답변입니다.이 코드 스 니펫으로 여전히 도움을 줄 수 있습니까? codeshare.io/G6ogzk
Raghav Satyadev 2012

5

Gradle 버전을 다운 그레이드하면 나를 위해 일했습니다.

classpath 'com.android.tools.build:gradle:3.2.0'

4
다운 그레이드는 절대 옵션이 아닙니다
Roshana Pitigala

이것이 내가 원하는 답변입니다. 감사합니다!
ankotliner

특정 상황에서 다운 그레이드는 괜찮습니다
martinseal1987

5

1)에 추가 android.debug.obsoleteApi=true하십시오 gradle.properties. 경고 로그의 영향을받는 모듈이 표시됩니다.

2) 더 이상 사용되지 않는 기능을 업데이트하십시오.

  • variant.javaCompilevariant.javaCompileProvider

  • variant.javaCompile.destinationDirvariant.javaCompileProvider.get().destinationDir


5

Kotlin ( Plugin and stdLib ) 버전 을 1.3.1로 업그레이드 하면 필자의 경고가 해결되었습니다. 기존 Kotlin 버전을 다음으로 바꾸어 전체 프로젝트에서 Kotlin 버전을 업데이트하십시오.

ext.kotlin_version = '1.3.50'

ext.kotlin_version = '1.3.10'또는 '1.3.50'
푸쉬킨

이것은 내 문제였다. 전에 ext.kotlin_version = '1.2.71'.. 위의 답변으로 변경하고 잘 작동했습니다! -내 폴더 /android/ios폴더를 삭제 한 다음 flutter create .Flutter 앱을 다시 빌드하기 위해 실행 ext.kotlin_version = '1.2.71'했습니다.build.gradle
MaylorTaylor

4

클래스 경로 'com.android.tools.build:gradle:3.3.0-alpha13'에서 클래스 경로 'com.android.tools.build:gradle:3.2.0'으로 돌아갑니다.

이것은 나를 위해 일했다


6
그것은 단지 일시적인 해결 방법의 원인입니다. 3.2.0에 영원히 머물 수 없습니다. 특히 최종 3.3.0이 이미 종료 된 경우
Ewoks

다운 그레이드 gradle 버전은 옵션이 아닙니다! .
Jorgesys

4

패브릭 플러그인을 최신 프로젝트 레벨 Gradle 파일 (앱 레벨 아님)로 업데이트하십시오. 내 경우에는이 줄로 문제가 해결되었습니다.

classpath 'io.fabric.tools:gradle:1.25.4'

classpath 'io.fabric.tools:gradle:1.29.0'

3

나의 경우에는

build.gradle(Project)

였다

ext.kotlin_version = '1.2.71'

로 업데이트

ext.kotlin_version = '1.3.0'

문제가 지금은 사라 보인다


2

내 경우에는 com.google.firebase.firebase-crash플러그인 을 주석 처리해야했습니다 .

apply plugin: 'com.android.application'
// apply plugin: 'com.google.firebase.firebase-crash' <== this plugin causes the error

Android Studio 3.3.0부터 버그입니다.


2
나를 위해 그것은 사용하기 때문에 발생합니다oss-licenses-plugin
Mikhail

2

gradle을 gradle로 업데이트 : 3.3.0

기본 '조립'작업은 일반 변형에만 적용됩니다. 테스트 변형도 추가하십시오.

android.testVariants.all { variant ->
    tasks.getByName('assemble').dependsOn variant.getAssembleProvider()
}

또한 댓글 패브릭 적용

//apply plugin: 'io.fabric'

1
"일반"변종은 무엇입니까? android.testVariants.all {...} 코드는 무엇입니까 (그 목적은 무엇입니까)? 이 인용문은 어디에서 왔습니까? 답변을 업데이트 할 수 있습니까?
Ewoks

난 chrashlytics에 대한 매니페스트 경로를 변경했습니다 crashlytics { manifestPath = "$buildDir/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml" }
ANRI

1
@Ewoks 일반 변형은 특정 규칙 세트를 사용하는 빌드 변형 (디버그 / 릴리스)입니다. 다양한 변형 (flavor)을 설정할 수 있습니다. 또한 특정 빌드 변형을 대상으로하는 테스트 소스 세트를 작성할 수 있습니다.
Krste Moskov

나는 풍미에 대해 알고 있지만 이것이 여기에 적용되고 그것이 어떻게 관련되는지 확실하지 않습니다. 의 당신은 당신이 인용 않았고 (당신이 코멘트와 함께 코드의 형식을 혼합 추측) 형식을 해결하기 위해 어떤 소스 명확히하여 답을 업데이트 할 수 있는지 물었다 이유
Ewoks

1
직물이 문제의 원인이라는 보장은 없습니다. 실제로이 "솔루션"을 사용하면 문제가 어디에 있는지 전혀 알 수 없습니다. 또한 testVariants로 무엇을해야하는지에 대한 설명이 없으며 어떻게 관련되어 있습니까?!? 그렇기 때문에 @KrsteMoskov의 원래 답변이 오해의 소지가 있으며 어떤 것이라도 해결하면 특정 사용 사례에만 적용됩니다. "온보드"를 얻기 위해 답변을 올바르게 형식화하고 작성한 내용을 남겼으므로 다른 사람들이 이것이 유용한 지 결정할 수 있습니다.
Ewoks

2

플러그인이 더 이상 지원되지 않는 API를 사용하고 있음을 감지하면 해당 API가 사용되는 위치를 결정하는 데 도움이되는 자세한 정보를 제공 할 수 있습니다. 추가 정보를 보려면 프로젝트의 gradle.properties 파일에 다음을 포함해야합니다.

android.debug.obsoleteApi=true

어디에 build, gradle 또는 app.gradle
Jithish PN

그냥 프로젝트에서 gradle.properties 파일을 검색하십시오
Hamed safari

2

이 행을 application gradle다음 에서 제거하면 :

apply plugin: 'io.fabric'

더 이상 오류가 나타나지 않습니다.

참조 링크 github


1
그렇지 않으면 Crashlytics가 작동을 멈 춥니 다. 이것은 단지 문제를 숨기고 있습니다.
Roger Oba

2

프로젝트를 androidX로 마이그레이션하십시오.

종속성이 androidX로 업그레이드되었습니다. 따라서 androidX 컨텐츠를 사용하려면 프로젝트를 androidX로 마이그레이션하십시오.

Android Studio 3.2 이상에서는 메뉴 표시 줄에서 리 팩터> AndroidX로 마이그레이션을 선택하여 기존 프로젝트를 신속하게 마이그레이션하여 AndroidX를 사용할 수 있습니다.

종속성을 다운 그레이드하면 이번에 문제가 해결 될 수 있지만 권장되지는 않습니다


1
AndroidX가 있는데 여전히 메시지가 나타납니다.
Jorgesys

1

이 문제는 해결되었습니다. 필요한 것은 build.gradle (Project) 레벨 파일의 buildscript에서 Google 서비스 플러그인을 다음과 같이 다운 그레이드하는 것입니다.

buildscript{
     dependencies {
        // From =>
        classpath 'com.google.gms:google-services:4.3.0'
        // To =>
        classpath 'com.google.gms:google-services:4.2.0'
        // Add dependency
        classpath 'io.fabric.tools:gradle:1.28.1'
    }
}

0

여기에 임시 해결 방법, 방을 사용하는 경우 1.1.0 이상으로 업그레이드하십시오.

implementation "android.arch.persistence.room:runtime:1.1.0"

그것은 나를 위해이 경고를 제거합니다.


예, 버전을 업데이트하면 경고가 사라집니다
Sergio KS

0

Project (앱 아님) 유지 Build.gradle 의존성 클래스 경로 버전 코드는 새로운 것입니다

 dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0-beta01'
    classpath 'com.novoda:bintray-release:0.8.1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

0

이것은 인기있는 질문입니다. 이러한 방법을 사용하지 않으면 솔루션이 라이브러리를 업데이트하는 것입니다. 당신의 업데이트하시기 바랍니다 코 틀린 버전 과 같은 모든 종속 패브릭 , protobuf 등 당신은 당신이 모든 것을 업데이트 한 것을 경우, 라이브러리의 저자를 물어보십시오.


0

protobuf-gradle-plugin을 버전 0.8.10으로 업그레이드하면 문제가 해결되었습니다. 기존 프로토 타입을

classpath 'gradle.plugin.com.google.protobuf:protobuf-gradle-plugin:0.8.10'

0

이는 대부분 사용되지 않는 라이브러리 때문입니다. 새로운 업데이트를 수동으로 확인하려면

분석> "이름 별 검사 실행"

이름 안드로이드 결과로 검사를 실행

충분해야합니다. 또 다른 옵션은 다음을 사용하여 gradle 종속성 업데이트를 실행하는 것입니다

./gradlew dependencyUpdates

다음과 같은 보고서가 생성됩니다.

:dependencyUpdates

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

The following dependencies are using the latest milestone version:
 - com.github.ben-manes:gradle-versions-plugin:0.15.0

The following dependencies have later milestone versions:
 - com.google.auto.value:auto-value [1.4 -> 1.4.1]
 - com.google.errorprone:error_prone_core [2.0.19 -> 2.0.21]
 - com.google.guava:guava [21.0 -> 23.0-rc1]
 - net.ltgt.gradle:gradle-apt-plugin [0.9 -> 0.10]
 - net.ltgt.gradle:gradle-errorprone-plugin [0.0.10 -> 0.0.11]

...

0

프로젝트 수준에서 Google 서비스를 업그레이드하면 build.gradle문제가 해결되었습니다.

업그레이드 후 :

dependencies {
    ...
    classpath 'com.google.gms:google-services:4.3.2'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

0

나는 같은 문제가 있었고 build.gradle 파일에서 kotlin gradle 플러그인 버전을 정의하여 해결했습니다.

이것을 바꾸십시오

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50{or latest version}"

0

내 경우에는 내가 다음에 . gradle 앱 수준의 요약 : 다음을 변경하십시오.

variant.outputs.all { output ->
    variant.assemble.doLast {
        ....
    }
}

variant.outputs.all { output ->
variant.getAssembleProvider().configure() {
    it.doLast { 
        ....
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.