10

我一直在尝试将新发布的 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 在其中工作

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')
}

基础模块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'
}

同样,应用程序模块在此配置下编译没有问题;另一方面,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 插件也应该是最新的。

4

2 回答 2

8

这在Kotlin 插件 v1.1.2-5中得到解决。请更新您的版本,然后重试。

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

38393607 | 在启用 Kotlin 的情况下构建即时应用程序的问题

于 2017-05-25T23:53:07.843 回答
0

参考谷歌问题跟踪器,已修复。同时,您可以手动更新到 1.1.3 kotlin 插件。

如果任何问题仍然存在,请在Google 问题跟踪器上报告,他们将重新打开以进行检查。

于 2017-12-15T06:49:23.963 回答