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.

  • How to pass a Blob object from javascript to Android?
  • Android Fragments on Backstack taking up too much memory
  • How can I disable all touch events on all children of a ViewGroup?
  • Assets folder in Android Studio Unit Test
  • How to force GridView to load cells
  • Android - Download all files from a folder on server
  • 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.

    Related posts:

    popupBackground glitches with Material Design
    Android Deep link going to PlayStore instead of my app on some devices
    uid … does not have android.permission.UPDATE_APP_OPS_STATS
    Edit an AndroidManifest when compiling to remove API-key
    How to get rid of the warning: Use '$' instead of '.' for inner ...
    Why are EM font sizes super tiny on Android mobile?
  • Image array in android
  • How to debug the Android App in release mode using Android studio
  • Write byte to File in Java
  • onLocationChanged always returns I old location
  • GeoCoder Service not Available
  • How can I avoid autocomplete dropdown appearing when text is programatically set?
  • 2 Solutions collect form web for “Databinding fails with NoSuchMethodError”

    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'
    }
    

    It looks like there is an error with a plugin after upgrading the Android Studio.

    If you go in : <Android Studio Dir>/plugins/android/lib/builder-model-x.x.x.jar you may find 2 .jars. Try to delete the old version .jar and keep the new one and also clean and rebuild the project.

    if the above does not work try this:

    Change the version of Objectify library in the build.gradle file of your backend to 4.0b to 5.0.3 or higher if it exists.

    This is may sound irrelevant but objectify 4.0b library has same classes with same package name which are present in appengine sdk like com.google.common.base.Strings.isNullOrEmpty.

    when you deploy the app backend the appengine classes are overridden by objectify classes and hence when you try to call some method it is throwing error.

    This is solved in objectify 5.0.+

    Hope it helps as it helped me solving this issue.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.