![](https://habrastorage.org/getpro/habr/upload_files/c56/d62/a07/c56d62a07b50242ef0811753cf6386f2.png)
Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.
Если вы опытный пользователь, то вам известно большинство нижеперечисленных лайфхаков. Но я узнавал о многих возможностях случайно, через многие месяцы работы в Android Studio, поэтому хочу рассказать всё, везде и сразу.
О чём
В Android Studio есть несколько кнопок и горячих клавиш, ускоряющих процесс изучения незнакомого кода. C их помощью можно быстрее находить строки кода, функции, файлы.
Эти методы экономят:
десятки секунд по сравнению с поиском вручную;
нервы, которые тратятся на «Да куда этот кусок кода делся-то? Я же его где-то тут видел...»
Хлебные крошки для блоков кода
Как воспользоваться: кликнуть ПКМ на любой номер строки -> Breadcrumbs -> Top/Bottom.
![](https://habrastorage.org/getpro/habr/upload_files/ee9/62b/923/ee962b9230b89bb1cbdcf7a9c2b90eed.png)
После активации Breadcrumbs появляется динамическое отображение «хлебных крошек» блока кода в фокусе.
![](https://habrastorage.org/getpro/habr/upload_files/61a/ccd/679/61accd6795c3717e52fb29c01b9860e2.png)
Например, сразу можно увидеть, что вы находитесь в Activity, в которой имплементирован интерфейс с функцией, в которой вызван forEach.
Удобно использовать, если в одном файле несколько классов: сразу видно, в каком классе расположен блок кода.
Открыть текущий файл в древе
Первый вариант: чтобы Android Studio развернула древо до открытого в редакторе файла, нужно нажать кнопку Select Opened File.
![](https://habrastorage.org/getpro/habr/upload_files/524/fa8/b77/524fa8b779a051704130359084b907a5.png)
Второй вариант: Ctrl (Windows) / Command (macOS) + кликнуть ЛКМ на название пакета. Студия развернёт выбранную папку.
![](https://habrastorage.org/getpro/habr/upload_files/251/34b/38f/25134b38f66008b11454983e961cd1d0.png)
Умный поиск
Как воспользоваться: дважды нажать кнопку Shift.
В появившемся окне можно написать:
название файла/класса/функции/переменной,
id View/ресурса,
название функции Android Studio,
название функции VCS (например, Compared with Branch).
![](https://habrastorage.org/getpro/habr/upload_files/a0c/57d/dd1/a0c57ddd1710915e84f8ae5baad06bd2.png)
Не умный поиск
Как воспользоваться: Edit -> Find -> Find in Files.
![](https://habrastorage.org/getpro/habr/upload_files/53d/507/d79/53d507d79c55e2df2b895345f1e6bd32.png)
Иногда умный поиск почему-то не работает.
Но если вы точно знаете подстроку, которую нужно найти, то можно вбить её в «не умный поиск» — и получить список файлов или строк, в которых она используется.
![](https://habrastorage.org/getpro/habr/upload_files/882/839/eb7/882839eb7f3f9c1e34693f9ca6df797d.png)
Find Usages
Как воспользоваться: кликнуть ПКМ на строку или название файла -> Find Usages.
Функция Find Usages открывает список файлов, в которых используется выбранный элемент. Результаты поиска сортируются по типу использования (в качестве возвращаемого параметра, по местам создания экземпляра).
![](https://habrastorage.org/getpro/habr/upload_files/6b4/090/46c/6b409046cd4de5cfa3d2f5662262d9d5.png)
Функция работает для:
классов,
функций,
переменных,
id View.
Поиск по файлу
Как воспользоваться: Ctrl (Windows) / Command (macOS) + F или Edit -> Find -> Find.
![](https://habrastorage.org/getpro/habr/upload_files/6c7/048/d3b/6c7048d3bd326bbb0d0f71c6f86f80bc.png)
Поиск в папках
В панели древе проекта также работает поиск. Достаточно переместить фокус в окно древа (кликнуть на любую папку) и начать набирать название на клавиатуре.
![](https://habrastorage.org/getpro/habr/upload_files/84d/508/1a3/84d5081a3ac4f020efd7d40e4b011fd1.png)
Для перемещения между результатами поиска можно использовать стрелочки вверх и вниз.
Поиск View через Layout Inspector
Бывает, прилетает задача на доработку View, но неизвестно, как эта View называется в коде.
В этом случае можно открыть Layout Inspector, найти визуально нужную View и подсмотреть название класса и id.
Ещё можно нажать Go To Declaration, чтобы сразу открылся файлик с View.
![](https://habrastorage.org/getpro/habr/upload_files/c18/ea5/cfe/c18ea5cfe28d7088fe0c54e0526bc3a6.png)
Поиск человека
Один из самых быстрых способов разобраться в коде — спросить автора.
Как воспользоваться: чтобы увидеть, кто написал строку, нужно включить Git -> Annotate with Git Blame.
![](https://habrastorage.org/getpro/habr/upload_files/729/493/af6/729493af675055eecf37de27c49cee42.png)
![](https://habrastorage.org/getpro/habr/upload_files/a41/35b/866/a4135b866cdc14e952079935c4a2905a.png)
Ctrl (Command)
Самый мощный инструмент — Ctrl (Command) + ЛКМ. Работает с переменными, функциями, классами, implements, override.
С помощью этой комбинации можно узнать, где используется код, и перейти к родителю/наследнику.
Но я долгое время не замечал, что в списке есть фильтры. Например, в результатах поиска можно оставить только запись переменных, убрав чтение. Ещё можно убрать весь сгенерированный код.
![](https://habrastorage.org/getpro/habr/upload_files/8a2/253/85c/8a225385c5486427d03c04cd0eff4737.png)
Implementation <> Interface
С помощью иконок Is implemented by можно увидеть список мест, где реализован интерфейс / абстрактная функция.
![](https://habrastorage.org/getpro/habr/upload_files/1da/8d8/c3b/1da8d8c3b4051383c68fb89544a969f5.png)
С помощью иконки Implements можно от реализации перейти к интерфейсу / абстрактной функции.
![](https://habrastorage.org/getpro/habr/upload_files/860/93b/192/86093b19269aaa6627b983593555735b.png)
Также это работает с родительскими и дочерними классами.
Dependency Injection (DI)
Android Studio умеет отображать список классов, которые передают объекты в конструктор.
Например, можно увидеть, кто кладет Context в конструктор.
![](https://habrastorage.org/getpro/habr/upload_files/cea/b1b/82f/ceab1b82f5a087936df6b18f65dd32dd.png)
Эпилог
Жаль, что в Android Studio нет онбординга, который бы рассказывал об этих прекрасных возможностях. Возможно, о чём-то я не знаю до сих пор.
Что ещё вы используете для ускорения ориентации в коде?