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

时间:2019-01-12 09:45:57

标签: 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()
    }
}

应用程序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到顶级,但结果仍然相同。任何人都有类似的问题并设法解决了吗?

6 个答案:

答案 0 :(得分:2)

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

我想通过,但功劳归于toxxmeister

答案 1 :(得分:1)

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

apply plugin: 'kotlin-parcelize'

PS:apply plugin: 'kotlin-android-extensions'已过时。

答案 2 :(得分:0)

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

所以下面的序列是可行的:

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

答案 3 :(得分:0)

https://github.com/gradle/kotlin-dsl-samples/issues/644#issuecomment-482479624- 如对此链接的评论,

androidExtensions { isExperimental = true }

当我将Kotlin版本升级到最新版本(即1.3.60)时,对我来说工作正常,

答案 4 :(得分:0)

对于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

答案 5 :(得分:0)

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

id 'kotlin-android-extensions'