Проблемы при запуске приложения с Jack и Retrolambda

Недавно у меня было много проблем с отладкой моего приложения при использовании Retrolambda, поэтому я хотел включить Джека в свой Gradle для целей отладки.

jackOptions {
   enabled true
}

Из-за этого я столкнулся с этой ошибкой и до сих пор не нашел способа ее решить.

Jackson : NoSuchMethodError for com.google.common.base.Preconditions.checkState

Я проверил разные сообщения в поисках решения:

Android Studio: Gradle — сбой сборки — сбой выполнения для задача ':dexDebug'

Лямбда-выражения аварийно завершают работу с IncompatableClassChangeError в Android при использовании jack

Куча большего размера для демона Gradle рекомендуется для бегущего домкрата

Но ни одно из решений не устранило мои проблемы. Сейчас мой Gradle выглядит так:

buildscript {
    ext {
        use_jack = true
        dagger_version = "2.8"
        firebase_version = "9.6.1"
        rx_version = "2.0.3"
        rx_firebase_version = "1.0.0"
        rx_android_version = "2.0.1"
        gson_version = "2.8.0"
        butterkinfe_version = "8.4.0"
        support_version = "25.0.0"
        target_sdk_version = 24
    }
}


apply plugin: 'com.android.application'
if (!use_jack) { //Backport to apt / RetroLambda
    apply plugin: 'me.tatarka.retrolambda'
    apply plugin: 'com.neenbedankt.android-apt'
}
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.myaplicattion"
        minSdkVersion 15
        targetSdkVersion project.properties.target_sdk_version
        versionCode 1
        versionName "0.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        jackOptions {
            enabled use_jack
        }
    }
    buildTypes {
        debug {
            minifyEnabled false
            testCoverageEnabled = true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    //Support
    compile "com.android.support:appcompat-v7:$support_version"
    compile "com.android.support:design:$support_version"

    //Util
    compile 'com.intellij:annotations:12.0'
    compile 'com.jakewharton.timber:timber:4.3.1'
    compile "com.jakewharton:butterknife:$butterkinfe_version"
    if (use_jack) annotationProcessor "com.jakewharton:butterknife-compiler:$butterkinfe_version"
    else apt "com.jakewharton:butterknife-compiler:$butterkinfe_version"
    compile 'com.github.mukeshsolanki:country-picker-android:1.1.6'
    compile 'com.theartofdev.edmodo:android-image-cropper:2.3.+'
    //Glide
    compile 'com.github.bumptech.glide:glide:3.7.0'

    //Firebase
//    compile "com.firebaseui:firebase-ui-database:0.4.0"
    compile "com.google.firebase:firebase-storage:$firebase_version"
    compile "com.google.firebase:firebase-messaging:$firebase_version"
    compile "com.google.firebase:firebase-common:$firebase_version"
    compile "com.google.firebase:firebase-auth:$firebase_version"
    compile "com.google.firebase:firebase-core:$firebase_version"
    compile "com.google.firebase:firebase-database:$firebase_version"
    compile "com.google.firebase:firebase-crash:$firebase_version"
    compile "com.github.frangsierra:rx2firebase:$rx_firebase_version"

    //GSON
    compile "com.google.code.gson:gson:$gson_version"
    //Facebook
    compile 'com.facebook.android:facebook-android-sdk:[4,5)'

    //Dagger
    compile "com.google.dagger:dagger:$dagger_version"
    if (use_jack) annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
    else apt "com.google.dagger:dagger-compiler:$dagger_version"

    //Rx
    compile "io.reactivex.rxjava2:rxjava:$rx_version"
    compile "io.reactivex.rxjava2:rxandroid:$rx_android_version"

    //Test
    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'
    })
    testCompile 'junit:junit:4.12'
    compile 'com.android.support.test:runner:0.5'
}

apply plugin: 'com.google.gms.google-services'

И мой appgradle :

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'me.tatarka:gradle-retrolambda:3.2.5'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        mavenLocal()
        maven { url "https://jitpack.io" }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

person Francisco Durdin Garcia    schedule 09.03.2017    source источник
comment
Насколько я знаю, если вы включите разъем, вы можете использовать Java 8, и вам больше не нужна ретролямбда. Хотя еще не пробовал.   -  person Benito Bertoli    schedule 09.03.2017
comment
Я уже пробовал, но это не работает, если ваш минимальный SDK не API 25   -  person Francisco Durdin Garcia    schedule 09.03.2017
comment
Что вы имеете в виду под плохо работает? Теоретически ретролямбда не должна быть бесполезна, а API 25 не требуется при работе с Джеком. Кстати, что касается отладки, я слышал, что с Джеком это даже более проблематично, чем с ретроламдой (однако не знаю, правда ли это, поскольку я не использую Джек).   -  person Sartorius    schedule 09.03.2017
comment
Может быть, я плохо выразился в прошлом комментарии. Использование retrolambda, когда ваш минимальный SDK не равен 25, делает отладку действительно ужасной, потому что вы можете довольно хорошо отлаживать, используя точки прерывания, потому что многие переменные никогда не извлекаются отладчиком или оценщиком выражений. С другой стороны, как вы можете видеть в моей градации, ретролямбда отключается, когда я включаю Джека. Но хотя он отключен, я получил эти ошибки, но если я просто удалю ретролямбду из градиента, он отлично работает.   -  person Francisco Durdin Garcia    schedule 09.03.2017
comment
У вас есть точная подпись отсутствующего метода checkState? Похоже, у вас есть несколько версий com.google.common.base.Preconditions в пути к классам. В Guava 20.0 добавлено множество перегрузок checkState. Хотя не уверен, что это поможет.   -  person Sartorius    schedule 09.03.2017