web-dev-qa-db-fra.com

Application Android ClassNotFoundException pour l'activité principale

La plupart des appareils peuvent exécuter mon application, mais j'ai reçu le rapport d'erreur suivant:

Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.company.app/com.company.app.MainActivity}: Java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2755)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2854)
at Android.app.ActivityThread.access$2300(ActivityThread.Java:136)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2179)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:143)
at Android.app.ActivityThread.main(ActivityThread.Java:5068)
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:858)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.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.newActivity(Instrumentation.Java:1034)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2747)
... 11 more

J'ai trouvé une réponse connexe: ClassNotFoundException Android

mais la question est, mon exception se produit avant n'importe quelle ligne de code que j'écris, alors comment puis-je m'assurer que le chargeur de classes est chargé?

20
Kay Chan

J'ai eu exactement le même problème. Soudain, mon application a cessé de fonctionner. Je n’ai apporté aucune modification au manifeste, mais il ya eu un accident pour indiquer la première ligne: 

<?xml version="1.0" encoding="utf-8"?>

Cela a provoqué ClassNotFoundException pour l'activité du lanceur. Je me débattais avec cela pendant quelques heures et je l’ignorais chaque fois que je vérifiais un manifeste pour une possible erreur.

Une chose étrange s'est produite après que j'ai supprimé cette ligne à nouveau. Surprise, l'application surprise fonctionnait toujours. (et je n'ai pas oublié de reconstruire l'application)

J'espère que cela aidera quelqu'un à économiser quelques heures.

20
SocialError

J'obtiens cette erreur lorsque ma classe n'est pas correctement définie dans le manifeste, généralement parce que je n'ai pas mis dans le bon espace de noms comme dans:

    <activity Android:name="com.company.project.main.MyMainActivity" ...>

par opposition à

    <activity Android:name="MyMainActivity" ...>

Vous ne savez pas pourquoi cela fonctionnerait pour vous sur certains appareils et pas d'autres cependant. 

10
fredw

Veuillez fermer votre Eclipse et l'ouvrir. Nettoyez votre projet et effectuez une actualisation. Puis courez et voyez.

6
Mathew

J'ai eu le même problème et le problème était une bibliothèque tierce qui utilise Android Support Library.

myproject/libs/Android-support-v4.jar 
3rdpartylib/libs/Android-support-v4.jar

Lorsque j'ai mis à jour la bibliothèque avec une version plus récente, la bibliothèque de support a également été mise à jour, mais pas dans mon projet. Après cela, je ne pouvais plus lancer l'application avec cette erreur. Après avoir fait en sorte que les deux bibliothèques soient identiques (copie), tout était ok.

3
luben

Dans Eclipse, cochez Propriétés> Chemin de construction Java> Source et voyez si le dossier de sortie est toujours le dossier par défaut (/ bin/classes).

Pour moi, c'était un problème en raison du plugin maven: chaque fois que je clique avec le bouton droit de la souris> Maven> Mettre à jour le projet ...> Ok, le dossier de sortie du dossier src est remplacé par target/classes, ce qui provoque la ClassNotFoundException.

2
Cristan

J'ai eu ce problème ces deux derniers jours. Je pouvais exécuter mon application sur tous les environnements de test, exporter une version apk, l'installer et l'exécuter sur tous les environnements de test, mais lorsque j'ai téléchargé l'apk sur le Play Store et que je l'ai installé à partir du Play Store, l'application se ferait à proximité en lançant ClassNotFoundException. . Il s'est avéré que dans mon projet, j'envoyais des données de formulaire en plusieurs parties à une API Web. Pour ce faire, certaines bibliothèques externes sont nécessaires. Au début, je viens d'inclure tous les mim4j, httpclient et httpcore.jars (s'avère être un grand nombre de pots). 

Après avoir supprimé la quasi-totalité d'entre eux un par un et vu si mon projet se poursuivrait, il ne me restait plus qu'un seul pot C'ÉTAIT ACTUELLEMENT NÉCESSAIRE . L'enlèvement consiste à supprimer tous les fichiers JAR qu'il n'est pas nécessaire de construire. Ensuite, j'ai testé l'application et il s'est avéré que j'avais besoin d'ajouter l'un des fichiers jar car ses ressources étaient référencées par celles requises pour la construction du projet. Assurez-vous de tester toutes les fonctions de votre application après la suppression des fichiers JAR.

Ensuite, j’ai parcouru tous les projets de bibliothèque que j’étais en train d’inclure, puis j'ai cliqué avec le bouton droit sur project -> properties -> Java build path -> order and export et coché toutes les cases POUR CHAQUE BIBLIOTHÈQUE et MON PROPRE PACKAGE .

Ensuite, j’ai fait un project -> clean sur chaque projet inclus et le projet principal.

Ensuite, j'ai exporté l'apk et mis le paquet en place pour les tests bêta et cela a finalement fonctionné sur les appareils des utilisateurs.

1
Kyle O.

Aucune des réponses ci-dessus n'a fonctionné pour moi, contribuant ainsi à ma solution si cela va laisser quelques heures à qui que ce soit à l'avenir.

Ce qui a apparemment fonctionné pour moi a été de supprimer un fichier jar lib v4 de support supplémentaire dans mon projet.

Après avoir mis à jour la bibliothèque de support via des outils Android, je devais corriger les incohérences de jar dans de nombreuses bibliothèques que j'utilise et les diriger vers le même jar dans le dossier Android-sdks.

Je l'ai accidentellement ajouté à mon projet également et, pour une raison quelconque, ma classe MainActivity n'a pas été trouvée à l'exécution, car le fichier jar se trouvait également dans la bibliothèque Android-support-v7-appcompat que j'utilisais.

Aucune erreur sur Eclipse du tout.

J'ai retiré le fichier jar de mon projet et vérifié le fichier jar dans la bibliothèque v7 appcompat de l'onglet d'exportation afin qu'il soit également disponible pour mon projet. Voilà, l'application fonctionne.

1
Jjang

J'ai rencontré ce problème et il a été corrigé avec this .

Je n'avais pas vérifié une bibliothèque externe sous "Commander et exporter" et je recevais l'erreur.

1
Abhinav

J'ai fait un copier/coller des dossiers suivants dans un nouveau projet, en conservant le même nom de package , et je l'ai résolu:

  • ../src/debug
  • ../src/main
  • ../src/release

Et finalement j'ai ajouté les dépendances de fichiers build.gradle.

GL

0
IT Developers

Grâce au contrôle de version, j'ai remarqué que je n'avais pas ces lignes dans mon fichier XML .classpath:

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>

Celles-ci ont causé la classe non trouvée pour l'activité principale.

0
NoBugs

J'ai le même quand je fais des tests Robolectric. En fait, test classpath inclut le fichier jar avec Android.com.Activity, qui n'a pas été créé. Dans mon cas, une solution consiste à rétrograder Java_HOME à partir de la 10ème version du JDK, qui est utilisée dans le projet Maven.

0
user9783351

Je viens de rencontrer ce problème. Il s’avère que c’est parce que j’ai déplacé mon MainActivity dans un nouveau package.

Ce que j'ai fait était de le déplacer de

com.example.MainActivity

dans

Activity

dans mon manifeste, cela ressemblait à ceci:

 Android:name="Activity.MainActivity"`

Résolu en le replaçant dans l'emballage d'origine. Vous pouvez également le résoudre en renommant correctement vos paquets:

Exemple: com.example.Activity.MainActivity

J'espère que ça aide quelqu'un.

0
nedaRM