Android ClassNotFoundException:未在路径

时间:2017-05-18 08:11:24

标签: java android

以下是我启动应用时收到的异常消息。

  

致命例外:主程序:net.johnhany.opencv3jniPID:10721   java.lang.RuntimeException:无法实例化活动   ComponentInfo {net.johnhany.opencv3jni / net.johnhany.opencv3jni.MainActivity}:   java.lang.ClassNotFoundException:没找到类   路径上的“net.johnhany.opencv3jni.MainActivity”:DexPathList [[zip文件]   “/data/app/net.johnhany.opencv3jni-1/base.apk"],nativeLibraryDirectories=[/data/app/net.johnhany.opencv3jni-1lib/arm,   / vendor / lib,/ system / lib]]   android.app.ActivityThread.performLaunchActivityActivityThread.java:2322)   在   android.app.ActivityThread.handleLaunchActivityActivityThread.java:2474)   在android.app.ActivityThread.ess $ 800(ActivityThread.java:144)at   android.app.ActivityThread $ H.handleMessageActivityThread.java:1359)at   android.os.Handler.sage(Handler.java:102)at   android.os.Looper.loopLooper.java:155)at   android.app.ActivityThread.mainActivityThread.java:5696)at   java.lang.reflect.Method.invokeNative Method)at   java.lang.reflect.Method.invokeMethod.java:372)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.runZygoteInit.java:1028)   在com.android.internal.os.Init.main(ZygoteInit.java:823)引起:   java.lang.ClassNotFoundException:没找到类   路径上的“net.johnhany.opencv3jni.MainActivity”:DexPathList [[zip文件]   “/data/app/net.johnhany.opencv3jni-1/base.apk"],nativeLibraryDirectories=[/data/app/net.johnhany.opencv3jni-1/lib/arm/vendor/lib,   / system / lib]]   dalvik.system.BaseDexClassLoader.findClassBaseDexClassLoader.java:56)   在java.lang.ClassLoader.loadClassClassLoader.java:511)at   java.lang.ClassLoader.loadClassClassLoader.java:469)at   android.app.Instrumentation.newActivityInstrumentation.java:1083)at   android.app.ActivityThread.performLaunchActivityActivityThread.java:2312)   在   android.app.ActivityThread.handleLaunchActivityActivityThread.java:2474)   在android.app.ActivityThread.ess $ 800(ActivityThread.java:144)at   android.app.ActivityThread $ H.handleMessageActivityThread.java:1359)   在android.os.Handler.sage(Handler.java:102)at   android.os.Looper.loopLooper.java:155)at   android.app.ActivityThread.mainActivityThread.java:5696)at   java.lang.reflect.Method.invokeNative Method)at   java.lang.reflect.Method.invokeMethod.java:372)at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.runZygoteInit.java:1028)   在com.android.internal.os.Init.main(ZygoteInit.java:823)抑制:   java.lang.ClassNotFoundException:net.johnhany.opencv3jni.ty at   java.lang.Class.classForNameNative方法)at   java.lang.BootClassLoader.Class(ClassLoader.java:781)at   java.lang.BootClassLoader.Class(ClassLoader.java:841)at   java.lang.ClassLoader.loadClassClassLoader.java:504)...还有13个   引起:java.lang.NoClassDefFoundError:找不到使用的类   引导类加载器;没有堆栈05-18 16:01:27.927 645-1928 /?   E / ActivityManager:App crashedProcess:net.johnhany.opencv3jni

8 个答案:

答案 0 :(得分:16)

使用multi dex解决了我的问题:

android {
defaultConfig {

    // Enabling multidex support.
    multiDexEnabled true
}
...
}
dependencies 
{
compile 'com.android.support:multidex:1.0.0'
}

如果您没有覆盖Application类,请编辑清单文件以在标记中设置android:name,如下所示:

<application
        android:name="android.support.multidex.MultiDexApplication" >
    ...
</application>

如果您覆盖Application类,请将其更改为扩展MultiDexApplication(如果可能),如下所示:

public class MyApplication extends MultiDexApplication

或者,如果您覆盖Application类但无法更改基类,则可以改为覆盖attachBaseContext()方法并调用MultiDex.install(this)以启用multidex:

public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}
}

答案 1 :(得分:6)

我在Android Studio中使用Instant Run并且发生了同样的错误,因为我正在安装在debug.apk文件夹中创建的outputs\apk并且它变得更小并且缺少类,因为它可能是即时运行的结果。

有人指出关闭即时运行但不是转动即时运行只是通过单击菜单中的Build->Build apk来构建apk并使用该apk进行测试。

答案 2 :(得分:2)

确保这个Diable preDexLibraries

app模块.gradle文件

android {
 dexOptions
            {
                preDexLibraries false
            }

}

答案 3 :(得分:1)

当应用程序无法找到启动器活动时,通常会发生此错误。

建议:

  1. 检查您的mainfest文件以获取正确的启动器活动

  2. 检查您的主要活动是从活动或Appcompatactivity扩展

  3. 清理项目并重新构建。

答案 4 :(得分:0)

这是我的解决方案: 1.将AndroidManifest中的应用程序名称更改为完整路径 2.清洁项目 3.重建项目 4.Build APK

答案 5 :(得分:0)

就我而言,我从模块级gradle文件中错误地删除了 apply插件:'kotlin-android'

再次放置后,它将重新开始工作。

答案 6 :(得分:0)

如果您使用的是 AndroidX,这是 MultiDex 库

implementation "androidx.multidex:multidex:2.0.1"

还有

defaultConfig {

        multiDexEnabled true
}

并使您的应用程序类继承自 MultiDexApplication

答案 7 :(得分:-2)

我曾经遇到过这个问题而且清楚地记得:

我的错误
我在不同的文件夹中创建了两个具有相同名称的项目。

我的解决方案
在发现这个我删除旧项目然后:
 1.清洁项目
 2.Rebuild
 3.Run