androidExtensions实验模式设置为true时无法解析@Parcelize

mar*_*inm 5 android kotlin-android-extensions gradle-kotlin-dsl

切换到Gradle后,Kotlin DSL Gradle无法解析@Parcelize注释或程序包import kotlinx.android.parcel.Parcelize(“未解析的引用”错误)。稳定的Kotlin插件和最新的Canary插件会发生这种情况。使用Gradle Wrapper时,无法在Android Studio中以及从控制台进行构建。

顶级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()
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序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 ...
Run Code Online (Sandbox Code Playgroud)

我试过搬家

    androidExtensions {
        isExperimental = true
    }
Run Code Online (Sandbox Code Playgroud)

从android到最高级别,但结果仍然相同。任何人都有类似的问题,并设法解决这个问题?

Huy*_*TTQ 22

就我而言。只需交换 2 行代码 kotlin-android 和 kotlin-android-extensions 即可。

所以下面的顺序是工作:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Run Code Online (Sandbox Code Playgroud)

  • 应用插件:“kotlin-android-extensions”已弃用。 (2认同)

Erc*_*can 10

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

apply plugin: 'kotlin-parcelize'
Run Code Online (Sandbox Code Playgroud)

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


es0*_*329 5

啊! 我找到了一个可行的解决方案。在基于 Groovy 的文件中设置实验标志,androidExtensions.gradle然后apply在基于 Kotlin 的build.gradle.kts.

我想传递它,但功劳归于 toxxmeister