java.lang.NoClassDefFoundError: Не удалось разрешить: Landroid/support/v4/os/BuildCompat
Я обновил библиотеки AppCompat до 24.2.1 и SDK до Android 7 в моей установке Eclipse. С тех пор я не могу запускать какие-либо свои приложения. Я ценю, если вы можете помочь с этим немного...
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
5 ответов
Вы получаете NoClassDefFoundError & ClassNotFoundException
NoClassDefFoundError в Java возникает, когда виртуальная машина Java не может найти определенный класс во время выполнения, который был доступен во время компиляции.
FYI
Вы используете Eclipse. Android Studio - гораздо более простой способ разработки для Android, если вам удастся освоить его. Для разработчиков, которые использовали Eclipse, переход на Studio - это кошмар для них. Затмение умерло (Мое личное мнение).
Для вашей проблемы NoClassDefFoundError перейдите к параметру пересобрать в Project > Clean
и затем выберите проект, который вы хотите очистить. Затем перезапустите Eclipse и запустите снова.
Решения
Проверьте, что ваш classpath содержит этот jar (AppCompat), если ваш classpath не содержит jar, просто добавьте этот класс в ваш classpath.
Вы должны использовать Android Studio вместо Eclipse. Читать
Идентификатор зависимости скрипта сборки Gradle для этой библиотеки выглядит следующим образом:
com.android.support:appcompat-v7:24.2.1
В моем случае
- чистый проект
- сделать недействительным и перезапустить
это работает
Другая неприятная причина, по которой это может быть вызвано, заключается в том, что вы пытаетесь подключить отладчик с точкой останова к тому, что происходит во время создания Activity.
Я добавил два класса в свой пакет Java, и он работает нормально, оставьте оба класса, как показано на рисунке ниже:
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);
}
}
В моем случае ошибка была вызвана использованием всей библиотеки gms: play-services. Некоторые компоненты gms: play-services ссылаются на версии, отличные от указанных вами явно.
Используйте только те обязательные игровые сервисы, которые необходимы, например: "com.google.android.gms:play-services-analytics:10.2.0" вместо "com.google.android.gms:play-services:10.2.0".,
Также смотрите: Все библиотеки com.android.support должны использовать одну и ту же спецификацию версии.
Полезное чтение: https://blog.mindorks.com/avoiding-conflicts-in-android-gradle-dependencies-28e4200ca235
Обновите реализацию com.google.android.gms:play-services-maps в Gradle до более новой версии.
Это работает для меня.
У меня была очень похожая проблема, проблема заключалась в использовании старого (устаревшего) пакета, более 4 лет без обслуживания. Проверьте недавно добавленные пакеты и проверьте, совместимы ли они с вашим Android SDK.
В моем случае у меня сработало просто очистка и перестройка проекта.
public class MApplication extends Application {
@Override
protected void attachBaseContext(Context paramContext) {
super.attachBaseContext(paramContext);
Helper.install(MApplication.this);
}
}
Здесь мы переопределяем метод attachBaseContext(), чтобы добавить Helper.install(MApplication.this);
строка кода.
Примечание. Поскольку некоторые классы SDK теперь необходимо загрузить перед использованием, процесс загрузки выполняется с помощью Helper.install(). Разработчик должен вызвать этот метод перед использованием любой функциональности SDK. Невыполнение этого требования приведет к неожиданным сбоям. ссылка
Если приложение не падает с java.lang.NoClassDefFoundError: Ошибка разрешения:....