Подтвердить что ты не робот

Студия Android показывает источники из API compileSdkVersion при отладке на устройстве со старым API

Я отлаживаю с помощью Android Studio (A.S) 1.0.2 с компиляциейSdkVersion 21, установленной в build.gradle. При использовании эмулятора с API 21 все работает нормально. Проблема возникает при отладке устройства, имеющего API 19. Каждая строка в стеке вызовов (помечена как "Фреймы" в A.S) правильно показывает имя функции, исходный файл и номер строки, соответствующий API 19. Однако, когда я нажимаю на одну из строк, которая соответствует одному из источников структуры (например, Activity.java), A.S неправильно открывается и отображает версию файла API 21, а не версию API 19.

В моей папке sdk для Android у меня есть . /sources/android -19 и./sources/android-21

Любая идея, почему A.S отображает неправильную версию файла?

Вещи, которые я пробовал (по порядку):

  • Сброс Android Studio (удаление ~/.AndroidStudio *)
  • Обновление Android Studio до последней версии
  • Работа на эмуляторе с API 21 - A.S показывает правильную версию (21) файлов.
  • Изменение команды compileSdkVersion на 19 и запуск на устройстве API 19 - A.S показывает правильные номера строк в стеке вызовов и открывает правильную версию (API 19) файлов в правильной строке.
  • Изменение команды compileSdkVersion на 19 и запуск эмулятора API 21 - AS показывает, что в стеке вызовов номера строк, соответствующие API 21 (что мне кажется правильным поведением), однако, при нажатии на него AS ошибочно открывается версии API 19, а не версии API 21.

Подводя итог, при нажатии на строку в стеке вызовов A.S открывается версия файла, представленная compileSdkVersion, а не та, которая используется устройством/эмулятором во время сеанса отладки.

4b9b3361

Ответ 1

Отвечено на рабочее решение здесь:

https://stackoverflow.com/a/32236703/1267536

Полный контент:

Я довольно часто использую библиотеку поддержки приложений. Изменение команды compileSdkVersion приводит к массивным ошибкам компиляции. Если вы используете appcompat-21, вы должны скомпилировать его с api 21 или получить ошибки компиляции.

Это отлично работает, если вы отлаживаетесь против версии 21. Но когда вы отлаживаете Jelly Bean (API 17), ваш отладчик продолжает отбрасывать вас в источник API 21. Очень раздражает и трудно отлаживать.

Решение, которое я закончил, очень хаки, но работает! Скажем, вы пытаетесь отлаживать API 17. Сделайте следующее:

  • mv $ANDROID_HOME/sources/android-21 $ANDROID_HOME/sources/android-21-orig
  • cp $ANDROID_HOME/sources/android-17 $ANDROID_HOME/sources/android-21
  • перезагрузите студию Android, чтобы выбрать правильные пути.
  • Debug

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

Здесь сообщается об ошибке в этой статье: https://code.google.com/p/android/issues/detail?id=183976

Ответ 2

Откройте свой проект в Intellij Idea (на основе Android Studio) и выберите File -> Project Structure.... В настройке проекта выберите "project SDK" для версии, которую вам нужно отлаживать, и выберите для всех модулей проекта "проект SDK" в качестве модуля SDK. После этого вы можете подключить отладочное соединение с вашим устройством/эмулятором и посмотреть правильный источник Android.

Вам не нужно создавать проект в Intellij Idea.

Ответ 3

Измените временное имя папки исходных файлов в SDK. Например, вы скомпилированы против уровня API 23, но устройство, которое вы тестируете и отлаживаете, является уровнем API 15. Затем сначала скомпилируйте и запустите его в режиме отладки, установите точку останова. После этого измените имена:

$SDK_HOME$/sources/android-23/ -> $SDK_HOME$/sources/android-23-temp/
$SDK_HOME$/sources/android-15/ -> $SDK_HOME$/sources/android-23/

И когда это будет сделано, самое время поразить точку останова.

Это решение предполагает, что вы установили оба уровня уровня API из диспетчера SDK.

Ответ 4

Попробуйте отладить ваше приложение на реальном устройстве, скомпилировав его с уровнем SDK устройства. Номера строк в столах вызовов, вероятно, будут "не синхронизированы" для классов, предоставляемых устройством.

Android Studio не может надежно предоставить правильные источники для вашего запущенного устройства. Даже если в нем будет учтен SDK-версия устройства, от которого вы отлаживаетесь, прошивка устройства (и, возможно, будет) будет скомпилирована из разных исходных файлов и будет просто совместима с API.

Мне кажется, что Android Studio просто показывает компилируемые версии SDK классов, предоставляемых целевым устройством. Он просто показывает реализацию ссылки на компилятор.

Ответ 5

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

Android Studio 2.2 исправляет его и перейдет к источникам уровня API, который соответствует используемому вами устройству (если у вас установлены эти источники). Было объявлено здесь.