我在我的gradle项目中使用Kotlin和Java。但是自从我将Kotlin(和kotlin-gradle-pludin)更新到1.0.0之后,奇怪的事情就开始发生了。有一个使用Kotlin对象的Java类:
import com.myapp.android.entities.CategoryEntity;
import com.myapp.android.entities.CommentEntity;
public class Contract {
private static final Class[] MODEL_CLASSES = new Class[]{
CommentEntity.class,
CategoryEntity.class
};
}
CategoryEntity和CommentEntity是用Kotlin编写的。此代码编译并运行良好,直到1.0.0,但现在我收到以下错误:
错误:(3,1)错误:包com.myapp.android.entities不存在
错误:(19,13)错误:找不到符号类CommentEntity
错误:(20,13)错误:找不到符号类CategoryEntity
更新后代码没有被修改,有趣的是 - Android Studio静态分析器威胁这段代码是有效的,但不是编译器。
我很奇怪 - 如果我在Kotlin 1.0.0的发行说明中遗漏了任何内容,或者它是编译器中的错误?
P.S。我试图将实体放在与Contract类相同的包中,但“找不到符号类”错误没有消失。
这是我的app模块的build.gradle的一部分
buildscript {
ext.kotlin_version = '1.0.0'
repositories {
jcenter()
mavenCentral()
<...>
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
<...>
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
<...>
repositories {
jcenter()
mavenCentral()
<...>
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:21.0.+'
<...>
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
dexOptions {
javaMaxHeapSize "2g"
}
<...>
defaultConfig {
applicationId "com.myapp.android"
minSdkVersion 15
targetSdkVersion 22
versionCode 4
versionName "0.0.4"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
<...>
debug {
minifyEnabled false
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}
解决方案:
正如Doug Stevenson指出的那样 - 应该有
apply plugin: 'kotlin-android'
build.gradle中的。看起来我不小心用
替换了它apply plugin: 'kotlin-android-extensions'
而不是添加新的。现在,当我返回kotlin-android插件行时,一切运行良好。