Сбой сборки Gradle из-за ошибки lint classpath на Android

У меня есть приложение для Android, сборка которого завершается сбоем, когда я запускаю следующую команду: ./gradlew clean build -Pbuild=dev --stacktrace

Вот ошибка, которую я получаю:

> Task :app:lint FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':app:lint'.
> No value has been specified for property 'lintClassPath'.

Файл build.gradle модуля приложения:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

apply plugin: 'io.fabric'

apply plugin: "androidx.navigation.safeargs"

// For Epoxy
kapt {
    correctErrorTypes = true
}

android {
    kotlinOptions {
        jvmTarget = '1.6'
    }
    compileSdkVersion 28
    defaultConfig {
        applicationId "..."
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 8
        versionName "0.4"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        debug {
            if (project.hasProperty('ApiKey')) {
                buildConfigField('String', 'API_KEY', ApiKey)
            } else {
                buildConfigField('String', 'API_KEY', "\"mock-key\"")
            }
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (project.hasProperty('ApiKey')) {
                buildConfigField('String', 'API_KEY', ApiKey)
            } else {
                buildConfigField('String', 'API_KEY', "\"mock-key\"")
            }
        }

    }

    def build_param = "${build}"

    if (build_param != "dev") {
        //exclude production build
        android.variantFilter { variant ->
            if (variant.buildType.name == 'dev') {
                variant.setIgnore(true)
            }
        }
    } else {
        //exclude all except production build
        android.variantFilter { variant ->
            if (variant.buildType.name != 'dev') {
                variant.setIgnore(true)
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    androidExtensions {
        experimental = true
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    // Android
    def lifecycle_version = "2.0.0"
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    implementation 'com.google.android.material:material:1.0.0'
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    implementation 'androidx.core:core-ktx:1.0.1'
    implementation 'androidx.preference:preference:1.0.0'
    implementation 'androidx.legacy:legacy-preference-v14:1.0.0'

    def room_version = "2.1.0-alpha04"
    implementation "androidx.room:room-runtime:$room_version"
    implementation "androidx.room:room-rxjava2:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    def nav_version = "1.0.0-rc02"
    implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version"
    implementation "android.arch.navigation:navigation-ui-ktx:$nav_version"

    // Networking
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
    implementation 'com.squareup.okhttp3:okhttp:3.13.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
    implementation 'com.squareup.retrofit2:converter-moshi:2.4.0'
    implementation 'com.squareup.moshi:moshi-adapters:1.8.0'
    // DI
    def koin_version = "1.0.2"
    implementation "org.koin:koin-android:$koin_version"
    implementation "org.koin:koin-androidx-scope:$koin_version"
    implementation "org.koin:koin-androidx-viewmodel:$koin_version"
    // Rx
    implementation 'io.reactivex.rxjava2:rxjava:2.2.7'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'
    implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
    // Image Loading
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    kapt 'com.github.bumptech.glide:compiler:4.8.0'
    // Tests
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.24.5'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    // UI
    implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:9.0.1'
    implementation 'com.airbnb.android:epoxy:3.2.0'
    kapt 'com.airbnb.android:epoxy-processor:3.2.0'
    implementation 'com.github.VladimirWrites:Lemniscate:1.4.4'
    // Firebase
    implementation 'com.google.firebase:firebase-core:16.0.7'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
}

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

Файл build.gradle уровня проекта:

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

buildscript {
    ext.kotlin_version = '1.3.21'
    repositories {
        jcenter()
        maven {
            url 'https://maven.fabric.io/public'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.2.0'
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-rc02"
        classpath 'io.fabric.tools:gradle:1.27.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
        }
        maven {
            url 'https://jitpack.io'
        }
        google()
    }
}

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

Я не знаю, как это исправить. Понижение версии плагина Android Gradle не решает проблему, и нигде на Github или Stackoverflow нет проблем, связанных с этим.

Кто-нибудь знает, как это исправить?


person harold_admin    schedule 02.03.2019    source источник


Ответы (4)


В моем случае эта ошибка была вызвана тем, что переменная окружения ANDROID_HOME не была установлена

person dorintufar    schedule 18.09.2019
comment
Отлично, сработало!! Дополнительная информация для людей, использующих Jenkins. Установите ANDROID_HOME как указано здесь из Manage Jenkins -> Configure System, затем установите там флажок переменных среды и добавьте переменную с именем ANDROID_HOME и заполните значение путем к Android SDK . - person Ankur; 26.09.2019
comment
для меня у меня был ANDROID_PATH вместо ANDROID_HOME, он работал, изменив в Jenkins Config Environment, он работал раньше - person testsingh; 08.10.2019
comment
Также убедитесь, что переменная установлена ​​для пользователя, запускающего gradle, и что у пользователя есть доступ к каталогу SDK. Я получил эту ошибку от jenkins, и мне пришлось исправить обе эти вещи для пользователя jenkins. - person Algorithm and Blues; 12.11.2019

Причина этой проблемы в том, что Gradle не может найти Android SDK. Есть несколько способов исправить это:

Определите переменную среды ANDROID_HOME

ANDROID_HOME=your/path/to/android/sdk; export ANDROID_HOME

или добавьте sdk.dir к файлу local.properties, например, на моем компьютере с Linux

sdk.dir=/home/sdeng/Android/Sdk

Если вы уже определили ANDROID_HOME или sdk.dir, это все равно произойдет. Вероятно, что-то не так с конкретной версией вашего Android SDK или демона Gradle. Попробуйте убить все процессы Gradle, повторно загрузите определенную версию Android SDK.

Или вы можете проверить SDK в каталоге $ANDROID_HOME/platforms/android-28, где 28 — это compileSdkVersion, определенный в build.gradle.

person sdeng    schedule 18.10.2019

Я понял, в чем проблема. Я использую параметр сборки «dev» (Pbuild=dev), чтобы убедиться, что CI (в данном случае Трэвис) использует фиктивную версию моего файла google-services.json, помещенного в папку app/src/dev. Однако я забыл настроить вариант сборки «dev» в файлах build.gradle моих модулей.

Решение состоит в том, чтобы добавить тип сборки dev во все модули, например:

build.gradle

android {
  ...

  buildTypes {
    release {
      ...
    }
    debug {
      ...
    }
    dev {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

Обратите внимание, что вам придется сделать это для всех модулей в вашем проекте.

person harold_admin    schedule 20.03.2019
comment
У меня возникает аналогичная проблема, но у меня нет пользовательских типов сборки (у меня есть только выпуск и отладка). Можете ли вы пролить свет на это? Как вы выяснили причину? - person Tim Malseed; 29.08.2019
comment
@TimMalseed Для меня проблема была, по-видимому, в новой версии Gradle. Возврат classpath ‘com.android.tools.build:gradle:3.5.0’ к classpath ‘com.android.tools.build:gradle:3.5.0-beta03’ решил эту проблему. - person ItWillDo; 30.08.2019
comment
@ItWillDo это не звучит как хороший подход, так как в какой-то момент вам нужно обновить версию Gradle. P.S. борюсь с той же проблемой с Team City - person Kumar Saurabh; 09.09.2019

Сначала я должен был принять лицензии. Странная ошибка.

В macOS:

yes | sudo ~/Library/Android/sdk/tools/bin/sdkmanager --licenses

Для других платформ см. раздел Автоматически принимать все лицензии SDK.

person Graham Perks    schedule 24.09.2019