web-dev-qa-db-fra.com

Android Studio: ClassNotFoundException

j'étais occupé avec mon application depuis plus d'une semaine, quand tout à coup:

11-12 07:59:17.860    1653-1653/nl.test.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{nl.test.MyApp/nl.test.MyApp.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[Zip file "/data/app/nl.test.myapp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib]]
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2137)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
        at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
        at Android.os.Handler.dispatchMessage(Handler.Java:99)
        at Android.os.Looper.loop(Looper.Java:137)
        at Android.app.ActivityThread.main(ActivityThread.Java:5103)
        at Java.lang.reflect.Method.invokeNative(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:525)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: Java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[Zip file "/data/app/nl.test.MyApp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.MyApp-2, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:53)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
        at Android.app.Instrumentation.newActivity(Instrumentation.Java:1061)
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2128)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
        at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
        at Android.os.Handler.dispatchMessage(Handler.Java:99)
        at Android.os.Looper.loop(Looper.Java:137)
        at Android.app.ActivityThread.main(ActivityThread.Java:5103)
        at Java.lang.reflect.Method.invokeNative(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:525)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
        at dalvik.system.NativeStart.main(Native Method)

voici mon AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="nl.test.myapp"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="7"
        Android:targetSdkVersion="19" />

    <uses-permission Android:name="Android.permission.INTERNET" />

    <application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name="nl.test.myapp.MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity Android:name=".welcomewizard.WelcomeWizardIntroPage"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage1"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage2"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage3"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardPage4"
            Android:label="@string/app_name" />

        <activity Android:name=".welcomewizard.WelcomeWizardFinishPage"
            Android:label="@string/app_name" />

        <activity Android:name=".CompanySelectorActivity"
            Android:label="@string/compsel_actionbarlabel" />
    </application>

</manifest>

cela se passait après quelques problèmes avec mon R.Java (les identifiants pour les vues étaient incorrects), après la reconstruction du projet, ce problème est survenu

j'ai déjà essayé l'invalidate Cashes/restart dans le IDE File-menu

Mise à jour 14:51 : Voici mon fichier compiler.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <option name="DEFAULT_COMPILER" value="Javac" />
    <resourceExtensions />
    <wildcardResourcePatterns>
      <entry name="!?*.Java" />
      <entry name="!?*.form" />
      <entry name="!?*.class" />
      <entry name="!?*.groovy" />
      <entry name="!?*.scala" />
      <entry name="!?*.flex" />
      <entry name="!?*.kt" />
      <entry name="!?*.clj" />
    </wildcardResourcePatterns>
    <annotationProcessing>
      <profile default="true" name="Default" enabled="false">
        <processorPath useClasspath="true" />
      </profile>
    </annotationProcessing>
  </component>
</project>

Mon fichier MainActivity.Java (\ src\main\Java\nl\test\monApp\MainActivity.Java):

package nl.test.myapp;

import Android.annotation.TargetApi;
import Android.content.Intent;
import Android.os.Build;
import Android.os.Bundle;
import Android.support.v7.app.ActionBarActivity;
import Android.view.Menu;
import Android.widget.RelativeLayout;

import nl.test.myapp.welcomewizard.WelcomeWizardIntroPage;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setBackground(R.drawable.background_grey);

        Intent intent = new Intent(this, WelcomeWizardIntroPage.class);
        startActivity(intent);
        finish();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setBackground(int drawable){
        int currentApiVersion = Android.os.Build.VERSION.SDK_INT;
        if(currentApiVersion >= Android.os.Build.VERSION_CODES.JELLY_BEAN){
            RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_main);
            layout.setBackground(getResources().getDrawable(drawable));
        }
    }
}
10
patrick

J'ai créé un nouveau projet dans le studio Android et ai copié le contenu de l'ancien projet dans le nouveau. Maintenant, cela fonctionne à nouveau, sans aucune modification (!) Du code.

5
patrick

Fermer le studio Android. Accédez au dossier du projet. Supprimer tous les fichiers en rapport avec intelliJ (Android Studio) i.e

  • .idea (dossier)
  • * .imi (fichiers)

Assurez-vous également que le nom du package correspond à celui du fichier manifest.xml Android.

Puis réimportez le projet.

Cela m'est arrivé parce que j'ai renommé le paquet racine et qu'IntelliJ (studio Android) ne détectait pas cela.

7
user2415486

J'ai couru dans cela. Mon application fonctionnait bien et un jour, elle a commencé à courir dans ces ClassNotFoundExceptions. Mon code n'a pas changé du tout.

Autant que je sache, cela a fini par être un bug dans la construction d'Android Studio. Je venais de mettre à jour la dernière version sur le canal des Canaries.

Le retour à une version plus ancienne sur le canal dev a remis les choses en marche:

  1. Allez dans Paramètres/Apparence & Comportement/Paramètres système/Mettre à jour
  2. Changez pour Dev Channel et vérifiez maintenant.
2
ktusznio

J'ai eu le même problème, mais je me suis trompé avec une méthode finale. Assurez-vous de vérifier les erreurs dalvikvm dans la sortie logcat avant FATAL EXCEPTION. Je vais vous donner quelques indices sur le problème. Dans mon cas, j'avais une méthode finale (isResumed) qui était déjà définie dans la classe de base - provoquant un blocage de l'exécution. Ne s'est pas plaint au moment de la compilation.

Vérifiez les journaux:

E/dalvikvm( 9984): Method Lcom/your/package/ui/SomeActivity;.isResumed overrides final Landroid/app/Activity;.isResumed
W/dalvikvm( 9984): failed creating vtable
...
D/AndroidRuntime( 9962): Shutting down VM
...
E/AndroidRuntime(10065): FATAL EXCEPTION: main
E/AndroidRuntime(10065): Process: com.yourpackage.ui, PID: 10065
E/AndroidRuntime(10065): Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.yourpackage.ui/com.yourpackage.ui.HomeActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.yourpackage.ui.HomeActivity" on path: DexPathList[[Zip file "/data/app/com.yourpackage.ui-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.yourpackage.ui-2, /vendor/lib, /system/lib]]
...
2
tdevaux

J'ai eu le même problème. Je me suis rappelé que le message "pas assez de mémoire" était affiché et que le processus de téléchargement de l'application ne pouvait pas s'achever. Ensuite, j'ai libéré suffisamment de mémoire, mais l'application a démarré avec ClassNotFoundException. 
La solution qui a fonctionné pour moi a été de supprimer tous les dossiers de «construction» du projet. Je suppose que Gradle peut mettre des fichiers corrompus dans le dossier "build" s’il n’ya pas assez de mémoire.

1
Denis

Vous pouvez vérifier le mécanisme Multidex. La raison peut être un dépassement du nombre de méthodes.

  1. Ajouter MultiDex.install (this); à votre application:

    @Override
    protected void attachBaseContext(Context base) {
         super.attachBaseContext(base);
         MultiDex.install(this);
    }
    
  2. et ajouter

    afterEvaluate {
       tasks.matching {
           it.name.startsWith('dex')
       }.each { dx ->
           if (dx.additionalParameters == null) {
               dx.additionalParameters = []
           }
           dx.additionalParameters += '--multi-dex' // enable multidex
       }
    }
    

dans le module gradle.build de votre application

1
Yisu Zhang

je ne sais pas si cela vous aidera. De toute façon, essayez d'utiliser le thème de l'application comme @ style/Theme.AppCompat..nous devons utiliser selon le forum des développeurs.

<application
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/Theme.AppCompat" >

       <activity
            Android:name=".MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
0
Manivannan

Cela m'est arrivé aussi, et aucun des messages affichés ici n'a aidé. Mon problème a également été causé par le fait que j'ai renommé le paquet racine. Mon ClassNotFoundException montrait un DexPathList qui était l'ancien chemin de mon paquet. J'ai trouvé que la cause était dans mon script Gradle appelé "build.gradle (Module: app)". J'avais une ligne disant: applicationId "ancien nom de package". J'ai changé cela pour le nouveau nom du paquet, j'ai fait une synchronisation graduelle et tout a fonctionné.

0
Bert Baker

On dirait que vous avez une typo d'espace de nom quelque part. Recherchez MyApp et remplacez-le par myapp.

0
Ε Г И І И О

Dans mon cas, il s'agissait d'une déclaration manifeste de Android.app.Application dans le projet et du code réel dans le module.

0
kreker
   try: 
   <activity
        Android:name=".MainActivity"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
0
TeeTracker

Comme je peux le voir dans votre log, 

nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib

Pour cela, vous pouvez changer votre lib en libs, j’ai fait cela et cela a résolu mon problème. 

vous verriez une marque d'erreur sur le projet à résoudre qui va dans les propriétés du projet et le chemin de génération Java, supprimez toutes les bibliothèques à partir de là. Vous ne verrez plus cette erreur. :)

0
Walking Code

Lorsque vous utilisez Android Studio, assurez-vous que le dossier "src" contenant votre classe Java est marqué comme "Racine source". Sinon, il ne sera pas dans l'APK.

0
Behnam Nikbakht

Si vous créez une bibliothèque Android, vous avez peut-être simplement oublié d'importer votre bibliothèque dans votre application build.gradle à l'aide du mot clé implementation project:

dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.12' implementation 'com.Android.support:design:27.0.2' implementation 'com.Android.support:mediarouter-v7:27.0.2' implementation project(':mylib-module:mymodule') implementation 'com.google.firebase:firebase-core:10.0.1' }

J'espère que cela t'aides :)

0
n3wbie

Allez à Build Menu et Clean Project .

La solution ci-dessus a parfaitement fonctionné pour moi.

0
Mohammad Naim Dahee

Votre MainActivity.Java étant exclue de la compilation, cette classe n'est pas incluse dans .apk. Supprimer la ligne:

<file url="file://$PROJECT_DIR$/src/nl/test/MyApp.Java" />

dans la section excludeFromCompile du fichier .idea/compiler.xml (ou vous pouvez le faire à partir de IDE paramètres).

La source

0
Kalai.G