Подтвердить что ты не робот

Сбой установки Multidex

Я использую библиотеку CircledImageView. Он отлично работает на версиях lollipop + android. Но в kitkat он рушится. Поэтому после поиска в Google. Я обнаружил, что мне нужно реализовать multidex в моем приложении.

Итак, это мой класс приложения.

public class FireApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
        Fresco.initialize (this);
    }

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

И в build.gradle в defaultconfig MultiDexEnabled истинно

multiDexEnabled true

Но когда я запускаю приложение, я получаю следующую ошибку.

java.lang.NoSuchFieldException: Field dexElementsSuppressedExceptions not found in class dalvik.system.PathClassLoader
 at android.support.multidex.MultiDex.findField(MultiDex.java:288)
 at android.support.multidex.MultiDex.access$300(MultiDex.java:57)
 at android.support.multidex.MultiDex$V19.install(MultiDex.java:390)
 at android.support.multidex.MultiDex$V19.access$000(MultiDex.java:369)
 at android.support.multidex.MultiDex.installSecondaryDexes(MultiDex.java:242)
 at android.support.multidex.MultiDex.install(MultiDex.java:161)
 at android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.java:39)
 at com.buckydroid.anonchat.FireApp.attachBaseContext(Unknown Source)
 at android.app.Application.attach(Application.java:182)
 at android.app.Instrumentation.newApplication(Instrumentation.java:991)
 at android.app.Instrumentation.newApplication(Instrumentation.java:975)
 at android.app.LoadedApk.makeApplication(LoadedApk.java:511)
 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4564)
 at android.app.ActivityThread.access$1500(ActivityThread.java:139)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:149)
 at android.app.ActivityThread.main(ActivityThread.java:5268)
 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:793)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
 at dalvik.system.NativeStart.main(Native Method)
4b9b3361

Ответ 1

Попробуйте включить compile 'com.android.support:multidex:1.0.1' в ваш build.gradle файл.

Ответ 2

выполните следующие шаги:

1) Добавьте зависимость в файл build.gradle:

compile 'com.android.support:multidex:1.0.0'

2) Включить мультидекс и установить размер кучи

defaultConfig {
    applicationId "your package name"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}

dexOptions {
    javaMaxHeapSize "4g"
}

3) В классе Application добавьте это

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

4) Добавьте это в свой манифест в тег <application>:

android:name=".YourApplicationClassName"

Ответ 3

  • Убедитесь, что приложение, объявленное в файле манифеста, расширяет MultiDexApplication.
  • Убедитесь, что ваш файл build.gradle поддерживает мультисайдинг и включает в себя зависимость пакета compile 'com.android.support:multidex:1.0.1'.
  • Удостоверьтесь, что вы не управляетесь с помощью быстрой сборки Android Studio. Вы можете удалить все каталоги сборки и установить с помощью приложения с помощью командной строки.
  • Если ваше приложение имеет ароматы, убедитесь, что установленный аромат использует MultiDexApplication

Ответ 4

Попробуйте это Внутри вашего файла build.gradle на уровне приложения введите следующую строку кода

android{
      //compielsdkVersion..
      //..
      //..
      vectorDrawables.useSupportLibrary = true
}

а в Activity.java, который вы используете CircularImageView, установите следующий статический блок в верхней части метода onCreate(), подобный этому

    //...
   //....
    static {
            AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   //...
   //...

Ответ 5

предыдущие решения в порядке, но одна отсутствующая вещь MultiDexApplication

public class FireApp extends MultiDexApplication 

Ответ 6

Добавьте эту строку в свой тег приложения в манифест

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

Ответ 7

В API 19 и 20 библиотека пыталась сохранить "исключенные исключения" в loader.dexElementsSuppressedExceptions.

Но поле не там, оно в DexPathList, поэтому правильный путь - loader.pathList.dexElementsSuppressedExceptions.

Google исправил это: https://android.googlesource.com/platform/frameworks/multidex/+/74e66b8013b5b9002f67e53825c189a18597b1e8%5E%21/#F0

Вам нужно обновить мультидекс версию до 1.0. 2+.

Ответ 8

Я столкнулся с той же проблемой на устройстве Sony под управлением Android 4.3 (API 18) при отладке сборки (выпуск был в порядке). После того, как я попробовал каждое решение и сделал все правильно, я все еще не смог решить проблему.

Когда я собирал и устанавливал свой APK с помощью Android Studio для нескольких устройств, я случайно обнаружил, что если я попытаюсь собрать его для устройства Lollipop один раз, а затем соберу его для более старой версии (ниже KitKat), он будет работать без досадной ошибки MultiDex installation failed.

Обратите внимание, что мое собственное устройство, которое я чаще всего использую для сборки и тестирования приложения, работает с API 28.

Ответ 9

это ошибка в kitkat multidex, и вы можете переопределить V19.install, потому что dexElementsSuppressedExceptions - это поле в dexPathList, а не в загрузчике. Однако существует исключение, когда dalvik делает makeDexElements, но вместо этого вы получаете неправильное сообщение введите здесь описание изображения

Ответ 10

попробуйте включить compile 'com.android.support:multidex:1.0.1 'в файле build.gradle.