我有一个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'.
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'
// 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上的任何地方都没有与此相关的问题。
有人知道如何解决此问题吗?
答案 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_HOME
或sdk.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。