"Исходный код не соответствует байт-коду" при отладке на устройстве
У меня есть приложение, которое я собираю против уровня API 21:
![введите описание изображения здесь]()
а затем отлаживать его на реальном устройстве с уровнем API 23:
![введите описание изображения здесь]()
Проблема в том, что, когда я пытаюсь отлаживать собственные классы ОС Android, я получаю "Исходный код не соответствует байт-коду". Почему это происходит? Тестируемое устройство, на котором запущено приложение, является уровнем API 23, а исходный файл, отлаживаемый, также является уровнем 23.
![* введите описание изображения здесь *]()
Я действительно смущен. Может ли кто-нибудь объяснить, почему я вижу это сообщение и как его исправить?
Ответы
Ответ 1
В AOSP есть открытая проблема, когда некоторые пользователи предоставили возможные решения:
https://code.google.com/p/android/issues/detail?id=225199&sort=-id&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
Потенциальные решения, даваемые там (начиная с даты этого сообщения):
- Нажмите "Создать" > "Очистить"
- Отключить мгновенный запуск в настройках- > Сборка, выполнение, развертывание
Ответ 2
вот мое решение
если у вас есть более одной версии библиотеки, это может помочь.
- установить точку останова в исходном коде lib
- пусть код работает до точки останова
-
вы получите эти советы
![enter image description here]()
-
щелкните значок стрелки
-
ты получишь это
![enter image description here]()
-
двойной щелчок для выбора правильной библиотеки (обычно самая высокая версия библиотеки правильная)
если вы по ошибке нажали кнопку "отключить", вы можете включить ее в настройках отладчика
![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). Я старался,
- Чистая сборка
- Мгновенный запуск отключен
- Недействительные кэши/перезапуск
все это не удалось.
То, что я сделал, было отладка точек, где я думал, что получаю предупреждение, я все еще получал предупреждение, но приложение работало нормально. Вы можете игнорировать предупреждение.
Ответ 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. Я исправил это, думая, что эти шаги:
Перейдите в "Настройки"> "Мгновенный запуск": снимите флажок "Мгновенный запуск"
Перейти в "Сборка"> "Чистая сборка"
Повторно запустите приложение
Теперь отладка работает нормально.
Ответ 12
Android Studio использует исходную версию, равную целевой версии в вашем приложении. Компиляция выполняется с исходной версией, равной вышеупомянутой версии компиляции. Поэтому позаботьтесь о том, чтобы в вашем проекте Compile Version == Target Version (измените файл build.gradle модуля).
Ответ 13
У меня была такая же проблема, и я нашел решение. Если у вас есть линия, помеченная красным, это выдаст вам эту ошибку, но если вы снимите пометку со всех строк, она будет работать нормально.
под флагом я имею в виду, когда вы нажимаете на левой стороне, где номера строк, и это выделяет линию. Если это не ясно, вот картинки.
перейти от: отмеченной строки к: не отмеченной линии