web-dev-qa-db-fra.com

ClassNotFoundException: la classe "Android.databinding.DataBinderMapper" n'a pas été trouvée

J'utilise la bibliothèque de liaison de données d'Android pour les vues dans un projet de bibliothèque

j'ai ajouté la ligne suivante dans mon fichier Gradle racine.

classpath 'com.Android.databinding:dataBinder:1.0-rc1'

et ont activé le dataBinding comme indiqué ci-dessous dans le fichier gradle du module 

apply plugin: 'com.Android.databinding'
...
...
Android {
....
  dataBinding {
      enabled = true
  }
}

j'ai activé le multiDex dans mon projet de bibliothèque ainsi que dans l'application hôte qui utilise cette bibliothèque

Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBinderMapper;
    at Android.databinding.DataBindingUtil.<clinit>(DataBindingUtil.Java:31)
    at sdk.ui.activities.MyActivity.onCreate(MyActivity.Java:76)
    at Android.app.Activity.performCreate(Activity.Java:6280)
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1116)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2534)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2647)
    at Android.app.ActivityThread.-wrap11(ActivityThread.Java)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1502)
    at Android.os.Handler.dispatchMessage(Handler.Java:111)
    at Android.os.Looper.loop(Looper.Java:207)
    at Android.app.ActivityThread.main(ActivityThread.Java:5763)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:888)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:749)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.databinding.DataBinderMapper" on path: DexPathList[[Zip file "/data/app/testApp.dev-1/base.apk"],nativeLibraryDirectories=[/data/app/testApp.dev-1/lib/arm64, /data/app/testApp.dev-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
    at Android.databinding.DataBindingUtil.<clinit>(DataBindingUtil.Java:31) 
    at sdk.ui.activities.MyActivity.onCreate(MyActivity.Java:76) 
    at Android.app.Activity.performCreate(Activity.Java:6280) 
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1116) 
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2534) 
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2647) 
    at Android.app.ActivityThread.-wrap11(ActivityThread.Java) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1502) 
    at Android.os.Handler.dispatchMessage(Handler.Java:111) 
    at Android.os.Looper.loop(Looper.Java:207) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5763) 
    at Java.lang.reflect.Method.invoke(Native Method) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:888) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:749) 
Suppressed: Java.lang.ClassNotFoundException: Android.databinding.DataBinderMapper
    at Java.lang.Class.classForName(Native Method)
    at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
    at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)
        ... 15 more
Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
9
A. kanojia

enfin, j’ai réussi à résoudre ce problème ... Il semble qu’il y ait eu un conflit entre la version apt de l’app et les modules de la bibliothèque.

mis à niveau la version apt dans l'application pour

classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.8'
4
A. kanojia

Assurez-vous que TOUS vos modules utilisant DataBinding l’ont activé. C'est la raison pour laquelle j'ai eu cette exception.

Android {
    ....
    dataBinding {
        enabled = true
    }
}
13
Bolein95

Outre l'ajout de ce qui suit à build.gradle:

Android {
    dataBinding {
        enabled = true
    }
}

Je dois aussi ajouter la dépendance suivante:

dependencies {
    kapt 'com.Android.databinding:compiler:3.0.1'
}
2
chengsam

Meilleure estimation. Se débarrasser de Android-apt 

Et s'il y a des bibliothèques utilisant apt 

Au lieu de apt 'lt.mdm.sdd:myLib:1.5.1', utilisez annotationProcessor 'lt.mdm.sdd:myLib:1.5.1'

Je ne sais pas si cela vous aidera, et je ne sais pas si la bibliothèque elle-même devrait être changée.

Cela m’a aidé (j’utilisais androidannotations.org ancienne version avec apt) au moins.

Mettre à jour

Et je ne sais pas pourquoi vous apply plugin: 'com.Android.databinding'? Cela fonctionne aussi sans elle. 

2
Alpha

classpath 'com.Android.databinding: dataBinder: 1.0-rc1'

appliquer le plugin: 'com.Android.databinding'

Enlevez cette lib. de Gradle.

0
Lovekesh

J'ai eu le même problème, mais je l'ai résolu en supprimant

classpath 'com.neenbedankt.gradle.plugins: Android-apt: 1.8'

à partir du build.gradle global et en supprimant

appliquer le plugin: 'Android-apt'

de la build.gradle locale, alors cela a fonctionné comme un charme.

Il semble que ce soit un problème mixte avec Butterknife aussi. Assez bizarre.

0
Jorge Enciso