Android Studio: ClassNotFoundException
j'ai été occupé avec mon application pendant plus d'une semaine, quand soudain:
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.access0(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.access0(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>
ce qui se passait après quelques problèmes avec mon R.java (l'identifiant de la vue où incorrect), après la reconstruction de la projet de ce problème dans les parages
j'ai déjà essayé L'Invalidate Cashes / restart dans le fichier IDE-menu
mise à Jour 14:51: c'est mon compilateur.fichier 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 MainActivity.java file (srcmainjavanltestmyappMainActivity.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));
}
}
}
16 réponses
Fermer android studio. Accédez au dossier du projet. Supprimer tous les fichiers relatifs à intelliJ (Android Studio) I. e
- .idée (dossier)
- *.l'imi (fichiers)
assurez-vous également que le nom du paquet correspond au paquet dans le manifeste android.XML.
puis réimporter le projet.
cela m'est arrivé parce que j'ai renommé le paquet root et IntelliJ (android studio) ne l'a pas suivi.
j'ai créé un nouveau projet dans Android studio et tout copié à partir de l'ancien dans le nouveau. Maintenant, il fonctionne à nouveau, sans aucun(!) des modifications du code.
j'ai eu le même problème, il s'avère que j'ai foiré avec une certaine méthode finale.
Assurez-vous de vérifier dalvikvm
les erreurs dans le logcat de sortie avant L'EXCEPTION fatale. Je vais vous donner quelques indications sur le problème. Dans mon cas, j'avais une méthode finale (isResumed
) qui était déjà défini dans la classe de base causant le crash d'exécution. Je ne me plaignais pas au moment de la compilation.
Vérifier les logs:
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]]
...
je suis tombé sur cette. Mon application fonctionnait très bien et un jour, il a commencé à fonctionner dans ces ClassNotFoundExceptions. Mon code n'avait pas changé du tout.
autant que je puisse dire, il a fini par être un bug dans la construction D'Android Studio. J'avais récemment mis à jour à la dernière version sur le canal canari.
afin de revenir à une version antérieure sur le canal dev a des choses à travailler de nouveau:
- Aller dans Paramètres / l'Apparence Et le Comportement / Système Paramètres / Mise À Jour
- passez à Dev Channel et vérifiez maintenant.
j'ai eu le même problème. Je me suis souvenu, que précédemment" pas assez de mémoire " message a été montré et le processus de téléchargement de l'application ne pouvait pas finir, s'arrêtant sur dexDebug avec erreur. Puis j'ai libéré assez de mémoire, mais l'application a commencé avec ClassNotFoundException.
La solution qui a fonctionné pour moi était de supprimer tous les dossiers "construire" dans le projet. Je suppose que gradle peut mettre des fichiers corrompus pour" construire " dossier quand il n'y a pas assez de mémoire.
vous pouvez vérifier le mécanisme Multidex. La raison peut être des nombres de méthode débordent.
Ajouter MultiDex.installer(ce); à votre Demande:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
-
afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex' // enable multidex } }
au grad de votre module app.construire
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>
on dirait que vous avez une typographie d'espace de noms quelque part. Recherche pour MyApp
et remplacez myapp
.
Votre Activité Principale.java est exclu de la compilation, donc cette classe n'est pas incluse .apk. Supprimer la ligne:
<file url="file://$PROJECT_DIR$/src/nl/test/MyApp.java" />
à partir de la excludeFromCompile section de la .idée/compilateur.fichier xml (ou vous pouvez le faire à partir des paramètres IDE).
je ne sais pas ce qui vous aidera..de toute façon, essayez d'utiliser le thème de l'application comme @style/Thème.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>
Comme je peux le voir dans votre Journal ,
nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib
pour cela vous pouvez changer votre lib
libs
, j'ai fait ceci et cela a résolu mon problème.
vous verriez une marque d'erreur sur le projet pour résoudre ce qui va aux propriétés du projet et à java build path, supprimez toutes les bibliothèques de là . Vous ne verrez pas cette erreur à nouveau. :)
lorsque vous utilisez Android Studio, veuillez vous assurer que le dossier "src" qui contient votre classe Java est marqué "Source Root". Sinon, il ne sera pas dans L'APK.
dans mon cas c'était une déclaration manifeste de android.app.Application
dans le projet et le code réel dans le module.
C'est arrivé à moi aussi, et aucun des offres d'ici aidé. Mon problème a aussi été causé par le fait que j'ai renommé le paquet racine. Mon ClassNotFoundException montrait une DexPathList qui était l'ancien chemin vers mon paquet. J'ai trouvé que la cause était dans mon Script Gradle appelé "construire.gradle (Module: app) "j'avais une ligne disant: applicationId"ancien nom de paquet". J'ai changé le nom du paquet, j'ai fait une synchronisation de gradle, et tout a marché.
si vous créez une bibliothèque android, vous pouvez tout simplement avoir oublié d'importer votre bibliothèque dans votre construction d'application.gradle avec l' implementation project
mot clé :
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'
}
Espérons que cela aide :)
Construction Menu et Nettoyage De Projet.
la solution ci-dessus a parfaitement fonctionné pour moi.