2016-05-02 6 views
0

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"> 

Antwort

0

Ok, so dass ich es geschafft, finde es heraus, vielleicht hilft es jemand anderem. Anscheinend war das Problem mit Java-Annotationen (@DebugLog, @NonNull, @Icicle etc.), wenn sie in irgendeiner der Kotlin-Klassen vorhanden waren, würde sie halb zufällig kompilieren. Nach dem Entfernen von Thosen funktioniert es einwandfrei.

+0

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

Verwandte Themen