Ich habe vor kurzem beschlossen, unsere Firma Android-Anwendung in Kotlin zu portieren. Es funktioniert gut, aber wenn ich irgendeine der Kotlin-Erweiterungen verwende, bekomme ich ein seltsames Verhalten. Ich habe festgestellt, dass jede der Klassen, die Erweiterungen verwenden (sei es anko oder selbst deklarierte Erweiterungen), nur beim ersten Mal erstellt wird und bei jedem nachfolgenden Build nicht unter anderen Klassen vorhanden ist. Kotlin-Klassen, die keine Erweiterungen verwenden, werden immer korrekt erstellt. Dies führt zu einem NoClassDefFoundError, wann immer ich das Programm ausführen (bei nachfolgenden Builds wird das erste ohne Probleme ausgeführt). Ich habe alles versucht und ich beginne ein wenig verzweifelt zu bekommen ... Hier ist meine build.gradle für das gesamte Projekt:Kotlin-Klassen mit Android-Erweiterungen nicht auf konsequente Builds gebaut
buildscript {
ext.kotlin_version = '1.0.1-2'
ext.support_version = '23.3.0'
ext.anko_version = '0.8.3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.google.gms:google-services:2.0.0-alpha6'
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.7'
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 {
}
Hier ist build.gradle für das Modul, das ich versucht bin zu verwenden Kotlin in Hier
buildscript {
repositories {
jcenter()
mavenCentral()
maven {
url 'http://repo.spring.io/milestone'
}
maven {
url "http://repo.bodar.com/"
}
}
dependencies {
classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
classpath 'me.tatarka:gradle-retrolambda:3.2.4'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.hugo'
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'groovyx.grooid.groovy-android'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
productFlavors {
dev {
minSdkVersion 21
}
prod {
minSdkVersion 19
}
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/services/javax.annotation.processing.Processor'
exclude 'META-INF/services/org.codehaus.groovy.transform.ASTTransformation'
exclude 'LICENSE.txt'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.example.name"
minSdkVersion 16
targetSdkVersion 23
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
resValue "string", "tray__authority", "${applicationId}.tray"
}
dexOptions {
javaMaxHeapSize "4g"
}
retrolambda {
jvmArgs '-noverify'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled = true
}
}
}
kapt {
generateStubs = true
}
repositories {
jcenter()
mavenCentral()
maven {
url "http://repo.bodar.com/"
}
maven {
url "https://clojars.org/repo/"
}
maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.anko:anko-common:$anko_version"
androidTestCompile 'org.codehaus.groovy:groovy:2.4.2:grooid'
androidTestCompile 'com.andrewreitz:spock-android:1.2.2'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy'
exclude group: 'junit'
}
// Optional, needed for mocking
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
compile files('libs/nineoldandroids-2.4.0.jar')
compile files('libs/guava-18.0.jar')
provided 'org.projectlombok:lombok:1.16.4'
compile files('libs/icepick-2.3.6.jar')
compile files('libs/icepick-processor-2.3.6.jar')
compile files('libs/FlurryAnalytics-5.5.0.jar')
compile project(':fliclib')
compile "com.android.support:support-annotations:$support_version"
compile "com.android.support:recyclerview-v7:$support_version"
compile "com.android.support:appcompat-v7:$support_version"
compile "com.android.support:design:$support_version"
compile "com.android.support:support-v4:$support_version"
compile 'com.android.support:multidex:1.0.1'
compile 'com.androidplot:androidplot-core:0.9.6'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.nhaarman.listviewanimations:lib-core:[email protected]'
compile 'com.nhaarman.listviewanimations:lib-manipulation:[email protected]'
compile 'com.nhaarman.listviewanimations:lib-core-slh:[email protected]'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'org.springframework.android:spring-android-rest-template:2.0.0.M1'
compile 'com.google.code.gson:gson:2.4'
compile 'com.joooonho:selectableroundedimageview:1.0.1'
compile 'com.googlecode.totallylazy:totallylazy:1.73'
compile 'net.grandcentrix.tray:tray:0.9.2'
compile 'org.solovyev.android.views:linear-layout-manager:[email protected]'
compile 'jp.wasabeef:recyclerview-animators:2.1.0'
compile 'com.soundcloud.android:android-crop:[email protected]'
compile 'com.github.castorflex.verticalviewpager:library:19.0.1'
compile 'com.github.traex.expandablelayout:library:1.3'
}
apply plugin: 'com.google.gms.google-services'
ist das Manifest für dieses Modul (oder besser gesagt es vorangeht, wie der Code propietary ist)
<manifest package="com.package.name"
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="23"
android:versionName="0.9.1">
Ich sehe, dass Sie das Test-Coverage-Flag verwenden - es scheint dort ein Bug zu sein, der eine Menge seltsames Verhalten verursachen könnte :) https://youtrack.jetbrains.com/issue/KT-11333 – daemontus