Невозможно загрузить приложение Android на устройство (устаревшие банки с деменцией)
Я использую Android Studio для разработки этого приложения, и сегодня, когда я попытался загрузить его на свое устройство, чтобы проверить, у меня появилось всплывающее окно с сообщением:
Ошибка установки, так как у устройства, возможно, есть устаревшие джикс-банки, которые не соответствуют текущей версии (ошибка dexopt). Для продолжения необходимо удалить существующее приложение.
ПРЕДУПРЕЖДЕНИЕ: Удаление приведет к удалению данных приложения!
Вы хотите удалить существующее приложение?
Он дал два варианта: "ОК" или "Отмена". После нажатия OK на вкладке "Выполнить" появилось следующее сообщение:
DEVICE SHELL COMMAND: pm uninstall my.bundle.id
Unknown failure
Приложение, похоже, будет удалено, это не так, как описано в разделе Управление приложениями.
Я не могу загрузить приложение. Я пробовал очистить проект и перестроить, но это не сработало.
Что я могу сделать?
Ответы
Ответ 1
Я обнаружил, что файл dex становится больше, чем буфер, хотя он содержит менее 64 тыс. методов. Затем я включил ProGuard, и это помогло значительно уменьшить размер файла dex.
Приложение dex-method-counts помогает отлаживать ваш файл dex, проверяя не только количество методов, но и какой пакет они принадлежат
Ответ 2
Я также сталкивался с этой проблемой в Android Studio, начиная с версии 2.0 Preview 6 вплоть до 2.0 Beta 3, и ни одно из упомянутых здесь решений не помогло мне.
Оказалось, это не имеет ничего общего с Instant Run. Все, что мне нужно было сделать, это увеличить внутреннее хранилище AVD до исчезновения следующего уведомления. Я также должен был выполнить очистку данных после изменения значений.
![enter image description here]()
Ответ 3
Я отключил Мгновенный запуск для этого проекта, и проблема решена.
Возможно, это ошибка в функции мгновенного запуска предварительного просмотра Android studio 2.0.
Instant Run - новая функция, представленная в Android Studio 2.0.
ps: в случае, если вы не нашли мгновенный запуск, его в:
Android Studio --> Preferences --> Build, execution, deploy --> Instant run.
или вы можете найти его на вкладке настроек.
Ответ 4
Перейдите в AVD Manager, затем в разделе действий вашего устройства выберите "стереть данные".
Это сработало для меня, надеюсь, что это поможет...
Ответ 5
Я выяснил, что моя проблема была вызвана старой версией SDK Build Tools, которая вызывала ошибку Clean. Я обновил свои инструменты для создания SDK до новейшей версии и после этой очистки работал, и я больше не получал ошибку с устаревшими флагами. Надеюсь, это поможет кому-то, кто борется с этой проблемой.
Ответ 6
Это сработало для меня:
В Android Studio это можно сделать, нажав Сборкa > Очистить Проект. SysadminTips
Ответ 7
В моем проекте я прошел мимо этого, уточнив, какие части сервисов Google Play, с которыми я связывался. В частности, я изменил
dependencies {
...
compile 'com.google.android.gms:play-services:8.4.0'
}
к
dependencies {
...
compile 'com.google.android.gms:play-services-maps:8.4.0'
}
в моем модуле приложения build.gradle, поскольку все, что я действительно использовал, было API-интерфейсом карт.
Ответ 8
Что я сделал, был изменен файл build.gradle(Module: app).
Первоначально он был
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Я изменил его на
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Затем перестроить и развернуть!
Ответ 9
Когда ваш файл dex становится больше, чем размер буфера (т.е. содержит более 65 тыс. меток), то эта ошибка возникает. Вы можете избежать этой ошибки двумя способами:
1.) Удалите неиспользуемый код с помощью ProGuard. Настройте параметры ProGuard для вашего приложения, чтобы запустить ProGuard, и убедитесь, что у вас есть сокращения для релизов. Включение сокращения означает, что вы не отправляете неиспользуемый код с вашими APK.
2.) Вы можете настроить приложение для поддержки нескольких приложений. Используйте эту ссылку для ее использования:
https://developer.android.com/tools/building/multidex.html
Для поддержки multidex я переопределяю этот метод в своем классе приложения:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
и измените мой build.gradle следующим образом:
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 14 //lower than 14 doesn't support multidex
targetSdkVersion 21
// Enabling multidex support.
multiDexEnabled true
}
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
Надеюсь, что это поможет!
РЕДАКТИРОВАТЬ: Вызвали текстовое пояснение из кода.
Ответ 10
В моем случае это было потому, что мой эмулятор был заполнен приложениями. Я видел, сколько пространства было у эмулятора, и почти ничего не было, поэтому я удалил некоторые приложения, и с этим моя проблема была решена.
Ответ 11
Если вы используете предварительный просмотр Android studio 2.0, отключите мгновенный запуск.
Вся благодарность и благодарность за спасение жизни fooobar.com/questions/122422/...
Ответ 12
Ни один из ответов не разрешил мою проблему
вы также должны сделать progaurd
для отладки.
просто добавьте buildtypes
в свой основной файл gradle:
buildTypes {
debug { // change release to debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
Ответ 13
В моем случае это было вызвано файлом с именем "dictionary.txt". Я просто удалил его и решил проблему.
Ответ 14
Я столкнулся с этой проблемой сегодня, получил решение. Увидел, сколько места в эмуляторе и было почти ничего, поэтому я удалил некоторые приложения и моя проблема была решена. Спасибо
Ответ 15
Это помогло мне для эмулятора: Закрыть эмулятор. Инструменты> AVD Manager> Выберите Настройки эмулятора> Очистить данные> Холодная загрузка. Теперь установите приложение.
Ссылка