java.lang.ClassNotFoundException: 没有在路径上找到类".Application":DexPathList

3

我正在开发一个聊天应用程序,它在Android 21上运行良好,但在低于21的SDK版本(如18或19)会导致这个问题。

11-03 01:49:22.676 20966-20966/ E/AndroidRuntime: 致命异常: 主进程 进程: , PID: 20966 java.lang.RuntimeException: 无法实例化应用程序.Application: java.lang.ClassNotFoundException: 在路径上找不到类".Application": DexPathList[[zip file"/data/app/d-9.apk"],nativeLibraryDirectories=[/data/app-lib/-9,/vendor/lib,/system/lib]] at android.app.LoadedApk.makeApplication(LoadedApk.java:516) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4703) at android.app.ActivityThread.access$1600(ActivityThread.java:175) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5602) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: 在路径上找不到类"dev.karim.dardesh.Application": DexPathList[[zip file"/data/app/dev.karim.dardesh-9.apk"],nativeLibraryDirectories=[/data/app-lib/dev.karim.dardesh-9,/vendor/lib,/system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at android.app.Instrumentation.newApplication(Instrumentation.java:981) at android.app.LoadedApk.makeApplication(LoadedApk.java:511) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4703) at android.app.ActivityThread.access$1600(ActivityThread.java:175) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5602) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method)
并且我在应用程序类上覆盖了AttachBaseContext。
public class Application extends android.app.Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

我正在使用gradle文件中的:

multiDexEnabled true
    compile 'com.android.support:multidex:1.0.1'

这个Gradle文件:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"

    defaultConfig {
        applicationId "pakage.com"
        minSdkVersion 17
        targetSdkVersion 24
        versionCode 18
        versionName "18"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"


        jackOptions {
            enabled true
            additionalParameters('jack.incremental': 'true')
        }
    }

    compileOptions {
        incremental true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize '4096m'
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }



    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE-FIREBASE.txt'
    }




}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.firebase:firebase-client-android:2.3.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.android.support:recyclerview-v7:24.2.1'
    compile 'com.android.support:cardview-v7:24.2.1'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.android.support:support-v4:24.2.1'
    compile 'com.google.android.gms:play-services-ads:9.8.0'
    compile 'com.google.firebase:firebase-messaging:9.8.0'
    compile 'com.google.firebase:firebase-auth:9.8.0'
    compile 'com.google.android.gms:play-services:9.8.0'
    compile 'com.google.firebase:firebase-core:9.8.0'
    compile 'com.google.firebase:firebase-database:9.8.0'
    compile 'com.android.support:multidex:1.0.1'
    testCompile 'junit:junit:4.12'
    compile 'com.google.android:support-v4:r7'
}


apply plugin: 'com.google.gms.google-services'

此外,我的项目涉及Firebase实时数据库:
提示/这里没有任何解决方案:
请帮助我。

你是否已将MultiDexApplication类添加到你的应用程序元素中? - Zhang Xiang
1
嗨!你找到解决办法了吗?我也卡在同一个问题上。 - Benobab
3个回答

1

当我更新Android Studio到3.0时,遇到了同样的问题。如果你也是这样做的话,请使用2.3版本。对我有效!!


0

请查看这个扩展应用和 MultiDex 的指南:https://developer.android.com/studio/build/multidex.html

它说:

If you do override the Application class, change it to extend MultiDexApplication (if possible) as follows

这是我针对其他ClassNotFound和多dex问题的答案:为什么我的自定义ButtonRenderer不起作用?

API 21有所不同,因为:

Android 5.0 (API level 21) and higher uses a runtime called ART which natively supports loading multiple DEX files from APK files. ART performs pre-compilation at app install time which scans for classesN.dex files and compiles them into a single .oat file for execution by the Android device. Therefore, if your minSdkVersion is 21 or higher, you do not need the multidex support library.

-2

将你的类(Application)名称更改为另一个名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接