@Parcelize 未解决,androidExtensions 实验模式设置为 true

@Parcelize not resolved with androidExtensions experimental mode set to true

切换到 Gradle Kotlin DSL Gradle 后无法解析 @Parcelize 注释或包 import kotlinx.android.parcel.Parcelize("Unresolved reference" 错误)。稳定的 Kotlin 插件和最新的 Canary 插件会发生这种情况。在 Android Studio 中构建失败,在使用 Gradle Wrapper 时也在控制台中构建失败。

顶级build.gradle.kts

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:3.2.1")
        classpath(kotlin("gradle-plugin", version = "1.3.11"))
    }
}

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

应用build.gradle.kts

import org.jetbrains.kotlin.config.KotlinCompilerVersion

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

android {
    compileSdkVersion(28)
    defaultConfig {
        applicationId = "com.a.b.c"
        minSdkVersion(15)
        targetSdkVersion(28)
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }

    // experimental mode is enabled -> @Parcelize should be resolved
    androidExtensions {
        isExperimental = true
    }
}

dependencies {
    implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
    ... other dependencies ...

我试过搬家

    androidExtensions {
        isExperimental = true
    }

从 android 到最高级别,但结果仍然相同。有人遇到过类似问题并设法解决了吗?

啊!我找到了 a working solution。在基于 Groovy 的 androidExtensions.gradle 中设置实验标志,然后 apply 在基于 Kotlin 的 build.gradle.kts.

中设置该文件

我想把它传递给 toxxmeister

以我为例。 只需交换 2 行代码 kotlin-android 和 kotlin-android-extensions 就可以了。

所以下面的序列是有效的:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

https://github.com/gradle/kotlin-dsl-samples/issues/644#issuecomment-482479624 - 正如对此 link、

的评论
androidExtensions { isExperimental = true }

当我将 Kotlin 版本升级到最新版本,即 1.3.60 时,对我来说工作正常,无需采取任何解决方法。

对于 Kotlin KTS

这个解决方案对我有用

androidExtensions {
    configure(delegateClosureOf<AndroidExtensionsExtension> {
        isExperimental = true
    })
}

我的build.gradle.kts文件

plugins {
    id(Dependencies.androidApplication)
    id(Dependencies.google)
    id(Dependencies.kotlinAndroid)
    id(Dependencies.kotlinAndroidExtensions)
    id(Dependencies.kapt)
    id(Dependencies.crashlytics)
}

androidExtensions{
    configure(delegateClosureOf<org.jetbrains.kotlin.gradle.internal.AndroidExtensionsExtension> {
        isExperimental = true
    })
}

android {
......
}

了解更多详情 https://github.com/gradle/kotlin-dsl-samples/issues/644#issuecomment-398502551

您需要做的就是将以下插件添加到您的应用级别 gradle 文件

apply plugin: 'kotlin-parcelize'

PS:apply plugin: 'kotlin-android-extensions' 已弃用。

将此插件添加到您的 build.gradle(app) 文件中。

id 'kotlin-android-extensions'