J'ai essayé d'utiliser OkHttp et Picasso ( à la suite de cette réponse ) pour la mise en cache sur disque d'images que je téléchargeais depuis le stockage Firebase. Maintenant, l'application donne des exceptions et des plantages. J'ai vu ces messages: post 1 , post 2 mais je n'ai trouvé aucune solution pertinente. J'ai aussi essayé de nettoyer et de reconstruire le projet mais je n'ai pas eu de chance.
Voici build.gradle:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "social.com.networking.social.media.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
multiDexEnabled true
}
}
}
dependencies {
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'
})
compile 'com.Android.support:appcompat-v7:25.1.0'
compile 'com.Android.support:design:25.1.0'
compile 'br.com.mauker.materialsearchview:materialsearchview:1.2.0'
compile 'com.alirezaafkar:toolbar:1.1.1'
compile 'com.github.mancj:MaterialSearchBar:0.3.5'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.slider:library:1.1.5@aar'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.google.firebase:firebase-core:10.0.1'
compile 'com.google.firebase:firebase-ads:10.0.1'
compile 'com.google.firebase:firebase-messaging:10.0.1'
compile "com.google.firebase:firebase-auth:10.0.1"
compile 'com.google.firebase:firebase-storage:10.0.1'
compile 'com.google.firebase:firebase-crash:10.0.1'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2'
compile 'com.Android.support:multidex:1.0.1'
compile 'org.parceler:parceler-api:1.1.6'
annotationProcessor 'org.parceler:parceler:1.1.6'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
Full Stacktrace:
Process: social.com.networking.social.media.app, PID: 28258
Java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/okhttp/OkHttpClient;
at com.squareup.picasso.OkHttpDownloader.defaultOkHttpClient(OkHttpDownloader.Java:31)
at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:76)
at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:65)
at social.com.networkingsocialmediaapp.Global.onCreate(Global.Java:17)
at Android.app.Instrumentation.callApplicationOnCreate(Instrumentation.Java:1018)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4991)
at Android.app.ActivityThread.-wrap1(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1555)
at Android.os.Handler.dispatchMessage(Handler.Java:111)
at Android.os.Looper.loop(Looper.Java:207)
at Android.app.ActivityThread.main(ActivityThread.Java:5776)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:789)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:679)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.squareup.okhttp.OkHttpClient" on path: DexPathList[[Zip file "/data/app/social.com.networking.social.media.app-2/base.apk"],nativeLibraryDirectories=[/data/app/social.com.networking.social.media.app-2/lib/arm64, /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 com.squareup.picasso.OkHttpDownloader.defaultOkHttpClient(OkHttpDownloader.Java:31)
at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:76)
at com.squareup.picasso.OkHttpDownloader.<init>(OkHttpDownloader.Java:65)
at social.com.networkingsocialmediaapp.Global.onCreate(Global.Java:17)
at Android.app.Instrumentation.callApplicationOnCreate(Instrumentation.Java:1018)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4991)
at Android.app.ActivityThread.-wrap1(ActivityThread.Java)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1555)
at Android.os.Handler.dispatchMessage(Handler.Java:111)
at Android.os.Looper.loop(Looper.Java:207)
at Android.app.ActivityThread.main(ActivityThread.Java:5776)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:789)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:679)
Suppressed: Java.lang.ClassNotFoundException: com.squareup.okhttp.OkHttpClient
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
Edit 1: J'ai activé MultiDex comme dit Redman, mais cela donne toujours la même erreur. Selon ceci: developer.Android.com/studio/build/multidex.html#keep , je dois choisir les classes nécessaires dans le fichier APK de base. Comment déterminer quelles classes sont nécessaires?
Dans Android Studio 2.3 et versions ultérieures, il existe Instant Run qui peut affecter votre code.
Désactiver Instant Run
Fichier -> Paramètres -> Construction, exécution, déploiement -> Exécution instantanée
Dans mon cas, cela fonctionnait parfaitement lorsqu'il était exécuté à partir de
Android Studio
mais plantage lors de l'installation à partir d'autres sources
1) Veuillez désinstaller l'application depuis votre mobile
2) Réinstaller l'application maintenant à partir du studio Android
3) 98% cela fonctionnera sinon nettoyez le projet et réinstallez-le
Vous devrez peut-être activer multidex. Suivez le guide à partir de cette page.
https://developer.Android.com/studio/build/multidex.html , pour activer multidex
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
Supprimez simplement le dossier de construction de votre projet, puis nettoyez et exécutez votre application. Cela a fait le tour pour moi ...
Mon code compilait bien sur le périphérique à l'aide d'un câble USB, mais lorsque j'essayais de l'installer à l'aide du fichier * .apk, il cassait. J'ai donc décoché l'option Fichier -> Paramètres -> Construction, Exécution, Déploiement -> Instantané. Exécutez, mais maintenant, il fonctionne bien avec le fichier * .apk et commence à casser avec l’installation par USB, le message d’erreur est dans l’image attachec, même si j’appuie sur OK, cela ne fonctionne pas. Un message d'erreur apparaît.
Essayez de supprimer le dossier .gradle du projet.
J'ai également eu ce problème, et il n'est toujours pas possible de désactiver l'instant run.Later, j'ai constaté que j'ai supprimé tous les fichiers du dossier build-cache, puis nettoyé le projet. Mon répertoire est C:\Users\HDB. Android\built-cache.J'espère pouvoir aider d'autres personnes qui rencontrent ce bogue.
(Je sais que c'est une vieille question, mais je suis venu ici à la recherche d'une solution à un problème similaire.)
J'ai une réponse différente à considérer avant que vous n'épuisiez toutes les suggestions ci-dessus: l'erreur ClassNotFoundException: YourParcelableClass n'est peut-être pas le problème. En fait, il se peut que ce ne soit pas un problème.
J'ai une application qui affiche un écran de contenu varié qui est transmis sous forme de colis et rendu au format HTML dans une vue Web. cela fonctionnait très bien jusqu'à ce que je nettoie le code, que je l'enregistre, que je vérifie un nouvel arbre, que je désinstallé et que je réinstalle l'application sur mon téléphone. J'ai commencé à avoir un écran vide. évidemment, l’exception ClassNotFoundException dans le journal signifiait que mon contenu n’était pas correctement exprimé.
Après au moins heure d'invalidation de l'exécution instantanée, du rm -rf .gradle
, du nettoyage du projet, de l'invalidation des caches et du redémarrage, etc., j'ai commencé à ajouter de plus en plus de journalisation de remise en cause jusqu'à ce que je réalise que je recevais. mon contenu de Intent.getParcelableExtra()
; l'écran vide semblait ne pas être lié! (Je ne sais toujours pas pourquoi, mais WebView.loadData()
a cessé de fonctionner et doit être remplacé par WebView.loadDataWithBaseURL()
.)
J'espère que cela économisera une heure de stupidité à quelqu'un d'autre. Si vous voyez cette exception ClassNotFoundException avec le nom de votre classe, vérifiez si vos objets sont toujours correctement gérés. ils pourraient être!
Pour moi, ce problème a été résolu par Désactiver Instant Run
Il suffit d'aller dans Préférences -> Construction, Exécution, Déploiement -> Exécution instantanée -> Désactiver l'option
Et redémarrez l'application