我已经在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
答案 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 。阅读
此库的Gradle构建脚本依赖项标识符如下:
com.android.support:appcompat-v7:24.2.1
然后 Clean-Rebuild-Restart IDE
答案 1 :(得分:9)
就我而言
它的工作
答案 2 :(得分:3)
我在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);
}
}
答案 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)
就我而言,只需清理并重建该项目对我有用。