2016-10-12 9 views
32

У меня есть приложение, которое я компиляции против уровня API 21: enter image description here«Исходный код не совпадает с байткод» при отладке на устройстве

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

enter image description here

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

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

+0

выглядит как apk на вашем устройстве старше или отличается от текущего кода.Я знаю его очевидное, но попытался ли вы удалить приложение один раз и установить снова? –

+2

Похоже, что ошибка связана с плагином IDEA Intellij IDEA. Я мог найти ошибку, указанную здесь https://confluence.jetbrains.com/display/IDEADEV/IntelliJ+IDEA+2016.2+162.1812.2+Release+Notes. Не могли бы вы пройти через это? –

+0

@Akash Я пробовал это. Но файл, который я отлаживаю, является частью ОС Android (ContentResolver), а не моего приложения. – Crocodile

ответ

16

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

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

  • Нажмите Build-> Clean
  • Отключить Instant Run, в Настройки-> Сборка, выполнение, развертывания
+4

Ни отключение Instant Run, ни от любого другого решения в этой ссылке не сработало для меня. – mister270

+0

@ mister270 Вы нашли другое решение? Я еще никогда не сталкивался с этой проблемой, поэтому мне сложно отлаживать ее и расширять мой ответ. –

+1

Я поднял минимальный sdk и сделал чистую перестройку, из-за которой проблема «ушла». Однако я не удовлетворен этим решением, поскольку мне нужен более старый мини-SDK. – mister270

0

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

3

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

gradle --refresh-dependencies 

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

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

0

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

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

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

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

Надеется, что это помогает!

2

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

+0

Это сработало для меня. Мое устройство было API 22, поэтому настройка compileSdkVersion на 22 решила проблему. –