没有';“找不到类”;“android.support.multidex.MultiDexApplication”;在路径上:DexPathList

没有';“找不到类”;“android.support.multidex.MultiDexApplication”;在路径上:DexPathList,android,gradle,dex,android-multidex,Android,Gradle,Dex,Android Multidex,我正在我的应用程序上尝试新的应用程序,到目前为止,我已经成功地正确编译了我的应用程序,但在运行它时,我遇到以下异常: java.lang.RuntimeException:无法实例化应用程序android.support.multidex.MultiDexApplication:java.lang.ClassNotFoundException:在NativeLibrary目录的路径:DexPathList[[zip文件”//data/app/me.myapp.main-2.apk]上未找到类“a

我正在我的应用程序上尝试新的应用程序,到目前为止,我已经成功地正确编译了我的应用程序,但在运行它时,我遇到以下异常:

java.lang.RuntimeException:无法实例化应用程序android.support.multidex.MultiDexApplication:java.lang.ClassNotFoundException:在NativeLibrary目录的路径:DexPathList[[zip文件”//data/app/me.myapp.main-2.apk]上未找到类“android.support.multidex.MultiDexApplication”=[/data/app lib/me..main-2,/vendor/lib,/system/lib]]
在android.app.LoadedApk.makeApplication(LoadedApk.java:507)上
位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:139)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5086)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”//data/app/me.myapp.main-2.apk“],NativeLibraryDirectory=[/data/app-lib/me.myapp.main-2,/vendor/lib,/system/lib]上未找到类“android.support.multidex.MultiDexApplication”
位于dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:497)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:457)
位于android.app.Instrumentation.newApplication(Instrumentation.java:998)
在android.app.LoadedApk.makeApplication(LoadedApk.java:502)上
这是我的gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.0"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 21
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

repositories {
    mavenCentral()
    mavenLocal()
}


dependencies {
    compile 'com.android.support:multidex:1.0.0'
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:21.0.0'
    compile 'com.android.support:support-v13:21.0.0'
    compile 'com.android.support:appcompat-v7:21.0.0'
}
以及我的AndroidManifest.xml:


我不明白问题出在哪里。我想我正在按照文档做所有事情。我还缺少什么吗?我确保已从SDK管理器安装了最新的支持库和repo。

我的配置:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.14.+' // 0.14.1, 2014-11-6
    }
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
}

android {
    compileSdkVersion = 21
    buildToolsVersion = "21.1.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
        multiDexEnabled true
    }
}
不幸的是,我也有同样的问题。但我发现了一个奇怪的情况:

构建/中间产品/索引/调试:

-rw-rw-r--  1 andrew andrew  2221176 Nov  6 20:18 classes2.dex
-rw-rw-r--  1 andrew andrew  8357596 Nov  6 20:18 classes.dex
解压apk,生成/输出/apk:

-rw-rw-r-- 1 andrew andrew 8357596 Nov  6 20:18 classes2.dex
-rw-rw-r-- 1 andrew andrew 2221176 Nov  6 20:18 classes.dex
在apk中,classes.dex的主要类应该比classes2.dex大,但不是。我也会使用dex2jar&解压jar来检查类,应用程序类不在classes.dex中,相反,它在classes2.dex中

不过,我应该已经修复了它。这是我修补的android gradle插件,你可以试试:

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://github.com/yongjhih/android-gradle-plugin.m2/raw/master/' }
    }
    dependencies {
        classpath 'com.infstory.tools.build:gradle:0.14.+'
    }
}
该修补程序位于: 或

问题:

官方补丁已经被合并,我想它可能会在下一个版本中修复

已被修正为0.14.2(2014/11/10)。(从)


我使用了最新的Android Studio并按照官方文档添加了对multidex的支持。但我仍然遇到了同样的异常。我花了很多时间解决它。最后,我发现原因是我启用了“Java异常断点-任何异常”和“异常断点-当抛出任何异常时”.我禁用它们后,应用程序运行没有问题


只需遵循有关multidex的官方文档即可。它是有效的。

设置应用程序项目以使用multidex配置需要对应用程序项目进行以下修改,具体取决于应用程序支持的最低Android版本

如果minSdkVersion设置为21或更高,则只需在模块级build.gradle文件中将multiDexEnabled设置为true,如下所示:

android {
    defaultConfig {
        ...
        minSdkVersion 21 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}
android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}
但是,如果minSdkVersion设置为20或更低,则必须按如下方式使用multidex支持库:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>
public class MyApplication extends MultiDexApplication { ... }
  • 修改模块级build.gradle文件以启用multidex,并将multidex库添加为依赖项,如下所示:

    android {
        defaultConfig {
            ...
            minSdkVersion 21 
            targetSdkVersion 26
            multiDexEnabled true
        }
        ...
    }
    
    android {
        defaultConfig {
            ...
            minSdkVersion 15 
            targetSdkVersion 26
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.1'
    }
    
  • 根据是否重写应用程序类,执行以下操作之一:

    • 如果不重写应用程序类,请编辑清单文件以在标记中设置android:name,如下所示:

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.myapp">
          <application
                  android:name="android.support.multidex.MultiDexApplication" >
              ...
          </application>
      </manifest>
      
      public class MyApplication extends MultiDexApplication { ... }
      
    • 或者,如果确实重写了应用程序类,但无法更改基类,则可以重写attachBaseContext()方法并调用MultiDex.install(此)以启用MultiDex:

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

我最近遇到了这个问题。尽管我的配置没有改变,但这个错误开始出现。我尝试了所有建议的解决方案,包括删除虚拟设备和创建新设备

然而,我确实注意到,如果我构建了一个APK并将其拖到emulator中进行安装,它就可以正常工作


最后清理项目并重新运行,然后它工作了。

解决方案对我没有帮助,因为我使用的是jetpack版本的ie androidx.libraries

跟随官方。

我不得不把名字改成androidx…Multidex

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

...

希望它能帮助其他希望在jetpack中添加multidex的人。

非常奇怪,我收到了相同的错误消息,但在我修复了一些渐变线后,它起了作用。也许它能帮助某些人:

Project build.gradle:

发件人:

致:

在模块build.gradle中:

发件人:

致:


我的代码中没有其他更改,但固定版本也适用于4.x模拟器。只更改了**标记的行。

在我的情况下,通过在清单中的代码下方进行更改来解决此问题

android:name="android.support.multidex.MultiDexApplication"

这对我有用


文件->将项目与Grandle文件同步对我来说,答案是切换到androidx版本

android:name=“androidx.multidex.MultiDexApplication”

implementation“androidx.multidex:m
android:name="android.support.multidex.MultiDexApplication"
android:name="androidx.multidex.MultiDexApplication"
Delete ./gradle .idea and build directory
Clean project
Uninstall app if already install on device and again install
buildscript {
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'

    }
}
android:name=".MainApplication"
android:name="android.support.multidex.MultiDexApplication"