由于Android上的lint classpath错误,Gradle构建失败

时间:2019-03-02 19:11:42

标签: android gradle kotlin lint android-gradle-plugin-3.3.0

我有一个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上的任何地方都没有与此相关的问题。

有人知道如何解决此问题吗?

5 个答案:

答案 0 :(得分:14)

在我的情况下,由于未设置ANDROID_HOME环境变量而触发了此错误

答案 1 :(得分:6)

此问题的原因是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_HOMEsdk.dir,它仍然会发生。您的Android SDK或Gradle守护程序的特定版本可能有问题。尝试终止所有Gradle进程,然后重新下载特定版本的Android SDK。

或者您可以在目录$ANDROID_HOME/platforms/android-28中检查SDK,其中28是compileSdkVersion中定义的build.gradle

答案 2 :(得分:0)

我已经弄清楚了问题所在。我使用构建参数'dev'(Pbuild=dev)确保CI(在本例中为Travis)使用放置在google-services.json文件夹中的app/src/dev文件的模拟版本。但是,我忘记在模块的build.gradle文件中配置“ dev”构建变体。

解决方案是在所有模块中添加dev构建类型,如下所示:

  

build.gradle

android {
  ...

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

请注意,您将必须对项目中的所有模块执行此操作。

答案 3 :(得分:0)

我必须先接受许可证。奇怪的错误。

在macOS上:

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

对于其他平台,请参见Automatically accept all SDK licences

答案 4 :(得分:0)

即使像其他人建议的那样设置了 Unit: microseconds expr any(with(dat, rowSums(sapply(rule, function(rule) eval(parse(text = rule)))) == length(rule))) any(with(dat, rowSums(sapply(rule, function(rule) eval(str2lang(rule)))) == length(rule))) any(with(dat, rowSums(sapply(rule, function(rule) eval(str2expression(rule)))) == length(rule))) any(with(dat, eval(str2expression(paste0(rule, collapse = " & "))))) min lq mean median uq max neval 94.0 98.6 131.431 107.35 121.90 632.7 100 37.5 39.2 48.887 44.05 48.50 174.1 100 36.8 39.6 51.627 46.20 48.45 241.4 100 12.7 15.8 19.786 17.00 19.75 97.9 100 ,也要确保该目录实际上可用。我正在 chroot 环境中构建,并且忽略了编辑我的 chroot.sh 脚本来说明我的新笔记本电脑的目录布局。结果,链接到我的 Windows 分区上的目录的 ANDROID_HOME 是一个死链接,并且找不到 Android SDK。