【问题标题】:java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/os/BuildCompatjava.lang.NoClassDefFoundError:解析失败:Landroid/support/v4/os/BuildCompat
【发布时间】:2017-01-28 19:23:15
【问题描述】:

在我的 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

【问题讨论】:

  • 检查此项 1. 右键单击​​您的项目并选择属性。 2. 从左侧菜单中选择 Java Build Path。 3. 选择订单和导出选项卡。 4. 从列表中确保您添加到项目中的库或外部 jar 被选中。 5. 最后,清理您的项目并运行。

标签: android android-appcompat


【解决方案1】:

您将收到 NoClassDefFoundErrorClassNotFoundException

Java 中的 NoClassDefFoundError 在 Java 虚拟机不存在时出现 能够在运行时找到一个特定的类,该类在 编译时间。

仅供参考

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

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

解决方案

检查您的类路径是否包含该 jar (AppCompat),如果您的类路径 不包含 jar 然后只需将该类添加到您的类路径中。

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

  1. Support Library Features

此库的 Gradle 构建脚本依赖标识符如下:

com.android.support:appcompat-v7:24.2.1

然后Clean-Rebuild-Restart IDE

【讨论】:

  • 感谢您的评论。最后解决了包括正确的 appcompat 库。不幸的是,我目前无法将所有项目迁移到 AndroidStudio。
  • @IntelliJAmiya 你好,我在 Android Studio 中遇到了同样的问题,我已经在我的主应用程序和 aar 应用程序中导入了这个库。
【解决方案2】:

就我而言

  1. 清理项目
  2. 无效并重新启动

这是工作

【讨论】:

    【解决方案3】:

    造成这种情况的另一个丑陋原因是,如果您试图在 Activity 创建期间发生的事情上附加带有断点的调试器。

    【讨论】:

    • 对我来说,这是一个与此类似的不同错误,我也找不到 appcompat 类,但是在迁移到 AndroidX 后,问题是我自动添加的 appcompat 依赖项太旧了。 (版本 1.0.0)。当我更新到 1.2.0 版本时,问题解决了:implementation "androidx.appcompat:appcompat:1.2.0"
    【解决方案4】:

    我在我的 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);
    }
    }
    

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:
        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: Failed resolution of:....

        【讨论】:

          【解决方案7】:

          将 gradle 中的 implementation com.google.android.gms:play-services-maps 更新到更新的版本。

          这对我有用。

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                猜你喜欢
                • 2017-04-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-05-04
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多