警告:API 'variant.getJavaCompile()'は廃止され、 'variant.getJavaCompileProvider()'に置き換えられました


199

Gradleの同期中に突然、次のエラーが発生します。

警告:API 'variant.getJavaCompile()'は廃止され、 'variant.getJavaCompileProvider()'に置き換えられました。2019年末に削除されます。詳細については、https//d.android.com/r/tools/task-configuration-avoidance影響を受けるモジュール:アプリをご覧ください。

私はこれbuild.gradleをアプリモジュールに持っています:

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年の終わりに何かが機能しなくなります。


ほんの少しのピックのように、警告はエラーではありません。警告があっても、コードは同じ方法でコンパイルする必要がありますが、エラーが発生するとビルドが失敗します。現在のやり方は将来的に機能しなくなる可能性があり、プラグインの更新で修正される可能性が高いのは、事前の通知です。エラーでリンクされたページ読むのにも時間をかけましたか?
マイケルドッド

2
私の個人的な感想は、新しいGradle APIを使用するようにまだ更新されていないプラグインが原因であると考えています。
マイケルドッド



回答:


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

7
@FaizanMubasherがGoogleサービスを4.2にダウングレードしてみてください
無限ループ

4
4.2にダウングレードするという@InfiniteLoopsの提案は機能しているようです。
HondaGuy

1
ファブリックを1.31.0にアップグレードし、Googleサービスを4.2.0にダウングレードしました
Mukeshkumar S '31 / 07/31

94

3.3.0にアップデートした後、この問題に直面します

あなたがgradleファイルでエラー状態を実行していない場合、これを引き起こすのは新しいAPIにまだ更新されていないプラグインです。どのプラグインかを判別するには、次のようにします(3.3.0の発表の「廃止されたAPIを使用するときのより良いデバッグ情報」で説明されています)。

  • 'android.debug.obsoleteApi = true'gradle.propertiesファイルに追加すると、詳細が記録されてエラーがログに記録されます
  • 再試行して、ログの詳細を確認してください。「問題のある」プラグインの痕跡があるでしょう
  • 特定したら、それを無効にして、問題がなくなったかどうかを確認してください。
  • プラグインのgithubページに移動し、詳細なログと明確な説明を含む問題を作成します。これにより、開発者が誰でも簡単に修正できるようになります
  • 彼らがそれを修正する間、またはあなたがそれを修正して開発者のためのPRを作成する間、我慢してください

他の人の役に立つことを願っています


4
これは私の意見では、最も一般的で有用な答えです。私の場合、この警告はGroovy-Androidプラグイン(Spockテスト用)を使用しているために発生します。
AutonomousApps

2
これが正解です。Gradleバージョンの更新に賛成したのは誰ですか?
Pier Betos、

これも私にとってうまくいきました、この問題に何か新しいものはありますか?その間、私たちができることは何もないと想定されていますが、そうですか?
Billyjoker

1
本当に役に立ちました。私の場合、それはHugoプラグインでした。
AlvaroSantisteban

6
追加後android.debug.obsoleteApi=true、ログに記録された詳細を読むには:下部の[ビルド]タブに移動し、[ビルド出力]ウィンドウ内で[ビューの切り替え]をクリックします。きれいな色をクリックすると、色が消えて、一番上までスクロールしますWARNING: API 'variant.getAssemble()' is obsolete。次に、その下に表示されREASON: Called from: ます...私の場合、medium.com / @ xabaras
誰かのどこか

62

私の場合、それはgms services 4.3.0が原因でした。だから私はそれを次のように変更する必要がありました:

com.google.gms:google-services:4.2.0

私はこれを実行して見つけました:

gradlew sync -Pandroid.debug.obsoleteApi=true

ターミナルで。Android Studioの[表示]-> [ツールウィンドウ]-> [ターミナル]に移動します。


Ubuntuでは、ubuntuでこのコマンドを実行する方法を実行できません。パッケージのインストールを要求し、そのパッケージをインストールしても、実行できません。他に方法はありますか?
Vasudev Vyas

3
gms googleサービスを4.2に変更したところ、警告が表示されなくなりました。
無限ループ

2
@VasudevVyas Android Studioの場合は./、コマンドの前に追加するだけです。つまり、ターミナルがAndroidプロジェクトのルートに設定されている場合です。それ以外の場合は、プロジェクトのルートにcdする必要があります。
Racu

3
google-servicesの依存関係をダウングレードする理由 それは解決策ではありません。
Ahamadullah Saikat

4
@AhamadullahSaikatこれはおそらく将来のリリースで修正されるでしょう。その後、再度アップグレードできます。これは、Googleによって修正されるまでの回避策です。
Numan Karaaslan

34

これは単なる警告であり、おそらくプラグインの更新により2019年までに修正されるため、心配する必要はありません。プラグインとGradleの互換バージョンを使用することをお勧めします。

プラグインのバージョンとGradleのバージョンをここで確認すると、エクスペリエンスとパフォーマンスが向上します。

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

安定したバージョンを使用して、スムーズで警告/エラーのないコードを試してください。


24
これは実際には単なる警告というよりは油断のならないものです。コードエディタに影響を与え、クラスへの参照を検索できなくなります。
IgorGanapolsky

これはdev / canaryエディションだけでなく、stableでも起こりますが、新しいアップデートでは修正されるという警告です。
マーロン・ロペス

1
@HarshilShah問題のあるプラグインが更新される保証はありません。開発者はこの問題についてさえ知らないかもしれません。そのため、私たちができる最善の方法は次のとおりです。stackoverflow.com
a

25

私も同じ問題に直面しました。しばらく検索したところ、最新バージョンのgoogle-servicesプラグイン(バージョン4.3.0)を使用しているために警告が発生していることがわかりました。ちなみに、アプリケーションのFirebase機能にこのプラグインを使用していました。私がしたことは、google-services次のようにbuild.gradle(Project)レベルのファイルのbuildscriptでプラグインをダウングレードすることだけでした。

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

1
私はこの解決策を実行し、エラーはなくなりました。ありがとう
ウェズリーフランク

1
ワーキング!おかげで
Сергей

3
この警告が表示されずに4.3.2にアップグレードしました。
tagy22

10

からGoogleサービスのバージョンを変更しますbuild.gradle

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

1
私は4.3.0を使用していますが、問題はまだ解決していません。
ウェズリーフランク

@wesleyfranksも同じです。しかし、4.2.0に切り替えても問題は解決しません...
diAz

私は4.3.1にいますが、問題はまだあります
pvalle

8

これは、2つの理由でビルドツールによって吐き出される警告です。
1.プラグインの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 2018

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
ラガフSatyadev

5

Gradleのバージョンのダウングレードは私にとってうまくいきました:

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

4
ダウングレードは決して選択肢ではありません
Roshana Pitigala

これが私が欲しい答えです。ありがとう!
anKotliner

格下げは特定の状況では問題あり
ません

5

1)をに追加android.debug.obsoleteApi=trueしますgradle.properties。警告ログの影響を受けるモジュールが表示されます。

2)これらの非推奨関数を更新します。

  • variant.javaCompilevariant.javaCompileProvider

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


5

KotlinPluginおよび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
ミハイル

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の通常のバリアントは、特定のルールセットを使用するビルドバリアント(デバッグ/リリース)です。さまざまなバリアント(フレーバー)を設定できます。さらに、特定のビルドバリアントをターゲットとするテストソースセットを作成できます。
Krste Moskov

私はフレーバーについて知っていますが、これがここに当てはまるかどうか、そしてそれがどのように関連しているかはわかりません。そのため、引用したソースを明確にし、フォーマットを修正することで回答を更新できるかどうかを尋ねました(コードのフォーマットとコメントを混在させていると思います)
Ewoks

1
ファブリックが問題の原因であったという保証はまったくありません。実際、この「解決策」では、問題がどこにあったのかわかりません。さらに、testVariantsで何をする必要があるのか​​、それはどのように関連しているのかについての説明はありません。そのため、@ KrsteMoskovの元の回答は誤解を招きやすく、何かを解決する場合は特定のユースケースにのみ適用されます。「船上」に入るのを助けるために、私はあなたの答えを適切にフォーマットし、あなたが書いた内容を残したので、他の人がこれが役立つかどうかを判断できます
Ewoks

2

プラグインは、サポートされなくなったAPIを使用していることを検出すると、そのAPIがどこで使用されているかを判断するのに役立つより詳細な情報を提供できるようになりました。追加情報を表示するには、プロジェクトのgradle.propertiesファイルに以下を含める必要があります。

android.debug.obsoleteApi=true

where 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-servicesプラグインをダウングレードするだけで済みました。

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"

この警告は削除されます。


はい、バージョンを更新すると、これらの警告が表示されなくなります
セルジオKS

0

プロジェクト(アプリではない)を維持するBuild.gradledependnciesクラスパスバージョンコードが新しい

 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

これはよくある質問です。これらの方法を使用しない場合、解決策はライブラリを更新することです。kotlinのバージョンとfabricprotobufなどのすべての依存関係を更新してください。すべてを更新したことが確かな場合は、ライブラリの作成者に問い合わせてみてください。


0

protobuf-gradle-pluginをバージョン0.8.10にアップグレードすると、問題が解決しました。既存のprotobufを

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

0

これは主に、廃止されたライブラリが原因です。新しい更新を手動で確認するには、次の場所に移動する必要があります

「分析」>「名前で検査を実行」

名前androidの結果で検査を実行する

それで十分でしょう。別のオプションは、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.