Не нашел класс "андроид".поддержка.multidex.MultiDexApplication " на пути: DexPathList

Я пробую новый Поддержка MultiDex Мои приложения и до сих пор мне удалось правильно скомпилировать мое приложение, но при его запуске, я получаю следующее исключение:

java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me..main-2, /vendor/lib, /system/lib]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4382)
    at android.app.ActivityThread.access00(ActivityThread.java:139)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    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:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path: DexPathList[[zip file "/data/app/me.myapp.main-2.apk"],nativeLibraryDirectories=[/data/app-lib/me.myapp.main-2, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.Instrumentation.newApplication(Instrumentation.java:998)
    at 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-код:

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

Я не понимаю, в чем проблема. Думаю, я все делаю в соответствии с документацией. Есть что-то еще мне не хватает? Я убедился, что у меня есть последняя библиотека поддержки и РЕПО, установленный из менеджера SDK.

4 ответов


настройки:

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
    }
}

к сожалению, у меня такая же проблема. Но я обнаружил странную ситуацию:--6-->

build / intermediates/dex/debug:

-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, основные классы классов.dex должен быть больше classes2.Декс, но это не так. Я также dex2jar & unzip jar для проверки классов, класс приложения не существует в классах.Декс, его в 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.+'
    }
}

патч находится в: https://github.com/yongjhih/android-gradle-plugin/commit/9c2212e3b1b4c6e1f7b47f2086aba1903a6258bf или https://android-review.googlesource.com/#/c/113331/

выпуск:https://code.google.com/p/android/issues/detail?id=78761

официальный патч https://android-review.googlesource.com/#/c/113201/ это уже было объединено, я думаю, что это может быть исправлено в следующей версии.

уже исправлено 0.14.2 (2014/11/10). (от http://tools.android.com/tech-docs/new-build-system)

Release notes:

0.14.2 (2014/11/10)

Fix potential multi-dex issue where the dex files could be renamed during packaging, leading to the wrong main dex file being used.
Fix versionNameSuffix support
Fix BuildType.initWith to copy shrinkResources flag
setup default proguard rule file if none are provided (SDK/tools/proguard/proguard-android.txt)
BuildType.pseudoLocalesEnabled flag to include fake locales in apk.

Я использовал последнюю версию Android Studio и после официального документа, чтобы добавить поддержку multidex https://developer.android.com/studio/build/multidex.html . Но у меня все то же исключение. Я потратил много времени на ее решение. Наконец, я нашел причину, я включил " Java Exception Breakpoints-Any exception "и"Exception Breakpoints - When any is thrown". После того, как я отключил их, приложение работало без проблем.

просто следуйте официальному документу о multidex https://developer.android.com/studio/build/multidex.html . Это работает.


недавно у меня была эта проблема. Несмотря на отсутствие изменений в моей конфигурации, эта ошибка началась. Я попробовал все предлагаемые решения, включая удаление виртуального устройства и создание нового.

однако я заметил, что если я построил APK и перетащил его в эмулятор для установки, он работал нормально.

в конце очистки проекта и повторного запуска, а затем он работал.


настройка проекта приложения для использования многодексной конфигурации требует внесения следующих изменений в проект приложения в зависимости от минимальной версии Android, поддерживаемой приложением.

если minSdkVersion имеет значение 21 или выше, все, что вам нужно сделать, это установить multiDexEnabled в true в сборке уровня модуля.файл Gradle, как показано ниже:

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

однако, если minSdkVersion имеет значение 20 или ниже, необходимо использовать библиотеку поддержки multidex следующим образом:

  • измените сборку уровня модуля.файл gradle для включения multidex и добавления библиотеки multidex в качестве зависимости, как показано здесь:

    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>
      
    • если вы переопределите класс приложения, измените его для расширения MultiDexApplication (если это возможно) следующим образом:

      public class MyApplication extends MultiDexApplication { ... }
      
    • или если вы переопределяете класс приложения, но изменить базовый класс невозможно, то вместо этого вы можете переопределить метод attachBaseContext() и вызвать MultiDex.установите (это), чтобы включить multidex:

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