Использование отладчика Android Studio по максимуму


Это хитрость, о которой я узнал совсем недавно у Senior Android разработчика в моей компании, и теперь я чувствую себя несчастным, сожалея о времени, которое я провел в ожидании сборки Gradle, чтобы проверить свои изменения при написании Android приложений.


Вот типичный сценарий, который каждый Android разработчик мог бы встретить, по крайней мере, один раз в течение своего жизненного цикла разработки. У вас есть список элементов, которые вы хотите показать в ListView или RecyclerView.


Ниже приведен наш возлюбленный метод onBindViewHolder, который связывает вашу модель с вашими view-компонентами RecyclerView.


@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    final String name = values.get(position);
    holder.txtHeader.setText(name);
    holder.txtFooter.setText("Footer: " + name);
}

Теперь, допустим, вы захотели изменить цвет текста для каждого третьего элемента в списке. Таким образом, код будет выглядеть примерно так:


@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    final String name = values.get(position);
    holder.txtHeader.setText(name);
    if (position % 3 == 0) {
       holder.txtHeader.setTextColor(Color.GREEN); 
    }
    holder.txtFooter.setText("Footer: " + name);
}

Затем вы нажмёте Run и дождётесь завершения сборки и увидите ваши изменения, так?


Ожидание завершения сборки


Теперь вы бы подумали, существует ли другой путь для достижения этой же цели?


Deeper Leo


Твой выход, Android Studio! Да, нам не нужен внешний плагин или инструмент для достижения вышеупомянутой задачи и более того, нам даже не придется заново собирать проект. Вы не ослышались, мы обойдёмся без Gradle :) Вот как!


Шаг 1 — Необходимо определить конфигурацию запуска


Такая конфигурация запуска позволит нам запускать наше приложение и присоединять к нему отладчик из Android Studio, а также вы сможете присоединить его к уже запущенному процессу.


Нажмите Run > Edit Configurations.


Run -> Edit Configurations


В верхнем левом углу диалогового окна щелкните значок «+» и выберите Android App.


Android App


Теперь дайте ему имя, мне нравится называть его Run-Only, но вы можете называть его как угодно.


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


Важный шаг:


В разделе Installation Options выберите Nothing;
В Launch Options выберите Default Activity;
В разделе Before Launch удалите Gradle-aware Make.


Таким образом, конфигурация должна выглядеть следующим образом:


Конфигурация


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


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


breakpoint


Щелкните правой кнопкой мыши на breakpoint и снимите флажок Suspend (рус. приостановить).


Как только вы снимете флажок, диалог расширится и покажет больше опций.


Диалог опций


Нам интересен раздел Evaluate and log. Мы напишем там выражение, чтобы проверить изменения в нашем элементе RecyclerView. Нажмите на маленький значок голубого цвета справа от окна ввода Evaluate and log, чтобы развернуть его до более крупного редактора, и добавьте выражение для тестирования, и нажмите Ok, а затем Done.


Evaluate and log


Теперь нажмите на иконку Debug с выбранной конфигурацией Run-Only и посмотрите на эту магию.


Debug


Приложение должно запуститься с вашей Activity по умолчанию, и вы должны увидеть внесенные там изменения. Также, если вы уделяете пристальное внимание IDE, в самом низу вы увидите только одну запускаемую задачу: Launching Activity.


Launching Activity


Хотелось бы услышать ваши впечатления, когда вы опробуете эту хитрость!

Комментарии (7)


  1. kamer
    10.08.2018 19:55
    +1

    Не обязательно создавать конфигурацию, можно использовать Attach debugger to Android process


  1. a15199732
    10.08.2018 20:43

    В коде ошибка, но в окошке брекпоинта она уже исправлена :)


  1. bogotoff
    10.08.2018 22:57
    -1

    Все что под фоткой Ди Каприо, я читал его голосом :)


  1. ookami_kb
    10.08.2018 23:14

    Хотелось бы услышать ваши впечатления, когда вы опробуете эту хитрость!

    Какое-то удаление гланд через задницу, простите.


    Ставим брейкпойнт, жмем "Attach debugger to Android process", при остановке на брейкпойнте жмем "Evaluate expression" и выполняем все, что в голову взбредет.


    Это уж не говоря о том, что есть еще Instant run как бы.


    1. Devcolibri Автор
      10.08.2018 23:32
      -1

      Вы, наверное, не совсем поняли суть фичи.

      Во-первых, при помощи «Evaluate expression» вы сможете вычислить какие-либо значения переменных в данный момент, но не сможете изменить существующий код. Соответственно пример из статьи таким способом вы не исполните, т.к. там происходят реальные изменения на UI.

      Во-вторых, эта фича всё же быстрее Instant run будет, т.к. Instant run будет перекомпиливать минимально необходимое количество файлов, а вот возможность, описанная в статье, избавляет от перекомпиляции кода в принципе.

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


      1. ookami_kb
        10.08.2018 23:40
        -1

        При помощи "Evaluate expression" можно сделать все то же самое, что и описанным в статье способом, только быстрее. Попробуйте сами, если не верите на слово. Это по сути и есть тот же способ, только без лишних телодвижений.


        Ну а Instant Run – да, будет медленнее, но у него и возможностей больше – изменить что-то в layout, например.


        1. Devcolibri Автор
          11.08.2018 14:39

          Подскажите, как вы можете выполнить код, как на картинке, с помощью «Evaluate expression»?

          image