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));
}
}
}
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.
Fermer le studio Android. Accédez au dossier du projet. Supprimer tous les fichiers en rapport avec intelliJ (Android Studio) i.e
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.
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:
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]]
...
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.
Vous pouvez vérifier le mécanisme Multidex. La raison peut être un dépassement du nombre de méthodes.
Ajouter MultiDex.install (this); à votre application:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
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
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>
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é.
On dirait que vous avez une typo d'espace de nom quelque part. Recherchez MyApp
et remplacez-le par myapp
.
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.
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>
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. :)
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.
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 :)
Allez à Build Menu et Clean Project .
La solution ci-dessus a parfaitement fonctionné pour moi.
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).