Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Databinding fails with NoSuchMethodError

After updating to gradle 2.10 every time when I try to assemble debug build of the app I get the NoSuchMethodError exception. Here is the relevant part of the build log:

java.lang.RuntimeException: failure, see logs for details.
  cannot generate view binders java.lang.NoSuchMethodError: com.google.common.base.Strings.isNullOrEmpty(Ljava/lang/String;)Z
    at android.databinding.tool.util.StringUtils.capitalize(StringUtils.java:57)
    at android.databinding.tool.util.ParserHelper.toClassName(ParserHelper.java:23)
    at android.databinding.tool.store.ResourceBundle$LayoutFileBundle.getFullBindingClass(ResourceBundle.java:551)
    at android.databinding.tool.store.ResourceBundle$LayoutFileBundle.getBindingClassPackage(ResourceBundle.java:541)
    at android.databinding.tool.CompilerChef.pushClassesToAnalyzer(CompilerChef.java:124)
    at android.databinding.tool.CompilerChef.createChef(CompilerChef.java:73)
    at android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:148)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:82)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:154)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:139)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:66)

As you can see Method com.google.common.base.Strings.isNullOrEmpty can't be found.

Some specifics

I use Retrolambda 3.2.5 and Java 8. There are no other extra plugins.

Build plugin version: com.android.tools.build:gradle:2.0.0

Build tools version: 23.0.3

OS: OS X

build.gradle looks like this. I altered it slightly to not expose some private stuff, but problem is still there.

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
        classpath 'me.tatarka:gradle-retrolambda:3.2.3'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

project.version = '1.0.0'

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += "--set-max-idx-number=50000" //    default 60000
    }
}

def googleApiKey = "key goes here"
def appVersionCode = 1
def appVersionName = project.version + "." + appVersionCode

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        manifestPlaceholders = [googleApiKey  : googleApiKey,
                                appVersionCode: appVersionCode,
                                appVersionName: appVersionName]
        multiDexEnabled true

        ndk {
            abiFilters "armeabi", "armeabi-v7a"
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(
                            output.outputFile.parent,
                            "App-${project.version}-${appVersionCode}.apk"
                    )
                }
            }
        }

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }

    flavorDimensions "multidex", "leakcanary"

    productFlavors {
        withLeakCanary {
            dimension "leakcanary"
        }

        withoutLeakCanary {
            dimension "leakcanary"
        }

        develDex {
            dimension "multidex"
            minSdkVersion 21
            targetSdkVersion 23
        }

        prodDex {
            dimension "multidex"
            minSdkVersion 15
            targetSdkVersion 23
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/DEPENDENCIES'
    }
    lintOptions {
        abortOnError false
    }
    sourceSets {
        main {
            jniLibs.srcDir 'build/jniLibs'
        }
    }

    dexOptions {
        javaMaxHeapSize "4g"
    }

    dataBinding {
        enabled = true
    }
}

task copyNativeLibs(type: Copy) {
    from(new File(buildDir, 'intermediates/exploded-aar/')) {
        include '**/*.so'
        exclude '**/lib-detector.so'
    }
    into new File(buildDir, 'jniLibs')
    eachFile { details ->
        def pathSplit = details.path.split('/')
        details.path = pathSplit[pathSplit.length - 2] + '/' +    pathSplit[pathSplit.length - 1]
    }

    includeEmptyDirs = false
}

tasks.withType(JavaCompile) { javaCompileTask ->    javaCompileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.robolectric:robolectric:3.0'
    testCompile 'org.robolectric:shadows-multidex:3.0'
    testCompile('org.robolectric:shadows-httpclient:3.0') {
        exclude module: 'httpcore'
        exclude module: 'commons-codec'
    }
    testCompile 'org.powermock:powermock-module-junit4:1.5.2'
    testCompile 'org.powermock:powermock-api-mockito:1.5.2'
    testCompile 'org.roboguice:roboguice:3.0.1'

    compile 'com.parse.bolts:bolts-android:1.2.1'
    compile fileTree(dir: 'libs', include: 'Parse-*.jar')

    compile 'com.google.android.gms:play-services-drive:7.8.0'
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support:support-annotations:23.0.1'
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.android.support:recyclerview-v7:23.0.1'
    compile 'com.android.support:design:23.0.1'
    compile 'org.roboguice:roboguice:3.0.1'
    provided 'org.roboguice:roboblender:3.0.1'
    compile('com.google.inject.extensions:guice-assistedinject:3.0') {
        exclude group: 'com.google.inject', module: 'guice'
    }
    compile 'commons-io:commons-io:2.4'
    compile 'commons-lang:commons-lang:2.6'
    compile 'com.intellij:annotations:12.0'

    compile 'com.google.zxing:core:3.2.1'
    compile 'com.google.zxing:android-core:3.2.1'
    compile 'com.google.android.gms:play-services-base:7.8.0'
    compile 'com.google.android.gms:play-services-location:7.8.0'
    compile 'com.google.android.gms:play-services-maps:7.8.0'
    compile 'com.google.android.gms:play-services-analytics:7.8.0'
    compile 'com.amazon:in-app-purchasing:2.0.1'

    compile 'com.googlecode.libphonenumber:libphonenumber:7.0.7'

    withLeakCanaryCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'

    compile 'com.google.android.gms:play-services-ads:7.8.0'

    compile 'io.reactivex:rxandroid:1.0.1'
    compile 'io.reactivex:rxjava:1.0.14'
}

Question

Did anyone else had the same problem? How to fix it? If you need some extra information, please let me know in comments.

like image 734
Dmitry Zaytsev Avatar asked Apr 20 '16 16:04

Dmitry Zaytsev


1 Answers

Have you tried the new patch on jitpack of simular issue #134 clean-build, there seemed to be something wrong with gradle import ordering you can try it with :

repositories {
    maven { url "https://jitpack.io" }
}
dependencies {
    classpath 'com.github.denis-itskovich:gradle-retrolambda:3.2.3-fix-134'
}
like image 138
jobbert Avatar answered Nov 09 '22 20:11

jobbert