Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.

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

Денис Долгополов

Android Dev, блог об Android - https://t.me/dolgo_polo_dev

О чём

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

Эти методы экономят:

  • десятки секунд по сравнению с поиском вручную;

  • нервы, которые тратятся на «Да куда этот кусок кода делся-то? Я же его где-то тут видел...»

Хлебные крошки для блоков кода

Как воспользоваться: кликнуть ПКМ на любой номер строки -> Breadcrumbs -> Top/Bottom.

После активации Breadcrumbs появляется динамическое отображение «хлебных крошек» блока кода в фокусе.

Например, сразу можно увидеть, что вы находитесь в Activity, в которой имплементирован интерфейс с функцией, в которой вызван forEach.

Удобно использовать, если в одном файле несколько классов: сразу видно, в каком классе расположен блок кода.

Открыть текущий файл в древе

Первый вариант: чтобы Android Studio развернула древо до открытого в редакторе файла, нужно нажать кнопку Select Opened File.

Второй вариант: Ctrl (Windows) / Command (macOS) + кликнуть ЛКМ на название пакета. Студия развернёт выбранную папку.

Умный поиск

Как воспользоваться: дважды нажать кнопку Shift.

В появившемся окне можно написать:

  • название файла/класса/функции/переменной,

  • id View/ресурса,

  • название функции Android Studio,

  • название функции VCS (например, Compared with Branch).

Не умный поиск

Как воспользоваться: Edit -> Find -> Find in Files.

Иногда умный поиск почему-то не работает. 

Но если вы точно знаете подстроку, которую нужно найти, то можно вбить её в «не умный поиск» — и получить список файлов или строк, в которых она используется.

Find Usages

Как воспользоваться: кликнуть ПКМ на строку или название файла -> Find Usages.

Функция Find Usages открывает список файлов, в которых используется выбранный элемент. Результаты поиска сортируются по типу использования (в качестве возвращаемого параметра, по местам создания экземпляра).

Функция работает для:

  • классов,

  • функций,

  • переменных,

  • id View.

Поиск по файлу

Как воспользоваться: Ctrl (Windows) / Command (macOS) + F или Edit -> Find -> Find.

Поиск в папках

В панели древе проекта также работает поиск. Достаточно переместить фокус в окно древа (кликнуть на любую папку) и начать набирать название на клавиатуре.

Для перемещения между результатами поиска можно использовать стрелочки вверх и вниз.

Поиск View через LayoutManager

Бывает, прилетает задача на доработку View, но неизвестно, как эта View называется в коде.

В этом случае можно открыть LayoutManager, найти визуально нужную View и подсмотреть название класса и id.

Ещё можно нажать Go To Declaration, чтобы сразу открылся файлик с View.

Поиск человека

Один из самых быстрых способов разобраться в коде — спросить автора.

Как воспользоваться: чтобы увидеть, кто написал строку, нужно включить Git -> Annotate with Git Blame.

Ctrl (Command)

Самый мощный инструмент — Ctrl (Command) + ЛКМ. Работает с переменными, функциями, классами, implements, override.

С помощью этой комбинации можно узнать, где используется код, и перейти к родителю/наследнику.

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

Implementation <> Interface

С помощью иконок Is implemented by можно увидеть список мест, где реализован интерфейс / абстрактная функция.

С помощью иконки Implements можно от реализации перейти к интерфейсу / абстрактной функции.

Также это работает с родительскими и дочерними классами.

Dependency Injection (DI)

Android Studio умеет отображать список классов, которые передают объекты в конструктор.

Например, можно увидеть, кто кладет Context в конструктор.

Эпилог

Жаль, что в Android Studio нет онбординга, который бы рассказывал об этих прекрасных возможностях. Возможно, о чём-то я не знаю до сих пор. 

Что ещё вы используете для ускорения ориентации в коде?

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


  1. ris58h
    07.09.2023 14:17
    +2

    Ничего специфичного для Android Studio не заметил. Всё это есть в любой IDE от JB.

    Жаль, что в Android Studio нет онбординга

    В IDEA есть Tip of the day и вкладка Learn на экране приветствия. Думаю, что и в AS также.

    https://www.jetbrains.com/idea/guide/tutorials/getting-started-intellij-idea/learning-the-ide/

    Что ещё вы используете для ускорения ориентации в коде?

    Force click маковского тачпада для Go to Declaration/Definition - получается удобная навигация без клавиатуры.


  1. kavaynya
    07.09.2023 14:17

    А почему поиск по double shift обозван как умный поиск в отличии от Find In Files?

    Первый удобен для быстрого поиска классов и файлов по названию, а также actions, которые может выполнить в ide. Так же он работает как и поиск по тексту, но у эти результаты ниже всех других вариантов (этот пункт есть в последней Canary). Он не грузит сразу весь список результатов, и нельзя увидеть где именно в файле находится найденный результат.

    Это скорее быстрый поиск по файлам/классам (так я его для себя позиционирую и использую). Два раза тапнул по shift, вбил то что ищешь, если вверху нет того что надо, то проще перейти в Find In Files.
    И вот как раз второй удобен тем, что есть сразу весь список результатов, с возможностью предосмотра файла. И находясь в нем легко перейти в режим Replace In Files и сразу произвести замену. Если очень надо.


    1. DolgopolovDenis Автор
      07.09.2023 14:17

      Так же он работает как и поиск по тексту

      я до сих пор слабо понимаю принцип, по которому он некоторые вещи находит, а некоторые нет

      поэтому иногда прибегаю к "тупо найди совпадения", когда знаю точную строку

      но 90% процентов конечно покрывает поиск по double shift


      1. kavaynya
        07.09.2023 14:17

        Проверьте какая у вас версия студии. Поиск по тексту по double shift точно есть в последней Canary, но в предыдущих версиях я его не замечал (это вкладка Text).
        Без этой вкладки он ищет по названиям классов, названиям файлов, что понимается под Symbols не знаю, но туда попадают id ресурсов строк. Поиск по тексту не работает в этом поиске, поэтому найти что-то рандомное в нем не выйдет, как например содержимое ресурса. Вот здесь и нужен был Find In Place.


        1. ris58h
          07.09.2023 14:17

          что понимается под Symbols не знаю

          https://plugins.jetbrains.com/docs/intellij/symbols.html


          1. kavaynya
            07.09.2023 14:17

            Спасибо! Не думал, что все настолько банально.


  1. m_chrom
    07.09.2023 14:17
    +2

    Классный список, спасибо!
    Я бы подкинул в него еще пару инструментов, которые часто помогают мне:

    1. Поиск по Recent Files (Ctrl+E).
    Показывает список последних просмотренных файлов (можно отфильтровать только измененнные). В этом диалоге так же можно воспользоваться Speed Search, т.е. начать вводить текст, и список будет фильтроваться по введеному паттерну.

    2. Поиск по Recent Locations (Ctrl+Shift+E)
    Та же концепция, что и в п.1, но выдает не список файлов, а список недавно посещенных мест в коде

    3. Show history for selection
    Этот диалог хорошо дополнит поиск автора кода по Git Blame. К сожалению, Blame не всегда покажет реального автора кода. Если Петя добавил метод, а потом Вася поменял его форматирование, Git Blame покажет автором Васю. И чтобы добраться до истинного автора, придется сделать еще несколько не очень простых шагов. Но если выделить кусок кода, открыть "Умный поиск" (Double Shift) и вбить там "history for selection" (ну или любую комбинацию слов "selection" и "history"). То можно найти экшн, который откроет диалог со списком всех коммитов, которые затронули выделенный участок кода. Сразу с окошком предпросмотра, где будет показано, что именно менялось каждым автором.



    1. DolgopolovDenis Автор
      07.09.2023 14:17

      огонь

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

      "покажи все классы, которые работают с данными из этой базы данных"


      1. VGoudkov
        07.09.2023 14:17

        Вы не поверите... Если немного учесть, что подключение к конкретной БД - настраиваемый параметр, то есть такая штука как Edit - Find - Search structurally. Там же и replace. Ну или регулярками по тексту, тоже так неплохо работает.


  1. VGoudkov
    07.09.2023 14:17
    +1

    Вынужден отметить, что многие вышеприведённые советы... не вполне эффективны. КМК профессиональный разработчик должен делать всё, что только можно не отрываясь от клавиатуры. Так тупо быстрее, и думать не нужно - только понадобилось, а руки уже сделали. И IDEA это всё поддерживает - достаточно сходить в Help - Keyboard Shortcuts PDF, распечатать, повесить на стену и выучить всё. Тот же Select opened file - под Win Alt-F1 и далее либо Enter сразу, либо куда хочешь... Обратно в окно редактора из дерева проекта - Esc. Ну и так далее, переписывать весь PDF в комментарий к статье (да их там три PDF, по одному на каждую из основных ОС) - дело неблагодарное.

    А вот совет который явно отсутствует - научится пользоваться bookmarks, как окном и разными списками заметок, так и установкой именованных по горячим клавишам. Потому что найдя что-то, нужно ещё запомнить где оно и зачем вообще искали. Открывать 100500 файлов и помнить визуально где какая вкладка - можно, но неэффективно. А в этих списках ещё и комментарии можно писать к строке - что имели в виду, когда искали.


    1. m_chrom
      07.09.2023 14:17
      +1

      Для тех, кто не готов заучивать весь Keymap PDF, могу порекомендовать искать экшены через Find Action (Ctrl/Cmd+Shift+A). Решил заинлайнить переменную, но забыл шорткат? Поставил курсор на переменную, нажал Ctrl+Shift+A, ввел "inli", и вот тебе нужный экшн. Удобно для экшнов, которые используются не так часто, и их шорткаты не оседают в памяти. Выходит куда быстрее, чем в меню искать.
      Можно, в принципе, вместо Ctrl+Shift+A тот же Double Shift использовать, но там будут не только экшны.


  1. Spinoza0
    07.09.2023 14:17
    +2

    Еще есть плагин key promoter x, который научит запоминать горячие клавиши, что ускоряет работу с IDE в целом :)


    1. VGoudkov
      07.09.2023 14:17

      :) Вы не использовали shortcut XYZ 7851 раз. И 7852-й раз не использую, потому что я долго и со вкусом перед эти ковырялся мышкой в run configuration, и кликнуть чуть быстрее, чем опять уходить на клавиатуру


  1. maks1596
    07.09.2023 14:17

    Круто расписано. Спасибо!
    Есть что дополнить)

    1. Breadcrumbs
      Breadcrumbs кликабельные на наше счастье) Часто на них жму, чтобы открыть в дереве файлов директорию текущего пакета.

    1. Открыть текущий файл
      Кажется, что раньше можно было нажать на файл в breadcrumbs и он выделялся в дереве файлов. А может это никогда и не было, а я только открывал пакеты ????
      В любом случае, сейчас, чтобы открыть файл, начал привыкать к комбинации Cmd+F1, 1. Удобно получается за счёт того, что больше не нужно переключаться на мышь.

    1. Умный поиск
      Чаще стал уточнять умный поиск, чтобы не искать лишнего. Например, если нужно запустить какую-нибудь команду IDE, то я нажимаю не Shift, Shift, а Cmd+Shift+A. А то порой, пока попадёшь на нужный action среди кучи файлов и функций, рабочий день успеет закончиться ????

    1. Find Usages

      Дополню, что есть комбинация клавиш (которую я постоянно забываю) - Option+F7. Но вообще пользуюсь ей в тех редких случаях, когда интуитивного Cmd+Click не хватает. Например, вкладка Find Usages не пропадает в отличии от выпадающего окна по Cmd+Click ????

    2. Go to -> Implementation(s)

      Открыть реализацию можно не только по клику на иконке рядом с методом/классом. Есть ещё команда Go to -> Implementation(s). Вызывается она:

      • либо из контекстного меню при нажатии ПКМ -> Go to -> Implementation(s);

      • либо по нажатию комбинации Cmd+Option+B.

    3. Поиск человека

      Поддержу ответ @m_chrom, что ПКМ -> Show History (For Selection) реально порой спасает ничуть не хуже, чем git blame.

      А так ещё добавлю, что blame с недавних пор появился в Android Studio ещё и как полупрозрачный текст с именем автора над методом/классом. Текст кликабельный. При нажатии раскрывает сбоку столбец с авторством так же, как это делает команда annotate.

      Плюс воспользуюсь собственным текстом из п.3 и скажу, что Cmd+Shift+A -> "blame" -> Enter порой сделать быстрее, чем переключаться на мышку)


    1. VGoudkov
      07.09.2023 14:17

      Плагин GitToolbox вообще делает blame автоматически для выделенной строки, помимо всего остального.

      А ещё из полезных вещей, которыми почему-то никто не пользуется - Call Hierarchy и Analyze Data Flow to here. Но с первым нужно быть аккуратным и обязательно настроить частный scope на файлы и либы проекта, иначе упёршись в какой-нибудь Thread.run эта штука попытается просканировать весь maven и подвиснет вместе с IDEA


  1. keekkenen
    07.09.2023 14:17

    такие статьи появляются из-за того, что люди мало интересуются оптимизацией своей работы..

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

    также, есть кастомизатор для своих TODO/FIXME комментариев и быстрый поиск по ним