J'ai mis à jour les bibliothèques AppCompat vers 24.2.1 et le SDK sous Android 7 dans mon installation Eclipse . Depuis, je ne suis plus en mesure d'exécuter mes applications . J'apprécie que vous puissiez m'aider un peu. avec ça...
E/AndroidRuntime(17555): Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/os/BuildCompat;
E/AndroidRuntime(17555): at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:196)
E/AndroidRuntime(17555): at Android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.Java:181)
E/AndroidRuntime(17555): at Android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.Java:521)
E/AndroidRuntime(17555): at Android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.Java:71)
E/AndroidRuntime(17555): at com.ryosoftware.calendareventsnotifier.MainActivity.onCreate(MainActivity.Java:844)
E/AndroidRuntime(17555): at Android.app.Activity.performCreate(Activity.Java:5990)
E/AndroidRuntime(17555): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
E/AndroidRuntime(17555): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2311)
E/AndroidRuntime(17555): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2420)
E/AndroidRuntime(17555): at Android.app.ActivityThread.access$900(ActivityThread.Java:154)
E/AndroidRuntime(17555): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1321)
E/AndroidRuntime(17555): at Android.os.Handler.dispatchMessage(Handler.Java:102)
E/AndroidRuntime(17555): at Android.os.Looper.loop(Looper.Java:135)
E/AndroidRuntime(17555): at Android.app.ActivityThread.main(ActivityThread.Java:5294)
E/AndroidRuntime(17555): at Java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(17555): at Java.lang.reflect.Method.invoke(Method.Java:372)
E/AndroidRuntime(17555): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:904)
E/AndroidRuntime(17555): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:699)
E/AndroidRuntime(17555): Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.v4.os.BuildCompat" on path: DexPathList[[Zip file "/data/app/com.ryosoftware.calendareventsnotifier-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/AndroidRuntime(17555): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:56)
E/AndroidRuntime(17555): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:511)
E/AndroidRuntime(17555): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:469)
E/AndroidRuntime(17555): ... 18 more
E/AndroidRuntime(17555): Suppressed: Java.lang.ClassNotFoundException: Android.support.v4.os.BuildCompat
E/AndroidRuntime(17555): at Java.lang.Class.classForName(Native Method)
E/AndroidRuntime(17555): at Java.lang.BootClassLoader.findClass(ClassLoader.Java:781)
E/AndroidRuntime(17555): at Java.lang.BootClassLoader.loadClass(ClassLoader.Java:841)
E/AndroidRuntime(17555): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:504)
E/AndroidRuntime(17555): ... 19 more
E/AndroidRuntime(17555): Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
Vous obtenez NoClassDefFoundError & ClassNotFoundException
NoClassDefFoundError en Java survient lorsque la machine virtuelle Java n'est pas capable de trouver une classe particulière au moment de l'exécution qui était disponible à temps de compilation.
FYI
Vous utilisez Eclipse. Android Studio est un moyen beaucoup plus simple de développer pour Android si vous parvenez à le maîtriser. Pour les développeurs qui utilisent Eclipse, la migration vers Studio est un cauchemar pour eux. Eclipse est morte (mon opinion personnelle).
Pour votre option NoClassDefFoundError, accédez à l'option rebuild sous Project > Clean
, puis sélectionnez le projet que vous souhaitez nettoyer .Puis redémarrez votre Eclipse, puis réexécutez-le.
Solutions
Vérifiez que votre chemin d'accès aux classes contient ce fichier jar (AppCompat), si votre chemin d'accès aux classes ne contient pas le fichier, ajoutez simplement cette classe dans votre chemin de classe.
Vous devez utiliser Android Studio au lieu de Eclipse. Lis
L'identifiant de dépendance de script de génération Gradle pour cette bibliothèque est le suivant:
com.Android.support:appcompat-v7:24.2.1
Alors Clean-Rebuild-Restart IDE
Dans mon cas
c'est du travail
La raison en est une autre moche si vous essayez de joindre un débogueur avec un point d'arrêt sur quelque chose qui se produit pendant la création d'Activité.
J'ai ajouté deux classes dans mon package Java et son fonctionnement fonctionne bien, conservez les deux classes comme indiqué dans l'image ci-dessous:
AsyncTaskCompat.Java
public class AsyncTaskCompat {
/**
* Executes the task with the specified parameters, allowing multiple tasks to run in parallel
* on a pool of threads managed by {@link Android.os.AsyncTask}.
*
* @param task The {@link Android.os.AsyncTask} to execute.
* @param params The parameters of the task.
* @return the instance of AsyncTask.
*/
public static <Params, Progress, Result> AsyncTask<Params, Progress, Result> executeParallel(
AsyncTask<Params, Progress, Result> task, Params... params) {
if (task == null) {
throw new IllegalArgumentException("task can not be null");
}
if (Build.VERSION.SDK_INT >= 11) {
// From API 11 onwards, we need to manually select the THREAD_POOL_EXECUTOR
AsyncTaskCompatHoneycomb.executeParallel(task, params);
} else {
// Before API 11, all tasks were run in parallel
task.execute(params);
}
return task;
}
}
AsyncTaskCompatHoneycomb.Java
class AsyncTaskCompatHoneycomb {
static <Params, Progress, Result> void executeParallel(
AsyncTask<Params, Progress, Result> task, Params... params) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
}
}
Dans mon cas, l'erreur était due à l'utilisation de la bibliothèque entière gms: play-services. Certains composants de gms: play-services font référence à des versions autres que celles spécifiées explicitement par vous.
Utilisez uniquement les services de jeu requis, par exemple: 'com.google.Android.gms: play-services-analytics: 10.2.0' au lieu de 'com.google.Android.gms: play-services: 10.2.0' .
Voir aussi: Toutes les bibliothèques com.Android.support doivent utiliser exactement la même spécification de version
Bonne lecture: https://blog.mindorks.com/avoiding-conflicts-in-Android-gradle-dependencies-28e4200ca235
public class MApplication extends Application {
@Override
protected void attachBaseContext(Context paramContext) {
super.attachBaseContext(paramContext);
Helper.install(MApplication.this);
}
}
Ici, nous substituons la méthode attachBaseContext () pour ajouter la ligne de code Helper.install(MApplication.this);
.
Remarque: comme certaines classes du SDK doivent maintenant être chargées avant de pouvoir être utilisées, le processus de chargement est effectué par Helper.install (). Le développeur doit appeler cette méthode avant d'utiliser une fonctionnalité du SDK. Sinon, des accidents inattendus risquent de se produire . référence
Sauf si l'application se bloque avec Java.lang.NoClassDefFoundError: Echec de la résolution de: ....