Ответ 1
Попробуйте включить compile 'com.android.support:multidex:1.0.1'
в ваш build.gradle
файл.
Я использую библиотеку 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)
Попробуйте включить compile 'com.android.support:multidex:1.0.1'
в ваш build.gradle
файл.
выполните следующие шаги:
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"
MultiDexApplication
.build.gradle
поддерживает мультисайдинг и включает в себя зависимость пакета compile 'com.android.support:multidex:1.0.1'
.MultiDexApplication
Попробуйте это Внутри вашего файла build.gradle на уровне приложения введите следующую строку кода
android{
//compielsdkVersion..
//..
//..
vectorDrawables.useSupportLibrary = true
}
а в Activity.java, который вы используете CircularImageView, установите следующий статический блок в верхней части метода onCreate(), подобный этому
//...
//....
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
//...
предыдущие решения в порядке, но одна отсутствующая вещь MultiDexApplication
public class FireApp extends MultiDexApplication
Добавьте эту строку в свой тег приложения в манифест
android:name="android.support.multidex.MultiDexApplication"
В API 19 и 20 библиотека пыталась сохранить "исключенные исключения" в loader.dexElementsSuppressedExceptions.
Но поле не там, оно в DexPathList, поэтому правильный путь - loader.pathList.dexElementsSuppressedExceptions.
Google исправил это: https://android.googlesource.com/platform/frameworks/multidex/+/74e66b8013b5b9002f67e53825c189a18597b1e8%5E%21/#F0
Вам нужно обновить мультидекс версию до 1.0. 2+.
Я столкнулся с той же проблемой на устройстве Sony под управлением Android 4.3 (API 18) при отладке сборки (выпуск был в порядке). После того, как я попробовал каждое решение и сделал все правильно, я все еще не смог решить проблему.
Когда я собирал и устанавливал свой APK с помощью Android Studio для нескольких устройств, я случайно обнаружил, что если я попытаюсь собрать его для устройства Lollipop один раз, а затем соберу его для более старой версии (ниже KitKat), он будет работать без досадной ошибки MultiDex installation failed
.
Обратите внимание, что мое собственное устройство, которое я чаще всего использую для сборки и тестирования приложения, работает с API 28.
это ошибка в kitkat multidex, и вы можете переопределить V19.install, потому что dexElementsSuppressedExceptions - это поле в dexPathList, а не в загрузчике. Однако существует исключение, когда dalvik делает makeDexElements, но вместо этого вы получаете неправильное сообщение введите здесь описание изображения
попробуйте включить
compile 'com.android.support:multidex:1.0.1
'в файле build.gradle.