Android Studio 3.4 无法解析所有依赖项

标签 android gradle kotlin

我正在使用新的 Android Studio 3.4 测试版和 kotlin dsl 作为 bulding gradle 脚本。我在项目中有很多模块,这就是我编写 KotlinBuildScript 扩展来构建项目的原因,但是对于所有外部依赖项,我都有错误消息,例如“错误:无法解析:com.google.dagger:dagger:2.18”、“错误:无法解决:androidx.recyclerview:recyclerview:1.0.0"。我该如何解决?

这是我的根 build.gradle.kts:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
        google()
        maven(url = uri("https://dl.bintray.com/kotlin/kotlin-eap"))
    }

    dependencies {

        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.10")
    }
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
        google()
        maven(url = uri("https://dl.bintray.com/kotlin/kotlin-eap"))
    }
}

还有我的 KotlinBuildScript:
    object Version {

    val kotlin = "1.3.10"
    val androidx = "1.0.0"
    val constraintlayout = "1.1.3"
    val lifecycle = "2.0.0"
    val paging = "2.1.0-alpha01"

}

fun KotlinBuildScript.setupApplication(applicationId:String, versionCode:Int, versionName:String) =
    setup(applicationId, versionCode, versionName, false)

fun KotlinBuildScript.setupLibrary(applicationId:String) = setup(applicationId, null, null, true)

private fun KotlinBuildScript.setup(
    applicationId:String, versionCode:Int?, versionName:String?, library:Boolean
) {
    setupPlugins(library)
    setupConfiguration(library, applicationId, (versionCode ?: 1) * 2, versionName ?: "1.0")
    setupDependencies(library)
}

private fun KotlinBuildScript.setupConfiguration(
    library:Boolean, applicationId:String, versionCode:Int, versionName:String
) {
    configure<BaseExtension> {
        compileSdkVersion(28)
        buildToolsVersion("28.0.3")

        defaultConfig {
            if (!library) {
                this.applicationId = applicationId
                this.versionCode = versionCode
                this.versionName = versionName
            }
            minSdkVersion(16)
            targetSdkVersion(28)
            multiDexEnabled = true
            vectorDrawables.useSupportLibrary = true
        }

        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
        }

        buildTypes {
            getByName("release") {
                isMinifyEnabled = false
                proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
            }
        }

        packagingOptions {
            exclude("META-INF/LICENSE.txt")
        }

        lintOptions {
            isCheckReleaseBuilds = false
        }

        if (library) {
            defaultConfig.ndk {
                abiFilters("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
            }
            externalNativeBuild {
                cmake {
                    setPath("CMakeLists.txt")
                }
            }
        } else {
            flavorDimensions("architecture")
            productFlavors {
                create("arm") {
                    dimension = "architecture"
                    this.versionCode = versionCode - 1
                    versionNameSuffix = "-arm"
                    ndk {
                        abiFilters("armeabi")
                    }
                }
                create("x86") {
                    dimension = "architecture"
                    this.versionCode = versionCode
                    versionNameSuffix = "-x86"
                    ndk {
                        abiFilters("x86")
                    }
                }
            }
        }

    }
}

private fun KotlinBuildScript.setupPlugins(library:Boolean) {
    apply {
        plugin("com.android." + (if (library) "library" else "application"))
        plugin("kotlin-android")
        plugin("kotlin-android-extensions")
        plugin("kotlin-kapt")
    }
}

private fun KotlinBuildScript.setupDependencies(library:Boolean) {
    dependencies {
        add("testImplementation", "junit:junit:4.12")
        add("implementation", fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
        if (!library) {
            add("implementation", project(":Library"))
        }
        add("kapt", "com.google.dagger:dagger-compiler:2.18")
        add("implementation", "com.google.dagger:dagger:2.18")
        add("kapt", "androidx.lifecycle:lifecycle-compiler:${Version.lifecycle}")
        add("implementation", "androidx.lifecycle:lifecycle-extensions:${Version.lifecycle}")
        add("implementation", "androidx.lifecycle:lifecycle-common-java8:${Version.lifecycle}")
        add("implementation", "javax.inject:javax.inject:1")
        add("implementation", "javax.annotation:javax.annotation-api:1.2")
        add("implementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Version.kotlin}")
        add("implementation", "org.jetbrains.kotlin:kotlin-reflect:${Version.kotlin}")
        add("implementation", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.0-RC1")
    }
}

应用模块等级:
import Setup.Version
import Setup.setupLibrary

setupLibrary("com.esminis.server.library")

最佳答案

我已经找到了解决问题的方法。使用 kotlin dsl,您应该始终在项目的 settings.gradle 中设置 buildFileName 属性。

rootProject.buildFileName = 'build.gradle.kts'

另外,尝试删除 .idea 和 .gradle 文件夹并重新启动 Android Studio。

关于Android Studio 3.4 无法解析所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53435024/

相关文章:

android - 当应用程序处于调试状态时,为什么 Gradle 在 Release模式下构建我的模块

android - 如何使用位置或加速度计或其他方式在 Android 应用程序中获得速度

android - 是否有 connectedReleaseAndroidTest gradle 任务?

android - 是否可以使用不同的程序包名称发布同一应用程序?

java - 无法应用插件 "com.google.gms.google-services"

java - Kotlin 编译库失败

android - 如何解决出现数字键盘时编辑文本隐藏的问题?

grails - Gradle 2.3中的Jcenter()异常

kotlin - 等于 Kotlin 中的重载

intellij-idea - IDEA 在树中两次显示一个项目