Невозможно загрузить приложение Android на устройство (устаревшие банки)
Я использую Android Studio для разработки этого приложения, и сегодня, когда я попытался загрузить его на свое устройство для тестирования, у меня появилось всплывающее окно:
Установка не удалась, так как на устройстве, возможно, имеются устаревшие разархивированные файлы, которые не соответствуют текущей версии (ошибка dexopt). Чтобы продолжить, вы должны удалить существующее приложение.
ВНИМАНИЕ: Удаление приведет к удалению данных приложения!
Вы хотите удалить существующее приложение?
Это дало два варианта, OK или Отмена. После нажатия OK на вкладке "Выполнить" появилось следующее сообщение:
DEVICE SHELL COMMAND: pm uninstall my.bundle.id
Unknown failure
Похоже, что приложение удалено, его нет в разделе "Управление приложениями".
Я не могу загрузить приложение. Я пытался очистить проект и восстановить, но это не сработало.
Что я могу сделать?
13 ответов
Я обнаружил, что файл dex становится больше, чем буфер, хотя он содержит менее 64 тыс. Методов. Затем я включил ProGuard, и это помогло значительно уменьшить размер файла dex.
Приложение dex-method- count очень помогает в отладке файла dex, проверяя не только количество методов, но и пакет, к которому они принадлежат.
Я также сталкивался с этой проблемой в Android Studio, начиная с версии 2.0 Preview 6 вплоть до 2.0 Beta 3, и ни одно из упомянутых здесь решений не помогло мне.
Оказалось, это не имеет ничего общего с Instant Run. Все, что мне нужно было сделать, это увеличить внутреннее хранилище AVD до исчезновения следующего уведомления. Я также должен был выполнить очистку данных после изменения значений.
Я отключил Мгновенный запуск для этого проекта, и проблема решена.
Возможно, это ошибка в функции мгновенного запуска предварительного просмотра Android Studio 2.0.
Instant Run - это новая функция, представленная в Android Studio 2.0.
PS: если вы не нашли Instant Run, его в:
Android Studio --> Preferences --> Build, execution, deploy --> Instant run.
или вы можете найти его на вкладке настроек.
Зайдите в AVD Manager, затем в разделе действий вашего устройства выберите стирание данных. Это сработало для меня, надеюсь, это поможет....
Это помогло мне в эмуляторе: Close Emulator. Инструменты> AVD Manager > Выберите настройки эмулятора> Wipe Data > Cold Boot... Теперь установите приложение.
Я обнаружил, что моя проблема была вызвана старой версией SDK Build Tools, которая приводила к сбою Clean. Я обновил свой SDK Build Tools до последней версии, и после этого очистка сработала, и я больше не получал ошибку устаревших jar-файлов. Надеюсь, это поможет кому-то еще бороться с этой проблемой.
Это сработало для меня:
В Android Studio это можно сделать, нажав на Build> Clean Project. SysadminTips
В моем проекте я преодолел это, уточнив, с какими частями Сервисов 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 карт.
В моем случае, потому что мой эмулятор был полон приложений. Я видел, сколько места было в эмуляторе и было почти ничего, поэтому я удалил некоторые приложения, и с этим моя проблема была решена
Когда ваш dex-файл становится больше размера буфера (т.е. содержит более 65 тыс. Методов), возникает эта ошибка. Вы можете избежать этой ошибки двумя способами: 1.) Удалите неиспользуемый код с помощью ProGuard - настройте параметры ProGuard для своего приложения для запуска ProGuard и убедитесь, что у вас включено сжатие для выпусков сборки. Включение сжатия гарантирует, что вы не отправляете неиспользуемый код с вашими APK.
2.) Вы можете настроить свое приложение для поддержки мультидекса. Перейдите по этой ссылке, чтобы использовать ее: https://developer.android.com/tools/building/multidex.html
Для поддержки мультидекса я переопределяю этот метод в своем классе приложения:
@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'
}
Надеюсь, поможет!
РЕДАКТИРОВАТЬ: Вынул текстовое объяснение из кода.
Если вы используете Android Studio 2.0 Preview, отключите мгновенный запуск.
Все благодарности и благодарности идут за спасателя /questions/36161997/nevozmozhno-zagruzit-prilozhenie-android-na-ustrojstvo-ustarevshie-banki/36162003#36162003
Что я сделал, так это модифицированный файл 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'
}
}
Затем перестройте и разверните!
Я столкнулся с этой проблемой сегодня, получил решение. Увидел, сколько места в эмуляторе и было почти ничего, поэтому я удалил некоторые приложения и моя проблема была решена. Спасибо
В моем случае это было вызвано файлом с именем "dictionary.txt". Я просто удалил его и решил проблему.
Я пробовал подписки
- увеличение оперативной памяти
- увеличение памяти эмулятора
- удаление и добавление эмулятора
- аннулировать кеш и перезапустить
но ничего не работает.
Однако удаление самого файла эмулятора помогло мне.
Здесь вы можете найти файлы эмулятора.
C:\Users\<username>\.android\avd
Спасибо.
Ни один ответ не решил мою проблему
Вы также должны сделать progaurd
для отладки тоже. просто добавь buildtypes
в ваш основной файл Gradle:
buildTypes {
debug { // change release to debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}