Java.lang.ClassNotFoundException sur l'utilisation de l'app

j'ai créé et publié ma première application Android. C'est très simple. Il fonctionne très bien sur simulateur et certains téléphones, mais j'obtiens cette erreur:

java.lang.RuntimeException: Unable to instantiate application cz.teamnovak.droid.Novak ESC Track guide: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232)
    at android.app.ActivityThread.access00(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
    at android.app.Instrumentation.newApplication(Instrumentation.java:942)
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644)
    ... 11 more

une idée de ce qui peut causer ça?

50
demandé sur wonea 2010-09-23 21:49:23

24 réponses

Ouais, j'ai eu exactement ce même problème. C'est parce que j'ai spécifié l'attribut android:name dans le noeud de l'application dans le fichier manifeste.

votre fichier de manifeste Android ressemble probablement à quelque chose comme ceci:

   <application 
       android:name="Novak ESC Track guide" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:description="@string/help_text" >

N'utilisez pas l'attribut android:name ! sauf si vous avez implémenté un objet d'Application personnalisé.

l'attribut application:name n'a rien à voir avec le nom de votre application. C'est le nom d'une classe spécifique à charger comme votre instance Application . C'est pourquoi vous obtiendriez le ClassNotFoundException si cette classe n'existait pas.

pour le nom de l'application utilisez l'attribut android:label sur ce même noeud d'application à la place.

retirez-le et il devrait fonctionner:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:description="@string/help_text" >
40
répondu phreakhead 2015-05-08 12:09:29

quelque chose comme ça s'est produit quand j'ai changé la cible de construction à 3.2. Après avoir fouillé partout, j'ai découvert que a avait nommé le dossier jar lib "lib" au lieu de "libs". Je viens de le renommer en libs et de mettre à jour les références sur le chemin de construction Java et tout fonctionnait à nouveau. Peut-être que cela aidera quelqu'un...

13
répondu hobbs 2017-12-05 13:27:12

nous avons un couple de projets où cette question a été enregistrée de temps en temps sur L'Android Market. J'ai trouvé les problèmes suivants dans les manifestes:

  1. si le nom du paquet est com.tester ensuite les noms des activités devrait être .ActivityName (avec un point de tête), pas seulement ActivityName .

  2. pour certaines classes, celles qui apparaissaient le plus souvent dans les logs, le nom de classe était spécifié comme com.test.Name alors qu'il aurait dû être .Name .

je suppose que de nombreuses implémentations D'Android gérer ces problèmes mineurs avec succès (c'est pourquoi l'exception jamais arrivé dans les tests), tandis que d'autres peu sont jeter l'exception.

10
répondu Alex 2017-12-05 13:27:29

avait la même erreur: java.lang.RuntimeException: impossible d'instancier l'activité (classnotfound) Tout d'abord, essayer de changer la plate-forme de construction (2.3.3 - > 2.2 - > 2.3.3) a fonctionné pour moi.

5
répondu Mr G 2012-08-02 06:40:19

c'est mon observation en ce qui concerne l'erreur. J'ai récemment mis à jour l'ADT à 22.0.1. J'obtiens l'erreur suivante quand j'ai importé mes projets précédents " E/AndroidRuntime(24807): causé par: java.lang.ClassNotFoundException: com.sherl.sherlockfragmentsapp.StartActivity dans le chargeur de dalvik.système.PathClassLoader [/data/app / com.sherl.sherlockfragmentsapp-1.apk] "

puis j'ai changé "propriétés-> Java Build Path - > Order and Export" dans le manière suivante [Impossible d'ajouter l'Image à cause des règles du Forum]

  1. Android Bibliothèques Privées - vérifié
  2. Android 4.2.2 - case à cocher
  3. Android Dépendances - vérifié
  4. /src
  5. /gen - sélectionné

il a résolu la question. L'espoir c'est vous Aider les gars.

5
répondu lakshman 2017-12-05 13:28:15

je sais qu'on a répondu à cette question, et ce n'était probablement pas le cas. Mais j'ai eu cette erreur, et je me suis dit que je pourrais poster pourquoi au cas où ça pourrait être utile à quelqu'un d'autre.

alors j'ai eu cette erreur, et après plusieurs heures, je me suis rendu compte que je n'avais pas vérifié 'Project > Build Automatically'. Donc, bien que je n'ai pas eu d'erreurs de compilation, c'est pourquoi j'ai eu cette erreur. Tout a commencé à fonctionner dès que j'ai réalisé que je ne construisais pas vraiment le projet avant le déploiement: - /

bien, c'est mon histoire: -)

4
répondu Joel Martinez 2011-09-02 17:56:33

a eu ce genre de problème aujourd'hui après la mise à niveau à la dernière ADT/SDK. M'a fallu un certain temps. Vérifié que j'ai utilisé google-apis(pour les cartes), utilise-bibliothèque, nettoyé le projet, etc.

supprimer le .projet et l'ajout d'un nouveau (créer un nouveau projet android) enfin résolu.

4
répondu icyerasor 2011-10-21 22:15:42

j'ai ce problème parfois avec eclipse. Ce qui l'a corrigé pour moi est d'aller sur Project Properties / Android et de changer l'API de cible de construction en une version différente et de republier. Je vais trouver que corrigé, puis je peux le ramener à la cible de construction désirée.

ou

vous pourriez avoir besoin de vérifier votre programme .cfg .

en supposant que vous avez correctement relié vos bibliothèques et que votre les projets de bibliothèques ont le code dont vous avez besoin marqué pour l'exportation, la prochaine étape que vous pourriez vouloir faire est de vérifier vos paramètres de proguard et assurez-vous que vous n'êtes pas enlever les classes dont vous avez besoin.

j'ai eu beaucoup de mal avec cela après que j'ai eu mon application travaillant aller directement à l'émulateur ou l'appareil d'eclipse. Le problème que j'avais était après l'application a été publié (i.e. passé par proguard) et a fonctionné sur le dispositif il manquait des classes qui étaient contenues dans le projet. Ils ont été supprimés, en quelque sorte.

mon problème a pu être causé lorsque j'ai essayé D'utiliser IntelliJ et que je suis revenu à eclipse.

voici le fichier proguard qui a fonctionné pour moi:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembers class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
4
répondu RightHandedMonkey 2012-05-08 15:29:09

Dans mon cas, j'ai dû ajouter android:name=".activity.SkeletonAppActivity" au lieu de android:name=".SkeletonAppActivity" dans le fichier de manifeste pour l'activité principale. SkeletonAppActivity se trouvait dans un emballage différent de celui de la classe d'application. Bonne chance!

3
répondu Tenesh 2011-09-15 12:29:52

assurez-vous que android:hasCode n'est pas false dans votre fichier de manifeste. C'est ce qui a résolu le problème pour moi!

3
répondu lost_bits1110 2011-11-16 19:24:41

j'ai eu cette erreur quand j'ai lancé mon application sur les versions précédentes d'android. Je pensais que SearchView était rétro-compatible avec Android 1.5, mais il a été créé en 3.0. J'ai retiré sa référence du code et ça a marché.

3
répondu Logan 2012-07-16 01:11:03

Eh bien, vous avez un java.lang.ClassNotFoundException. Cela signifie qu'une classe est manquant dans l'exécution de l'application. Vous devez vérifier que wheather vous avez ajouté tous vos libs au chemin de compilation.

clic droit sur votre projet -> propriétés -> Java build path -> bibliothèques, ajoutez vos fichiers ou créez un fichier contenant vos classes et activez l'exportation de commandes pour vos fichiers.

2
répondu Artjom Zabelin 2010-09-23 18:11:41

dans mon cas, l'icône de l'application causait l'erreur:

<application
    android:name="com.test.MyApp"
    android:icon="@drawable/myicon"

pourquoi? Parce que j'ai mis l'icône seulement dans le dossier "drawable", et j'utilise un dispositif de test haute résolution, donc il regarde dans le dossier "drawable-hdpi" pour l'icône. Le comportement par défaut pour tout le reste est d'utiliser les icônes de "drawable" si elles ne sont pas dans "drawable-hdpi". Mais pour l'icône de lancement, cela ne semble pas être valable.

So la solution est de mettre une copie de l'icône (avec le même nom, bien sûr) dans "drawable-hdpi" (ou n'importe quelle résolution supportée par les appareils).

2
répondu Ixx 2012-06-11 14:46:12

j'ai utilisé une méthode de supertype qui a été déclarée "finale" dans l'une de mes activités (en particulier la méthode " isResumed ()"). L'erreur réelle s'est manifestée dans LogCat seulement après avoir redémarré mon dispositif de développement.

2
répondu Rich Ehmer 2012-07-30 13:51:01

la classe erreur non trouvée indique que vos fichiers de classe sont manquants. Veuillez aller à propriétés > Java Build Path et ajouter votre paquet contenant vos fichiers java à l'onglet Source s'il est trouvé manquant. Alors construisez votre projet. Cela créera les disparus .les fichiers de classe.

2
répondu rino 2012-08-02 05:40:20

j'ai récemment investi du temps dans un rapport d'erreur similaire qui m'est parvenu à travers les rapports d'erreur play store.

Un aperçu de certaines des causes possibles.

Bibliothèque Manquante

étant donné que mon application est testée avant sa sortie et que le problème ne se produit qu'approximativement. une fois par semaine, je suis sûr que le mien n'est pas un problème de bibliothèque. Vous devriez penser dans cette direction si une construction sur votre système échoue et l'installation de l'application en utilisant La BAD entraîne une erreur lors du lancement.

le nettoyage et la construction de votre projet pourrait aider si c'est un problème local et assurez-vous que vous avez la dernière version de SDK et IDE.

Dans ces cas, il est une catégorie de votre application ou une bibliothèque utilisée dans votre application qui déclenche l'erreur. Il s'agit d'une différence importante avec le point suivant où le point d'entrée (activité avec l'intention principale ou votre service personnalisé/objet D'Application) de votre application n'est pas trouver.

si c'est le cas, examinez les questions et réponses suivantes que j'ai choisies. Ils ont tous une réponse acceptée.

impossible d'instancier l'application-ClassNotFoundException Android Activité ClassNotFoundException - tout essayé Android ClassNotFoundException

activité principale ou Application non trouvée

Mauvaise configuration de L'AndroidManifest.xml

plus comme une erreur de débutants a été cité ici avant dans l'une des réponses parlant du fichier manifeste android.

L'important ici est que cette erreur bloque toujours votre application de chargement. Il devrait construire cependant, mais planter sur la première utilisation.

j'ai édité cette réponse, c'est la partie importante:

Ne pas utilisez l'attribut android:name! sauf si vous avez mis en œuvre une objet d'Application personnalisé.

l'attribut application: name n'a rien à voir avec le nom de votre App. C'est le nom d'une classe spécifique à charger comme votre Application instance. C'est pourquoi vous obtiendriez la ClassNotFoundException si cela la classe n'existerait pas.

pour le nom de l'application utilisez l'attribut android:label sur ce même noeud d'application à la place.

supprimé: java.io.IOException: impossible d'ouvrir le fichier DEX

maintenant ça devient intéressant! Cela faisait partie de la pile de trace enregistrée dans mon cas à travers la playstore. Je peux donc créer une compilation et l'exécuter sur mon appareil sans erreurs (alors que toutes les erreurs précédentes empêcheraient toute exécution).

un commentaire important a été fait à la question suivante SO application Android ClassNotFoundException, incapable d'instancier l'application

semble que le système a des difficultés à ouvrir votre application Dex fichier java.io.IOException: impossible d'ouvrir le fichier DEX, c'est avant que l'une de vos classes soit chargée, donc ça n'a rien à voir avec la façon dont vous définissez votre classe d'application dans le Manifeste. – user2046264 Fév 27 '14 à 2:25

la partie importante ici est le supprimée IOException. Cela indique qu'une opération IO a échoué. Les appels réseau et les appels de stockage sont des exemples d'opérations IO.

un autre rapport d'erreur qui va dans cette direction est listé à Android à ne pas pouvoir instancier application java.lang.ClassNotFoundException: où le rôle du stockage externe fourni par une carte sdcard est mentionné.

D'autres questions similaires indiquent que cela peut être une erreur de l'utilisateur. "/mnt/asec/..."indique que l'application s'exécute à partir de la carte sdcard. Si le sdcard est supprimé, cela pourrait causer cette erreur. Les applications de tiers ou les périphériques enracinés peuvent probablement déplacer une application vers la carte sdcard même si elle n'est pas autorisée par le manifeste.

si vous êtes désespéré lire toutes les réponses à cette question car il ya d'autres chemins énumérés également. Pensez à la spécification complète du paquet, l'utilisation de singletons et plus encore.

le point ici est que le réseau et le stockage sont IO.

pour mon cas spécifique, j'ai vérifié tous les appareils qui ont signalé cette erreur et constaté qu'ils ont tous un support de stockage externe. Ainsi, un utilisateur pourrait installer l'application et la déplacer vers un stockage externe, faire enlever la carte SD et obtenir cette erreur (juste une théorie, pas testé).

pour plus d'informations sur les options d'installation, voir http://developer.android.com/guide/topics/data/install-location.html

j'ai également considéré le réseau. En haut de la page stack trace detail sur les rapports play store vous obtenez un aperçu des occurrences de l'erreur au fil du temps.

il m'est apparu que l'erreur se produisait davantage au moment où une mise à jour était publiée. Cela pourrait soutenir la théorie que l'utilisateur obtient une mise à jour de l'application, Téléchargements cette mise à jour que en quelque sorte, est corrompu. L'installation se passe bien, mais la première exécution de l'application des résultats dans l'erreur (encore une fois qu'une théorie, pas testé).

autres ressources

enfin 2 ressources non SO qui pourraient vous aider:

https://groups.google.com/forum/#!topic / android-developers /Jc7_qwbrjo https://code.google.com/p/android/issues/detail?id=72121

2
répondu hcpl 2017-05-23 12:32:20

utilisez-vous votre code dans différents environnements, disons, en utilisant Dropbox ou quelque chose comme ça? Utilisez-vous une bibliothèque ou similaire? J'ai eu beaucoup de problèmes après avoir partagé les fichiers de l'espace de travail et je l'ai corrigé en reconfigurant les dépendances. Espérons que cela aide quelqu'un!

0
répondu Dani bISHOP 2011-09-06 21:36:46

vérifier si le nom du paquet dans la classe correspond au nom du paquet dans le fichier manifeste. Cela a fonctionné pour moi

0
répondu Droidme 2012-03-27 11:21:22

dans mon cas, cela se produit lorsque j'ai déplacé mon activité de lanceur vers un paquet différent sans mettre à jour le fichier manifest.

0
répondu Kishore 2012-11-02 05:05:33

j'avais une ClassNotFoundException pointant vers ma classe Application.

J'ai trouvé que J'ai manqué Java builder dans mon .projet

S'il manque quelque chose dans votre buildSpec , fermez Eclipse, assurez-vous que tout est en place et recommencez Eclipse

        <buildSpec>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>org.eclipse.jdt.core.javabuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ApkBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
    </buildSpec>
0
répondu Yaroslav Mytkalyk 2013-01-15 13:26:26

j'ai le même problème avec android os version 4.1.2

Ajouter sous la ligne AndroidManifest.xml sous la ligne android:label="@string/app_name" dans l'étiquette de demande

android:name="android.support.multidex.MultiDexApplication"

Cela peut aider quelqu'un avec le même problème.

0
répondu CLIFFORD P Y 2016-11-03 18:30:45

paramètre minifyEnabled à false dans mon fichier build.gradle a corrigé le problème pour moi.

release {
    minifyEnabled false
}
0
répondu Chris Stillwell 2018-07-30 20:09:56

pour moi, c'était juste un projet de nettoyage.

j'ai nettoyé le projet, et je cours à nouveau. Et toutes les erreurs du passé.

0
répondu Khemraj 2018-09-11 11:31:07

pour moi, "fermer" la demande D'Eclipse et "rouvrir" le projet, a résolu le problème.

-1
répondu ArunJTS 2014-04-07 07:06:09