Не удалось найти класс «androidx.multidex.MultiDexApplication» по пути: DexPathList на нижнем API ‹= 19 устройств

Я пытаюсь добавить в свое приложение поддержку Multidex. Но я получаю сообщение об ошибке:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo: java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication" on path: DexPathList[[zip       file "/data/app/com.dfn.partner-2.apk"],nativeLibraryDirectories[/data/app-lib/se.android-2, /vendor/lib, /system/lib]]

У моего градиента есть:

defaultConfig {
   multiDexEnabled true
}

а также

depenencies {
   ...
   implementation 'androidx.multidex:multidex:2.0.1'
   ...
}

Мой AndroidManifest.xml имеет:

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

Что может быть не так?


person Vladyslav Panchenko    schedule 24.01.2019    source источник
comment
Похоже, он ищет версию библиотеки поддержки multidex для androidx. Кто-то еще может дать более полный ответ о том, что здесь происходит не так, но попробуйте изменить зависимость mutlidex на версию androidx androidx.multidex:multidex:2.0.1. Когда вы сделаете это, вам, вероятно, также потребуется обновить android:name вашего приложения в манифесте до androidx.multidex.MultiDexApplication.   -  person George Mulligan    schedule 24.01.2019
comment
@GeorgeMulligan Я ошибся в вопросе, я использую androidx.multidex.MultiDexApplication и 'androidx.multidex:multidex:2.0.1' в приложении и появляется ошибка   -  person Vladyslav Panchenko    schedule 24.01.2019
comment
@GeorgeMulligan Я просто пробовал разные варианты.   -  person Vladyslav Panchenko    schedule 24.01.2019
comment
Аналогичный вопрос есть здесь. Для вашего APK можете ли вы увидеть, находятся ли связанные с multidex классы за пределами основного файла dex (classes.dex) с помощью анализатора APK в Android Studio?   -  person George Mulligan    schedule 24.01.2019
comment
Вы использовали пользовательский класс приложения ??   -  person Md.ibrahim khalil    schedule 24.01.2019
comment
@Md.ibrahimkhalil да   -  person Vladyslav Panchenko    schedule 24.01.2019
comment
Смотрите ответ.   -  person Md.ibrahim khalil    schedule 24.01.2019


Ответы (5)


Я получил эту ошибку после добавления multidex, пока не очистил:

./gradlew clean

person weston    schedule 30.09.2019
comment
После того, как я добавил multidex от androidx, я получил его ошибку. Очистите проект, затем синхронизируйте проект с файлами Gradle, затем снова запустите, и это сработало. - person Jorge Gil; 07.10.2019

Я очистил проект:

Сборка > Очистить проект

а потом я пошел к:

Файл -> Недействительные кеши/Перезапуск

Скомпилируйте, теперь должно работать!

person itzo    schedule 29.10.2019
comment
Это сработало для меня. Делать их нужно именно в том порядке, как написано в ответе. - person Murat; 05.02.2021

Для уровня API ‹ 21 платформа использует среду выполнения Dalvik для выполнения кода приложения. В таких случаях библиотека multidex должна быть частью основного файла DEX вашего приложения, который затем может управлять доступом к дополнительным файлам DEX и содержащемуся в них коду.

В вашем случае похоже, что библиотека Multidex отсутствует в основном файле dex, и, следовательно, во время запуска ваше приложение выдает ошибку: java.lang.ClassNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication"

Вам нужно явно указать эти классы multidex либо в multiDexKeepFile, либо в multiDexKeepProguard, чтобы пометить их как требуемые в основном dex.

multiDexKeepFile

android {
    buildTypes {
        release {
            multiDexKeepFile file('multidex-main-dex-list.txt')
            ...
        }
    }
}

Содержимое multidex-main-dex-list.txt выглядит следующим образом:

androidx.multidex.MultiDexApplication

multiDexKeepProguard

android {
    buildTypes {
        release {
            multiDexKeepProguard file('multidex-main-dex-list.pro')
            ...
        }
    }
}

Содержимое multidex-main-dex-list.txt выглядит следующим образом:

-keep class androidx.multidex.MultiDexApplication

person nitika    schedule 20.05.2019
comment
Как ни странно, у меня не было мультидекса класса keep до перехода на библиотеки AndroidX, но после перехода на библиотеку AndroidX мне нужно было добавить -keep class androidx.multidex.MultiDexApplication, чтобы приложение работало на устройствах до Android 5. - person user1652110; 01.01.2021

если вы используете androidx, используйте зависимость ниже

dependencies {
    // ...
    def multidex_version = "2.0.1"
    implementation "androidx.multidex:multidex:$multidex_version"
}

для использования библиотеки поддержки

dependencies {
    // ...
    implementation 'com.android.support:multidex:1.0.3'
}
person Isaac Sekamatte    schedule 07.10.2019

Если вы используете вектор в виде изображений, измените android:src на app:srcCompat в своем XML-файле.

person Terranology    schedule 18.06.2020