在 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 中得到解决。请更新您的版本并重试。
作为参考,这里跟踪了以前插件版本的问题:
参考 Google issue tracker,此问题已修复。
同时,您可以手动更新到1.1.3 kotlin插件。
如果任何问题仍然存在,请在 Google issue tracker 报告,他们将重新开放进行检查。
我一直在尝试将新公开发布的 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 中得到解决。请更新您的版本并重试。
作为参考,这里跟踪了以前插件版本的问题:
参考 Google issue tracker,此问题已修复。 同时,您可以手动更新到1.1.3 kotlin插件。
如果任何问题仍然存在,请在 Google issue tracker 报告,他们将重新开放进行检查。