我一直在尝试将新发布的 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 插件也应该是最新的。