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

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

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

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

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

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

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

4b9b3361

Ответ 1

В AOSP есть открытая проблема, когда некоторые пользователи предоставили возможные решения: https://code.google.com/p/android/issues/detail?id=225199&sort=-id&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

Потенциальные решения, даваемые там (начиная с даты этого сообщения):

  • Нажмите "Создать" > "Очистить"
  • Отключить мгновенный запуск в настройках- > Сборка, выполнение, развертывание

Ответ 2

вот мое решение

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

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

    enter image description here

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

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

    enter image description here

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

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

enter image description here

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

Ответ 3

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

Ответ 4

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

gradle --refresh-dependencies

он не освежает действительно все зависимости. Остается немного мусора. (Ссылка).

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

Ответ 5

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

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

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

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

Ответ 6

Перейдите в раздел "Настройки проекта" > "Артефакты". Выберите артефакт, у которого есть проблема. Существует опция "Включить в сборку проекта". Это необходимо проверить (включено). Для более старых версий IntelliJ эта опция "Make on build".

Ответ 7

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

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

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

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

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

Ответ 8

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

Ответ 9

Это решено? Для Android Studio теперь я получаю: "Исходный код Android Studio не совпадает с байтовым кодом"

Ответ 10

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

Ответ 11

Мое приложение скомпилировано на API LEVEL 29, но отладка на реальном устройстве на API LEVEL 28. Я получил предупреждение source code does not match the bytecode в AndroidStudio. Я исправил это, думая, что эти шаги:

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

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

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

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

Ответ 12

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

Ответ 13

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

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