java.lang.NoClassDefFoundError:解析失败:Landroid / support / v4 / os / BuildCompat

时间:2016-09-20 18:33:34

标签: android android-appcompat

我已经在Eclipse安装中将AppCompat库更新为24.2.1,将SDK更新到Android 7。 从那以后,我无法运行任何应用程序。 如果你能帮助我,我感激不尽......

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

9 个答案:

答案 0 :(得分:35)

您正在 NoClassDefFoundError &的 ClassNotFoundException

  当Java虚拟机没有时,Java中会出现NoClassDefFoundError   能够在运行时找到特定的类,可用于   编译时间。

FYI

您正在使用Eclipse。 Android Studio 是一种更简单的Android开发方式,如果您能够掌握它的话。对于使用Eclipse的开发人员来说,迁移到Studio对他们来说是一场噩梦。 Eclipse已经死了(我个人意见)。

对于 NoClassDefFoundError 问题,请转到Project > Clean下的重建选项,然后选择要清理的项目。然后重新启动你的Eclipse再次运行。

<强>解决方案

  

检查你的classpath是否包含那个jar(AppCompat),如果是你的classpath   不包含jar然后只在类路径中添加该类。

您应该使用 Android Studio而不是Eclipse 。阅读

  1. Support Library Features
  2. 此库的Gradle构建脚本依赖项标识符如下:

    com.android.support:appcompat-v7:24.2.1
    

    然后 Clean-Rebuild-Restart IDE

答案 1 :(得分:9)

就我而言

  1. 清洁项目
  2. 无效并重新启动
  3. 它的工作

答案 2 :(得分:3)

我在java包中添加了两个类,并且它们都可以正常工作,请使两个类均如下图所示:

boundingRect

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);
}
}

答案 3 :(得分:2)

造成此问题的另一个丑陋的原因是,如果您尝试将带有断点的调试器附加到创建活动时发生的事情上。

答案 4 :(得分:0)

在我的情况下,错误是由于使用了整个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.0' 。

另见:All com.android.support libraries must use the exact same version specification

好读:https://blog.mindorks.com/avoiding-conflicts-in-android-gradle-dependencies-28e4200ca235

答案 5 :(得分:0)

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功能之前调用此方法。否则可能会导致意外崩溃。 reference

除非应用程序因java.lang.NoClassDefFoundError而崩溃:以下解决方案失败:....

答案 6 :(得分:0)

实现com.google.android.gms:play-services-maps 更新为较新的版本。

那对我有用。

答案 7 :(得分:0)

我有一个非常相似的问题,问题是使用了一个旧的(已弃用的)包装,超过4年没有维护。检查您已添加的软件包,并检查它们是否与您的Android SDK兼容。

答案 8 :(得分:0)

就我而言,只需清理重建该项目对我有用。