«Исходный код не соответствует байт-коду» при отладке на устройстве

У меня есть приложение, которое я компилирую для уровня API 21: введите здесь описание изображения

а затем отладить его на реальном устройстве с уровнем API 23:

введите здесь описание изображения

Проблема в том, что когда я пытаюсь выполнить отладку через собственные классы ОС Android, я получаю «Исходный код не соответствует байт-коду». Почему это происходит? Тестовое устройство, на котором запущено приложение, имеет уровень API 23, и отлаживаемый исходный файл также имеет уровень 23. * введите описание изображения  здесь*

Я действительно смущен. Может ли кто-нибудь объяснить, почему я вижу это сообщение и как я могу его исправить?


person Crocodile    schedule 12.10.2016    source источник
comment
похоже, что apk на вашем устройстве устарел или отличается от текущего кода. Я знаю, что это очевидно, но вы пробовали удалить приложение один раз и установить снова?   -  person Akash Raghav    schedule 12.10.2016
comment
Похоже, что ошибка связана с плагином Intellij IDEA вашей IDE. Я мог найти сообщение об ошибке здесь confluence.jetbrains .com/display/IDEADEV/. Не могли бы вы пройти через это?   -  person Febi M Felix    schedule 12.10.2016
comment
@ Акаш Я пробовал это. Но файл, который я отлаживаю, является частью ОС Android (ContentResolver), а не моим приложением.   -  person Crocodile    schedule 12.10.2016
comment
@FebiMathew Спасибо. Это может быть то же самое, что и IDEA-159697. Это исправление в ванильной IntelliJ IDE. Как узнать, в какой сборке Android Studio IDE появляется это исправление?   -  person Crocodile    schedule 12.10.2016


Ответы (16)


Для этого есть открытая проблема в IssueTracker Google.

Возможные решения, указанные в проблеме (на дату публикации):

  • Нажмите «Создать» -> «Очистить».
  • Отключить мгновенный запуск, в настройках -> сборка, выполнение, развертывание
person Michael Hoffmann    schedule 12.11.2016
comment
Ни отключение Instant Run, ни какие-либо другие решения по этой ссылке мне не помогли. - person mister270; 08.05.2017
comment
@ Mister270 Вы нашли другое решение? Я никогда больше не сталкивался с этой проблемой, поэтому мне трудно ее отладить и расширить свой ответ здесь. - person Michael Hoffmann; 13.05.2017
comment
Я увеличил минимальный SDK и сделал чистую перестройку, которая устранила проблему. Однако я не удовлетворен этим решением, так как мне нужен более старый min sdk. - person mister270; 15.05.2017
comment
Ни одно из вышеперечисленных решений не сработало для меня. Я даже не нашел вариант мгновенного запуска. Так раздражает отладка с помощью INteelij. Мне приходится очищать установку после каждого изменения кода. - person Dish; 22.06.2018

Вот мое решение:

Если у вас более одной версии библиотеки, это может помочь.

  1. установить точку останова в исходном коде lib
  2. пусть код работает до точки останова
  3. вы получите эти советы

введите здесь описание изображения

  1. щелкните значок стрелки

  2. ты получишь это

    введите здесь описание изображения

  3. дважды щелкните, чтобы выбрать правильную библиотеку (обычно самая высокая версия библиотеки является правильной)

Я нажал кнопку отключения по ошибке, вы можете включить ее в настройках отладчика

введите здесь описание изображения

Если у вас нет советов на шаге 3, возможно, вы можете проверить, проверили ли вы параметры настройки.

person Jeffery Ma    schedule 29.04.2018
comment
Альтернативные источники включены, но не отображаются. Нет раскрывающегося списка (и да, у меня установлено 4 разных уровня API). - person Stephen M -on strike-; 30.04.2019
comment
В проекте Gradle это не помогло, я просто пошел дальше и временно удалил неправильную библиотеку из модулей проекта, и это помогло, помимо точки останова в правильном классе, используя переход к кадру! - person kisna; 04.04.2020

Вы должны использовать эмулятор Android с тем же уровнем API, что и compileSdkVersion. В вашем случае вы должны использовать эмулятор Android с уровнем API 21.

person Uriel Frankel    schedule 09.01.2018
comment
Это сработало для меня. Мое устройство было API 22, поэтому установка compileSdkVersion на 22 решила проблему. - person live-love; 20.02.2018
comment
Также работал на меня. У меня было физическое устройство с Android 8.1.0 (API 27), а на моем компьютере были установлены только исходники для API 30. Переключение на эмулятор с API 30 решило эту проблему. (compileSDKVersion теперь соответствует версии устройства) - person Jason Robertson; 03.12.2020

Если вы используете Gradle, вероятно, это проблема с кешем Gradle. (Справочник). Увы, даже если вы бежите

gradle --refresh-dependencies

, он действительно не обновляет все зависимости. Какой-то мусор остался. (Ссылка).

Итак, самый верный (но радикальный и долгий) вариант — очистить все внутри от [user]/.gradle/caches. Или найти там свой проблемный проект и очистить только его кеши.

person Gangnus    schedule 28.08.2017

Я пробовал все решения, приведенные здесь, и ни одно из них не сработало для меня. В версии 2019.1.3 я просто очистил и пересобрал артефакт, и это сработало; сначала сделайте Build -> Build Artifacts... -> <select your artifact> -> Clean, затем нажмите Build или Rebuild в том же месте.

person KaraKaplanKhan    schedule 25.06.2019

Перейдите в «Настройки проекта» > «Артефакты». Выберите артефакт, который имеет проблему. Есть опция «Включить в сборку проекта». Это должно быть проверено (включено). Для более старых версий IntelliJ этот параметр — «Создать при сборке».

person Swathi    schedule 29.06.2017

Вероятно, это сообщение об ошибке может иметь более одной причины, мой случай не был похож на тот, что был в OP, в моем случае это было связано со сторонней библиотекой, для которой требовались дополнительные библиотеки.

Например: вы вручную добавляете X.jar в свою LIB, но для работы этого X.jar требуется Z.jar.

Мне потребовалось некоторое время, чтобы понять, сообщение совсем не помогало. Мне пришлось отлаживать приложение, пока я не достиг класса сбоя, и в этом классе убедиться, что все импорты были выполнены.

(В частности: я добавил MercadoLibre-0.3.4.jar, для которого требуется commons-httpclient.jar)

Надеюсь это поможет!

person Federico Alvarez    schedule 27.09.2017

Это также может произойти, если вы включили ProGuard. В buildTypes установите для minifyEnabled false, для сжатияResources false, для useProguard false

person ashishdhiman2007    schedule 21.12.2018

Я попробовал приведенные здесь решения, работая над приложением, использующим Bluetooth Low Energy (BLE). Я попытался,

  1. Чистая сборка
  2. Отключен мгновенный запуск
  3. Недействительные кеши / перезапуск

все это не удалось.

Что я сделал, так это отладил точки, где я думал, что получаю предупреждение, я все еще получал предупреждение, но приложение работало нормально. Вы можете игнорировать предупреждение.

person Asjad Sohail    schedule 06.02.2019

Мое приложение скомпилировано на УРОВНЕ API 29, но отладка на реальном устройстве выполняется на УРОВНЕ API 28. Я получил предупреждение source code does not match the bytecode в AndroidStudio. Я исправил его, выполнив следующие шаги:

  1. Перейдите в «Настройки»> «Мгновенный запуск»: снимите флажок «Мгновенный запуск».

  2. Перейдите в «Сборка»> «Чистая сборка».

  3. Перезапустите приложение

Теперь отладка работает нормально.

person NANA    schedule 27.09.2019

Это шаги, которые сработали для меня (как для Mac, так и для Windows):

  1. Нажмите «Файл»
  2. Нажмите «Недействительные кеши/Перезагрузить…».
  3. Выберите: «Недействительный и перезапустить»
  4. Подождите 20 минут
person Positive Navid    schedule 02.02.2020

Вы можете создать AVD, выбрать уровень API, равный вашему tagetApi и compileApi, это работает для меня.

person iceyang1989    schedule 20.03.2020

Поэтому я создал учетную запись только для того, чтобы помочь решить эту проблему, которая преследует многих людей и где описанные выше исправления не работают.

Если вы получаете эту ошибку, и здесь ничего не помогает. Попробуйте нажимать кнопку «Возобновить воспроизведение программы», пока программа не завершит работу с ошибкой. Затем щелкните вкладку консоли рядом с отладкой и прочитайте красный текст.

Я получал эту ошибку исходного кода, хотя моя проблема заключалась в попытке вставить значение в нулевой массив. Шаг 1. Нажмите кнопку возобновления

Шаг 2. Нажмите на вкладку консоли и прочитайте красный текст

person C K    schedule 17.11.2020
comment
Похоже, это может быть отличным ответом! Другие в этом посте добавили снимки экрана, чтобы прояснить, какие действия с графическим интерфейсом необходимо предпринять. Здесь может пригодиться снимок экрана с красной рамкой/стрелкой вокруг Resume program play button. - person Lenna; 17.11.2020
comment
Я добавил несколько изображений, чтобы помочь. Не уверен, как заставить их отображаться, но они есть в ссылках. У меня пока недостаточно представителей для публикации изображений, поэтому ссылки должны будут работать. - person C K; 18.11.2020

вот причина, по которой я получил эту ошибку, исходный код не соответствует байт-коду. Моя причина не имеет ничего общего с каким-либо API, версией компилятора... Это вызвано тем, что при преобразовании макета в корневое представление я по ошибке инициирую инфлятор в другом месте (обрывок кода обработчика результатов, который поставить поверх функции onCreate кода приложения Android). Почему-то отладчик не дает мне правильного намека на это (например, инфлятор не инициализирован или имеет экземпляр), когда установлена ​​точка останова и остановитесь здесь.

person 張蘇耀    schedule 20.07.2021

Android Studio использует исходную версию, равную целевой версии вашего приложения. Компиляция выполняется с исходной версией, равной указанной выше версии компиляции. Итак, позаботьтесь о том, чтобы в вашем проекте версия компиляции == целевая версия (настройте файл build.gradle модуля).

person medynets    schedule 20.07.2018

У меня была такая же проблема, и я нашел решение. Если у вас есть линия, помеченная красным, она выдаст вам эту ошибку, но если вы снимите пометку со всех строк, она будет работать нормально.

под отмеченным я имею в виду, когда вы нажимаете на левую сторону, где находятся номера строк, и он выделяет строку. Если это неясно, вот картинки.
перейдите от: помеченной строки к : строка без флажка

person Joe Giusti    schedule 04.10.2018