【问题标题】:Gradle kotlin-dsl configuration not working, android extension function not recognizedGradle kotlin-dsl 配置不起作用,无法识别 android 扩展功能
【发布时间】:2019-03-17 07:57:58
【问题描述】:

我正在尝试使用 kotlin-dsl 配置我的 gradle 设置。我的项目 gradle 如下所示:

buildscript {
    repositories {
        google()
        jcenter()
    }

dependencies {
        classpath("com.android.tools.build:gradle:3.3.2")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.21")
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

还有我的应用级 gradle:

plugins {
    id("com.android.application")
    id("kotlin-android")
}

android {  // marked red

}

两个文件名都是 build.gradle.kts。 Gradle 版本是 5.2.1。 我的问题是 IDE 无法识别 app-gradle 文件中的 android {} 部分,我无法配置 compileSdkVersion 等内容。再一次尝试将项目迁移到 kotlin-dsl再一次,只有失败和沮丧。不知道为什么这永远行不通,总是让我保持旧的方式。 我做错了什么,为什么不起作用?

【问题讨论】:

  • 我也有同样的问题。你找到解决办法了吗?
  • 我们遇到了同样的问题。我们所要做的就是显示在顶部功能区中的“应用上下文”(例如,当您更改 gradle 文件时会出现“立即同步”选项)。

标签: android gradle gradle-kotlin-dsl


【解决方案1】:

我遇到了与红色的 android 标记视图相同的情况。 我如何解决我的错误,我只是从 Build 选项重建项目。 (Build -> Rebuild Project)我看到 progruardFiles 行不符合指南,因为所有字符串都必须用双引号引起来。我将其替换为

proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")

之后,我再次重建项目,Gradle 建议我“在您的项目中添加依赖项”,单击后问题已解决。

这是我的模块级 Gradle

plugins {
    id("com.android.application")
    kotlin("android")
    kotlin("android.extensions")
    kotlin("kapt")
}
android {
    compileSdkVersion(29)
    defaultConfig {
        applicationId = "com.example.app"
        minSdkVersion(21)
        targetSdkVersion(29)
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")}
}
}

dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" tolistOf("*.jar"))))
implementation ("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41")
implementation ("androidx.appcompat:appcompat:1.0.2")
implementation ("androidx.core:core-ktx:1.0.2")
implementation ("androidx.constraintlayout:constraintlayout:1.1.3")
testImplementation ("junit:junit:4.12")
androidTestImplementation ("androidx.test:runner:1.2.0")
androidTestImplementation ("androidx.test.espresso:espresso-core:3.2.0")
}

【讨论】:

    【解决方案2】:

    在将 kotlin version1.3.21 升级到 1.3.71 并将 com.android.tools.build:gradle version3.3.2 更改为 3.5.3 后,我也遇到了同样的问题

    也许这会帮助您解决错误。

    【讨论】:

      【解决方案3】:

      在浪费了 4 个小时之后,我终于解决了这些问题。

      1. 在您的项目根文件夹中找到gradlew
      2. 右键单击它,然后在 -> 终端中打开。
      3. ./gradlew tasks命令并回车。
      4. 如果在您的 build.gradle 文件中显示任何错误,请修复它并重新运行 ./gradlew tasks 命令,直到所有错误都解决并且您可以看到 BUILD SUCCESSFUL
      5. 现在同步您的 gradle 文件。

      同步完成后,所有扩展功能都会被android studio识别,红色标记消失。

      【讨论】:

      • 没用。,
      【解决方案4】:

      一步一步来

      1. 更新到 Gradle Wrapper 5.0 或更高版本
      2. 重命名 root -> settings.gradle 为 root -> settings.gradle.kts 并在文件中

        include ':app' // 之前

        include(":app") // 之后

      3. 重命名 root -> build.gradle 为 root -> build.gradle.kts 和你在该文件中所做的相同更改

        构建脚本 {

        repositories {
            jcenter()
            google()
        }
        dependencies {
            classpath("com.android.tools.build:gradle:3.3.1")
            classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.11")
        }
         }
        
        allprojects {
        repositories {
            jcenter()
            google()
        }
        }
        
        tasks {
        val clean by registering(Delete::class) {
            delete(buildDir)
        }
        }
        
      4. 重命名 app -> build.gradle 为 app -> build.gradle.kts 和你在该文件中所做的相同更改

      【讨论】:

      • 我已经做了所有这些,同时它还在工作,它的行为非常奇怪、脆弱、不可靠。有时您进行更改,进行 gradle 同步,然后东西变成红色。尽管一切都很好,但您需要以特定方式注释掉某些行,尝试重新同步,有时需要等到在 buildSrc 文件夹中进行更改(或出于任何原因)后弹出带有“应​​用依赖项”链接的消息,但这条消息可能会有相当长的延迟等。只是非常烦人且难以处理。不知道为什么他们让我们如此痛苦
      • 我需要补充一点,我经常使用 kotlin object {} 常量,几乎每个字符串或 int 值,例如所有依赖项 + 版本都从 buildSrc 文件夹引用到每个 gradle 文件。我觉得这会增加脆弱性。有时只有用实际值替换常量才能帮助并通过同步。只有这样才能再次成功使用常量引用。大量的工作和愤怒
      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      相关资源
      最近更新 更多