在 Instant App 中应用插件 'kotlin-android' 会导致 "null cannot be cast to non-null type com.android.build.gradleBasePlugin"

Applying the plugin 'kotlin-android' in an Instant App results in "null cannot be cast to non-null type com.android.build.gradleBasePlugin"

我一直在尝试将新公开发布的 Android Instant Apps 与 Kotlin 编程语言相结合。使用以下(标准?)设置创建我的项目后,我在尝试构建应用程序时收到消息 "null cannot be cast to non-null type com.android.build.gradle.BasePlugin" 的错误。使用 Kotlin 可以很好地处理标准 'com.android.application' 模块;仅当我尝试在 Instant App 模块中使用它时才会抛出错误。

顶级build.gradle:

buildscript {

    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:3.0.0-alpha1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4"
    }
}

// ...

app 模块 build.gradle,其中 Kotlin does 工作:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' // This will work.

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"


    defaultConfig {
        // ...
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation project(':feature')
    implementation project(':base')
}

base 模块 build.gradle,其中 Kotlin 工作:

apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android' // This won't work.

android {

    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    baseFeature true
    defaultConfig {
        // ...
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    feature project(':tracker')
    compile 'com.android.support:appcompat-v7:25.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'

    // Kotlin standard library.
    compile "org.jetbrains.kotlin:kotlin-stdlib:${gradleKotlinVersion}"
}

instantapp模块build.gradle:

apply plugin: 'com.android.instantapp'

dependencies {
    implementation project(':feature')
    implementation project(':base')
}

特征模块build.gradle:

apply plugin: 'com.android.feature'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        // ...
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation project(':base')
    testCompile 'junit:junit:4.12'
}

同样,app 模块编译时没有问题;另一方面,Android Studio / Gradle 给了我这个奇怪的 "null cannot be cast to non-null type com.android.build.gradle.BasePlugin" 错误消息,并建议重新下载依赖项并同步项目(完成)或重新启动 Android Studio。

Instant Apps 实际上与 Kotlin 编程语言兼容吗?我期待着您的回答:)

PS:我使用 Android Studio 3.0 Canary 1,从 Canary 频道安装了最新的构建工具更新。我的 Kotlin 插件也应该是最新的。

这在 Kotlin plugin v1.1.2-5 中得到解决。请更新您的版本并重试。

作为参考,这里跟踪了以前插件版本的问题:

38393607 | Issue building Instant apps with Kotlin enabled

参考 Google issue tracker,此问题已修复。 同时,您可以手动更新到1.1.3 kotlin插件。

如果任何问题仍然存在,请在 Google issue tracker 报告,他们将重新开放进行检查。