:app:kaptDebugKotlin ошибка при запуске модульного теста
Я пробовал Kotlin и внедрял приложение. Запуск приложения пока работает нормально, но я не могу запустить модульное тестирование.
Android Studio: 2.3.3
Вот мои настройки Gradle:
build.gradle (проект)
buildscript {
ext.kotlin_version = '1.1.3'
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
classpath "io.realm:realm-gradle-plugin:3.5.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
build.gradle (модуль)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
kapt {
generateStubs = true
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile group: 'com.google.code.gson', name: 'gson', version:'2.8.0'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:3.3.2'
}
repositories {
mavenCentral()
}
class FileUtils(assets: AssetManager) {
val assets = assets
fun <T> readJsonFromAsset(fileName: String, tClass: Class<T>): T {
val text: String? = this.assets.open(fileName)?.bufferedReader()?.readText();
val typeToken = object : TypeToken<T>() {}.type
val gson: Gson = Gson()
return gson.fromJson<T>(text, typeToken)
}
}
@RunWith(RobolectricTestRunner::class)
@Config(constants = BuildConfig::class)
class FileUtilsTest {
val fileUtils: FileUtils
init {
val assetManager = Robolectric.buildActivity(Activity::class.java).create().get().assets
fileUtils = FileUtils(assetManager)
}
@Test
fun readJsonFromAsset_ShouldGetQuestionList() {
val questions = fileUtils.readJsonFromAsset("part1.json", Questions::class.java)
assert(7 == questions.size)
}
class Questions : ArrayList<Question>()
}
Сообщение об ошибке:
Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:compileDebugUnitTestSources]
Error:Execution failed for task ':app:kaptDebugKotlin'.
> Internal compiler error. See log for more details
Что я пробовал:
Tried with kotlin_version from 1.1.1 to 1.1.3
Tried with compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
Clean Project
Clean cache and restart Android Studio
Я думаю, что Kotlin не работает гладко с некоторыми библиотеками, и требуются усилия, чтобы это исправить. Если я не могу сделать модульное тестирование проще, чем Java с использованием Kotlin, я не хочу использовать Kotlin, но хочу больше экспериментировать. Я буду признателен за вашу помощь.
0 ответов
Шаги, чтобы решить эту проблему
Шаг 1: Удалите все связанные с Kapt зависимости и плагины и нажмите синхронизацию
Шаг 2: Если кто-то сталкивается с проблемой в привязке данных, продолжайте этот шаг. Иначе пропустите этот шаг
Удалите свой XML-макет привязки данных и создайте новый с новым именем (не добавляйте привязку данных сейчас. После завершения шага 3 дайте снова). А также удалите коды, связанные с привязкой данных kotlin (добавить после шага 3).
Убедитесь, что ваш файл Gradle выглядит как ниже
Gradle уровня проекта
buildscript {
ext.kotlin_version = '1.1.3-2'
ext.android_plugin_version = '2.3.3'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:$android_plugin_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
mavenCentral()
}
}
Уровень приложения Gradle
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
dataBinding {
enabled = true
}
....
}
dependencies {
//your other dependenciess...
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
kapt "com.android.databinding:compiler:$android_plugin_version"
}
Важно, не нужно следовать коду Gradle для последней версии Kotlin
kapt {
generateStubs = true
}