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
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'
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
}
}
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'
}
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.
classpath 'com.Android.databinding: dataBinder: 1.0-rc1'
appliquer le plugin: 'com.Android.databinding'
Enlevez cette lib. de Gradle.
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.