Невозможно загрузить приложение 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'
    }
}
Другие вопросы по тегам