API 'variant.getExternalNativeBuildTasks ()' є застарілим і замінено на 'variant.getExternalNativeBuildProviders ()


337

Використання Android Studio 3.3 Canary 11 з версією плагіна Gradle 3.3.0-alpha11 . Він видає таку помилку при спробі синхронізації gradle

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

Натискання на помилку призводить мене до цього рядка у файлі gradle

applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "${variant.name}-${variant.versionName}.apk"
            }
        }

Що саме мені тут потрібно змінити?

проект build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        mavenCentral() // jcenter() works as well because it pulls from Maven Central
        maven { url "https://maven.google.com" }
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0-alpha11'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath "io.realm:realm-gradle-plugin:4.1.1"
        classpath 'com.google.gms:google-services:3.2.1'
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://maven.google.com" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

// Define versions in a single place
ext {
    // Sdk and tools
    minSdkVersion = 21
    targetSdkVersion = 27
    compileSdkVersion = 27
    buildToolsVersion = '27.0.3'

    // App dependencies
    supportLibraryVersion = '27.1.1'
    appCompactLibraryVersion = '27.1.1'
    playServicesVersion = '15.0.1'
    firebaseVersionCore = '16.0.1'
    firebaseVersionPerf = '16.0.0'
    firebaseVersionMessaging = '17.1.0'

    //lottie
    lottieVersion = '2.5.0'
}

додаток build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.25.4'
    }
    buildscript {
        repositories {
            maven { url "https://maven.google.com" }
            maven { url 'https://maven.fabric.io/public' }
            mavenCentral()

        }

        dependencies {
            // These docs use an open ended version so that our plugin
            // can be updated quickly in response to Android tooling updates

            // We recommend changing it to the latest version from our changelog:
            // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
            classpath 'io.fabric.tools:gradle:'
        }
    }
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
repositories {
    maven { url 'https://maven.fabric.io/public' }
}

apply plugin: 'io.fabric'
apply plugin: 'realm-android'

android {

    realm {
        syncEnabled = false
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {
        applicationId "example.com"
        minSdkVersion rootProject.ext.minSdkVersion
        multiDexEnabled true
        versionCode mVersionCode
        versionName mVersionName
        vectorDrawables.useSupportLibrary = true

    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    buildTypes {

        applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "${variant.name}-${variant.versionName}.apk"
            }
        }

        release {
            shrinkResources true
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            lintOptions {
                disable 'MissingTranslation'
            }

            applicationVariants.all { variant ->
                variant.outputs.all {
                    outputFileName = "${variant.name}-${variant.versionName}.apk"
                }
            }

        }
        debug {
            shrinkResources true
            minifyEnabled true
            useProguard true
            debuggable true
            versionNameSuffix '-DEBUG'
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'debug-proguard-rules.pro'

            ext.enableCrashlytics = false
            crunchPngs false

        }
    }

    flavorDimensions "default"

    lintOptions {

        checkReleaseBuilds false

    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
    buildToolsVersion '28.0.2'
}

configurations {
    implementation.exclude group: "org.apache.httpcomponents", module: "httpclient"
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation "com.android.support:appcompat-v7:$rootProject.appCompactLibraryVersion"
    implementation "com.android.support:support-compat:$rootProject.supportLibraryVersion"
    implementation "com.android.support:mediarouter-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    implementation "com.android.support:design:$rootProject.supportLibraryVersion"


    api 'com.squareup.retrofit2:retrofit:2.4.0'
    api 'com.squareup.okhttp3:okhttp:3.11.0'
    api 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.3.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.daimajia.easing:library:2.0@aar'
    implementation 'com.daimajia.androidanimations:library:2.3@aar'

    implementation 'com.akexorcist:googledirectionlibrary:1.0.5'
    implementation 'io.reactivex:rxandroid:1.2.1'
    implementation 'io.reactivex:rxjava:1.3.0'
    // Wifi hotspot library
    implementation 'cc.mvdan.accesspoint:library:0.2.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'org.jsoup:jsoup:1.10.3'
    api "com.airbnb.android:lottie:$rootProject.lottieVersion"
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    testImplementation 'junit:junit:4.12'
    implementation 'com.jakewharton:butterknife:8.8.1'

    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

    implementation 'com.googlecode.libphonenumber:libphonenumber:8.2.0'

    implementation "com.google.android.gms:play-services-base:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-cast-framework:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-auth:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-identity:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-awareness:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-cast:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-drive:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-location:$rootProject.playServicesVersion"
    implementation "com.google.android.gms:play-services-maps:$rootProject.playServicesVersion"

    implementation "com.google.firebase:firebase-core:$rootProject.firebaseVersionCore"
    implementation "com.google.firebase:firebase-perf:$rootProject.firebaseVersionPerf"
    implementation "com.google.firebase:firebase-messaging:$rootProject.firebaseVersionMessaging"
    implementation "com.google.firebase:firebase-analytics:$rootProject.firebaseVersionCore"


    api('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
        transitive = true
    }
    api('com.crashlytics.sdk.android:answers:1.4.1@aar') {
        transitive = true
    }
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    api project(path: ':libraryBTHelper')
    api project(':bkk_rush')

    debugApi 'com.amitshekhar.android:debug-db:1.0.3'
    api "org.jdeferred:jdeferred-android-aar:1.2.6"
    implementation 'com.android.support:gridlayout-v7:27.1.1'
}

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

Я пропустив кілька констант та іншу конфіденційну інформацію у файлі app / build.gradle.


Чи можете ви розмістити свій build.gradle (додаток)?
Skizo-ozᴉʞS

@ Skizo-ozᴉʞS додав файл build.gradle проекту
Jude Fernandes


@alashow це пов'язано з різною проблемою, повідомлення є "API" variant.getJavaCompile () 'застаріло .. "
Вадим Котов

16
Випуск існує і зі стабільною версією
kp91

Відповіді:


286

Проблема була виправлена ​​в їх останньому випуску 'io.fabric.tools:gradle:1.30.0'

Оновіть обидва інструменти з тканини gradle з 1.30.0

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

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

Детальніше https://github.com/firebase/firebase-android-sdk/isissue/198#issuecomment-473435453


Переконайтеся, що змінити його у build.gradle як на рівні проекту, так і в додатку.
RJB

2
Версія 1.28.0 виправила мою проблему, поточна версія - 1.29.0 docs.fabric.io/android/changelog.html#fabric-gradle-plugin
Олександр Хартманн


Я все ще отримую це попередження за допомогою classpath 'io.fabric.tools:gradle:1.31.0'та implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'. Він або зламаний знову, або не фіксований для всіх випадків.
Gene S

Звідки ви взяли цей варіант тканинного інструменту gradle? Я можу знайти лише 1.25.4 mvnrepository.com/artifact/io.fabric.tools/gradle
Lachlan Young

248

EDIT

Ця проблема була виправлена ​​у Тканини 1.28.0 . На вашому build.gradleрівні проекту додайте наступний рядок:

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

Попередній відповідь

Це відбувається після того, як я оновив Android Studio на 3.3.0. apply plugin: 'io.fabric'є причиною. Я надіслав звіт про помилку команді Firebase щодо цієї проблеми.

У вас є 3 варіанти:

  • Зачекайте, поки вийде наступна версія плагіна Fabric. Перевірте останню версію тут .

  • Перехід на Android Studio 3.2.1 .

  • Прокоментуйте io.fabricплагін.

У build.gradleмодулі вашої програми:

apply plugin: 'com.android.application'
// apply plugin: 'io.fabric' <== this plugin causes the error

Однак ви все одно можете створювати та запускати свої проекти, навіть якщо ця помилка з’являється. Просто ігноруйте це.


2
Чи вдасться вам зв’язатись із звітом про помилку чи випустити відкритий вами Firebase? Я хотів би підтримати це.
ювал

8
Я повинен використовувати io.fabricплагін, то як я можу видалити це попередження, не змінюючи це?
0xAliHn

16
Це причина, а не життєздатне рішення
Даніель Вілсон

1
Вони кажуть, що користуватися ним можна до кінця 2019 року. Зараз я використовую, ми побачимо, що станеться)
support_ms

4
Чому пониження? Немає сенсу! Це лише попередження, воно ще не зняте, і він може будувати ваш проект (цілий 2019 рік ...). Я вірю, що вони виправлять це протягом цього року
користувач25

60

у програмі build.gradle, поверніться до цієї стабільної версії gradle:

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

Це відбувається після того, як я оновив Android Studio до 3.3, тимчасове рішення, поки вони не виправлять!

редагувати: вам не потрібно знижувати студію Android!


2
Тоді вам також доведеться перейти на Android Studio 3.2.1. Все одно дякую
Рубен Вігера

У мене була така ж проблема після оновлення Android Studio (AS) до версії 3.3. Мені синхронізація Gradle знову почала працювати, переносячи Gradle на версію 4.6 та плагін Android Gradle до версії 3.2.1, яка була версіями, які я використовував до оновлення AS. Шукайте таблицю тут, якщо ви сумніваєтесь, як змінити версії для gradle та плагіна.
Rabie Jradi

6
Це спрацювало, не понижуючи нічого, дякуючи за пропозицію
Сід

3
вам не потрібно знижувати студії андроїд @ RubénViguera
Amer Al Ziebak

1
Вам не потрібно знижувати інше, крім версії gradle, як зазначено у відповіді. Це має бути прийнятою відповіддю.
доктор наук Ансарі

16

ОНОВЛЕННЯ Станом на сьогодні ви можете скористатися classpath 'io.fabric.tools:gradle:1.28.0'для вирішення цієї проблеми!

Якщо коментуючи Crashlyticsплагін io.fabricдля файлу gradle програми, тимчасово працював у вас

//apply plugin: 'io.fabric'

Тоді оновлення залежностей тканин від Gradle від файлу Project gradle назавжди вирішить проблему:

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

Примітка: це не видаляє попередження, але дозволяє використовувати Crashlytics з AS3.3 +


@RJB Ви використовуєте Crashlytics? Якщо ви видалите його зі свого проекту, він працює? Якщо так, то це має вирішити проблему. Однак ви все одно можете отримувати попередження, але проект буде складено, і ви зможете безпечно генерувати свій apk
113408,

Так. Я маю на увазі, що я все ще отримую попередження.
RJB

Оперативники та інші (включаючи мене) мали цю проблему і не змогли скласти проект із crashlyticsвключеним. Таким чином, щоб утримати Crashlytics і продовжувати працювати, ви можете скористатись вищезгаданим оновленням, хоча воно все ще викликає "попередження".
113408

13

Не впевнений, що є фактичним питанням, але коментуючи залежності, пов'язані з катастрофами, від вирішеної проекту проблеми.


11

Це підтверджено як помилка для Crashlytics, і вони над цим працюють.

https://issuetracker.google.com/isissue/116408637

Цитується від правонаступника Google:

je ... @ google.com # 23 23 січня 2019 01:40
Привіт усім,

Дякуємо за ваше терпіння.

Схоже, що помилка у всіх випадках походить від аварійних систем, і я подав помилку з ними.

Я буду інформувати вас про стан.

Для мене мій додаток для налагодження працює на моєму пристрої, просто запускаючи та ігноруючи попередження, не коментуючи Crashlytics або Fabric. Я не пробував на виробництво.

Оновлення:

Google Issue Tracker відзначив цю проблему як Won't Fix (Infeasible), тому що всі проблеми були з Crashlytics, і нехай виправлення виконуються командою Crashlytics (незважаючи на те, що вони такі ж Googler ...).

Вони пропонують перейти за цим посиланням для оновлень Crashlytics:

https://github.com/firebase/firebase-android-sdk/isissue/198

Примітка. Я все ще використовую Android Studio 3.3 з io.fabric.tools:gradle:1.26.0, не коментуючи жодного Craslytics, і це добре працює на моєму додатку для налагодження.

Оновлення:

Зараз я можу підтвердити, що він працює чудово на моєму додатку для виробництва / випуску. Як я знаю, що це працює? Оскільки він надіслав мені повідомлення про аварійне завершення роботи -_- '

У будь-якому випадку, просто ігноруйте попередження, вони повинні виправити це з часом.

Aww, просто прочитайте, що це було виправлено тканиною 1.28.0 :)


8

Останні новини від 24.01.2019

введіть тут опис зображення

Інформація тут https://issuetracker.google.com/isissue/116408637

Нам потрібно буде почекати, поки Crashlytics не знайде рішення, ось питання про GitHub відкрито

https://github.com/firebase/firebase-android-sdk/isissue/198

Єдиний спосіб, яким я зараз користуюсь, щоб не коментувати плагін io.fabric, - це погіршення рівня моїх ступенів і модернізація моєї тканини classpath (це працює над моїм виробничим додатком)

 dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath 'com.google.gms:google-services:4.2.0'
        classpath 'io.fabric.tools:gradle:1.27.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

Як щодо того , щоб просто додати -dontwarn com.crashlytics.android.Crashlyticsвproguard-rules.pro
Мустансира

1
Якщо ви знімете попередження, зробивши цю проблему, вам доведеться знову повернутися до проблеми
Gastón Saillén

Правильно! Це тимчасове рішення скласти збірку, але це набагато краще, ніж все знижувати.
Мустансір

Так, зменшення його кількості призведе до спрацьовування, якщо ви відхилите попередження, можете зберегти оновлену версію, але вона не працюватиме
Gastón Saillén

@Mustansir, я думаю, що це проблема, пов’язана з градусом, і не має нічого спільного з Proguard.
WindRider


3

програма-трекер може посилатися на "ледачу конфігурацію завдання" -

це хоча б те, що пропонує уникнення конфігурації завдань .

але, можливо, можна запобігти доступ до цього застарілого методу BaseVariantImpl, коли variant.outputs.allне буде доступ до цього методу (внутрішньо) - або коли перевірки можуть перешкодити доступу; або при зверненні до варіанту за назвою; або якимось чином відключити зовнішні задачі побудови для цього варіанта. також дивіться варіант односинхронної синхронізації проекту , який, здається, пов'язаний.

або чекайте збирання інструментів 3.3.0-alpha12 або 3.3.0-beta1... це навіть не єrelease candidate , тому інвестувати багато часу може бути безглуздо - хіба що використовувати його для подання іншого звіту про помилки.

нова швидкий зворотний зв'язоккнопка швидкого зворотного зв’язку все ще виглядає найбільш перспективною.


Так, я згоден, цього типу помилок не було в попередніх інструментах побудови. Наступний RC може виправити це
d4c0d312

7
це не було зафіксовано у випуску
Хуан Діас

developer.android.com/studio/releases/gradle-plugin#3-3-0 ... додайте, android.debug.obsoleteApi=trueщоб побачити, звідки він походить. було перейменовано декілька методів із Providerдодаванням їх імені.
Мартін

1
@SergeyNarozhnyy у проекті gradle.properties
sigitbn

1
@SergeyNarozhnyy 3.3.0випуск порушив декілька речей, оскільки варіант API змінився. можна пов’язати одне нещодавнє обговорення: stackoverflow.com/questions/54206898/… (там додано резюме).
Мартін

3

Для мене я дотримувався наступних кроків: 1. модернізуйте залежність від Gradle на рівні проекту build.gradle.

        classpath 'io.fabric.tools:gradle:1.28.0'
  1. додайте цю залежність додатка нижче, застосуйте плагін: 'com.android.application' у рівні програми build.gradle.

        apply plugin: 'io.fabric'
  2. Синхронізуйте проект з файлами gradle.


2

Це відбувається через оновлення вашої Android Studio з Android Studio 3.2.0 до Android Studio 3.3.0. Оновіть свої залежності від Gradle (проект) IO.Fabric. Подібно до:

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

а також оновіть свою версію Kotlin до

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.20"

Це вирішить ці проблеми. Дякую


1
Дякую. Ваша відповідь мені допомогла.
Андре Луїз Рейс

@Sean Якщо ви використовуєте Kotlin та io febric.then, це працює інакше, коли ви знижуєте версію classpath. Це буде працювати ...
Rahul Kushwaha

Ідентифікатор збірки Crashlytics відсутній. Це відбувається, коли інструмент Crashlytics відсутній у конфігурації складання вашого додатка
Vishal Patoliya ツ

1

Журнал складання друкує, як налагодити це, особливо вам потрібно запустити збірку -Pandroid.debug.obsoleteApi=true, яка надрукує стек-трак дзвінка до застарілого API, і ви зможете зрозуміти, який плагін / код викликає його.

Якщо це все-таки ваш код - скористайтеся новим API провайдера ( прочитайте документ про налаштування ледачих завдань )

Якщо він походить з іншого плагіна - повідомте їм простеження стека та попередження та, можливо, надішліть виправлення. Як і в цьому випадку, це стосується io.fabricпитання.


1

це було зафіксовано в останньому випуску плагіну Fabric gradle, 1,28,0, який вийшов у продаж сьогодні. Майте це у своєму build.gradle верхнього рівня:

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

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

0

Коли я відкрив проект, я натиснув Run migrationsкнопку, яка з’явилася в правому нижньому куті від Android Studio. Була проведена міграція, і проблему було вирішено, не коментуючи Crashlyticsзалежність.

введіть тут опис зображення


0

Зміна сумісності джерела в модулі build.gradle файлі на Java 8 виправляє проблему

compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
}

Не забудьте відновити проект після додавання цих рядків


На верхньому build.gradleабо модульному рівні (/ додаток)?
Meow Cat 2012,

рівень модуля (додаток)
jesses.co.tt

0

це виправить помилку: На панелі завдань натисніть Інструменти-> Котлін-> Налаштувати Котлін у проекті


0

У моєму випадку мені потрібно було використовувати io.fabricплагін, і рішенням було оновити до останньої версії gradle інструменти з тканини:

classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'io.fabric.tools:gradle:1.27.0'

0

Для тих, кому потрібно зберегти плагін Fabric, тимчасовим рішенням є повернення до попередньої версії gradle на рівні проекту.

Змініть версію classpath на com.android.tools.build:gradle:3.2.1.


0

Проблема була з останньою gradle(у моєму випадку 3.3.2) версією та Fabric.ioплагіном. Тепер це вирішено новою версією. Користувачі повинні мати це на своєму високому рівні build.gradle:

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

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

0

Виправлення - це оновлення кореневих файлів gradle до останнього. І ця відповідь справедлива і зараз. у фуретурі знову нові зміни будуть впроваджені gradle та android SDK. Часом відповідь буде змінюватися в залежності від часу.

repositories {
    maven { url "https://jitpack.io" }
    maven {
        url 'https://maven.fabric.io/public'
    }
    google()
    jcenter()

}
dependencies {

    classpath 'com.android.tools.build:gradle:3.5.0'
    classpath 'com.google.gms:google-services:4.3.0'
    classpath 'io.fabric.tools:gradle:1.30.0'
}

-7

в першу чергу це не помилка

це попередження

і його відображається при оновлення gradle до 3.3.0 Часто виникає тому, що io.fabric так чекайте, поки оновлена ​​версія оновлення тканини, де все ще з’являється попередження, є 'io.fabric.tools:gradle:1.27.1'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.