![](https://habrastorage.org/getpro/habr/upload_files/337/7bb/c29/3377bbc29c6eb326ddb1f4146da63bd3.jpeg)
Привет! Меня зовут Стефан, я занимаюсь Android-разработкой в KTS.
Android-разработчики каждый день сталкиваются с своим основным инструментом — Android Studio.
Это очень удобный инструмент с большим спектром возможностей, но зачастую разработчики не используют их все. В этой статье я попытаюсь это исправить и расскажу об интересных фишках этой IDE, которые сам использую каждый день. Не обо всех, но зато самых базовых, которые позволят увеличить вашу продуктивность.
❗️ Обратите внимание: большинство советов универсальны и не завязаны именно на AS. Их могут использовать бэкендеры в PyCharm, фронтендеры на WebStorm, иосеры на AppCode.
Опытные разработчики, скорее всего, знают о некоторых из этих возможностей:
Хоткеи
Они же горячие клавиши, которые облегчают жизнь разработчику и любому работающему за клавиатурой человеку. Хоткеев получилось довольно много, поэтому я разделил их по разделам.
Важно понимать, что хоткеи зависят от раскладки студии (keymap). Я просто покажу вам, как настроить каждый, а на любое сочетание клавиш найдётся свой любитель.
❗️ Обратите внимание: хоткеи различаются в зависимости от OS, поэтому важнее знать, где их посмотреть и настроить. Это делается в этом окне:
![Preferences → вводим в поиск “keymap” Preferences → вводим в поиск “keymap”](https://habrastorage.org/getpro/habr/upload_files/e67/8a5/7a5/e678a57a528b7c46ee6f4619c90e21d8.png)
Общие действия
Открыть настройки студии
![](https://habrastorage.org/getpro/habr/upload_files/d99/22e/31a/d9922e31aa473e094398ded852d938c4.png)
Открыть недавние файлы
![](https://habrastorage.org/getpro/habr/upload_files/153/f76/842/153f76842acbdd898f90b9315ef51f20.png)
Сохранить изменения в файлах
![](https://habrastorage.org/getpro/habr/upload_files/c60/4d5/542/c604d55422624b741fb7c110be0029d7.png)
Вставка с учетом буфера обмена
![](https://habrastorage.org/getpro/habr/upload_files/2f3/430/3e2/2f34303e23d0fed489923409971d3a6f.png)
Оптимизировать импорты
![](https://habrastorage.org/getpro/habr/upload_files/03f/211/c29/03f211c29ef60e5bb9142880450147ad.png)
Удаляет неиспользуемые импорты, сортирует импорты в соответствии code-style проекта.
Установить его можно в настройках студии:
Preferences → Editor → Code Style → Выбираем конкретный язык → Шестерёнка ⚙️ возле поля Scheme → Import Scheme
![](https://habrastorage.org/getpro/habr/upload_files/396/74e/463/39674e46355374bac5ac79e9a6ac822e.png)
Собрать проект и запустить на устройстве
![](https://habrastorage.org/getpro/habr/upload_files/3d5/f7e/ed3/3d5f7eed361c5b8b13d009443eccd312.png)
Собрать проект и запустить в debug-режиме на устройстве
![](https://habrastorage.org/getpro/habr/upload_files/a4e/220/46e/a4e22046eaf422a6571405cc556702d3.png)
Зааттачить debugger к уже запущенному процессу
![](https://habrastorage.org/getpro/habr/upload_files/55b/3a4/c87/55b3a4c87e86d9f9fbeb6831b5297b42.png)
Просто собрать проект
![](https://habrastorage.org/getpro/habr/upload_files/3bb/44b/f7a/3bb44bf7a6cf92a0a659fff9f9ca8b0f.png)
Закрыть текущую вкладку с файлом:
![](https://habrastorage.org/getpro/habr/upload_files/43c/1a7/2ba/43c1a72ba3772b28c8ed86da19722573.png)
Закрыть активное окно с инструментами
![](https://habrastorage.org/getpro/habr/upload_files/f15/635/b67/f15635b6701b67794a3e58380a6339b5.png)
Позволяет закрыть активное окно, аналогично клику на кнопку «свернуть» в окне. Я, к примеру, так закрываю Logcat:
![](https://habrastorage.org/getpro/habr/upload_files/ca0/e63/97e/ca0e6397ef1f0427d8dc2e998209a19a.png)
Навигация
Навигация по изменениям в индексе Git
![](https://habrastorage.org/getpro/habr/upload_files/cbc/f81/82a/cbcf8182a764b96029d0e8b73b391846.png)
![](https://habrastorage.org/getpro/habr/upload_files/5e4/4ba/3d4/5e44ba3d42c98d71ce2d4fb890c7d2bc.png)
Позволяет навигироваться на те строчки кода, которые попали в индекс Git в рамках файла. Также помимо навигации показывает дифф:
![](https://habrastorage.org/getpro/habr/upload_files/58b/85a/879/58b85a8796848f36eff7fce0fffe3e7c.png)
Навигация по методам в файле
![](https://habrastorage.org/getpro/habr/upload_files/1ed/4ad/615/1ed4ad615a9f5f0b0965acc0f745db18.png)
![](https://habrastorage.org/getpro/habr/upload_files/8f9/ea2/87c/8f9ea287c77ebe3798e87acb220fa463.png)
Навигация по файлам
![](https://habrastorage.org/getpro/habr/upload_files/6f2/a24/2a4/6f2a242a496515c12867fa549af6446b.png)
![](https://habrastorage.org/getpro/habr/upload_files/30c/e4b/52f/30ce4b52f6179db0af5dcb7f0492e2c9.png)
Позволяет навигироваться по последним открытым файлам, как вперёд, так и назад. Так вам не приходится переключать одну руку на мышку/трекпад, руки остаются на клавиатуре
Поиск по всем действиям:
![](https://habrastorage.org/getpro/habr/upload_files/e82/752/104/e82752104e7f07b2752cffcec1a97635.png)
Позволяет искать по названиям файлов, классов, действиям, Git — по commit-хэшу, названиям веток, тэгам и commit message:
![](https://habrastorage.org/getpro/habr/upload_files/64e/69e/ab6/64e69eab600c11b337ed5c4dc3d122c1.png)
Навигация по вкладкам
На предыдущую вкладку
![](https://habrastorage.org/getpro/habr/upload_files/88d/4a1/6ac/88d4a16ac8d28ab7143ec7811b0f817f.png)
На следующую вкладку
![](https://habrastorage.org/getpro/habr/upload_files/b14/589/764/b14589764fb4155e4045df464132c924.png)
Показать файл в…
![](https://habrastorage.org/getpro/habr/upload_files/7cc/99e/9da/7cc99e9da37fea50d1952816fd5f42d7.png)
Очень мощный шорткат, использую его в KMM/KMP проектах, позволяет:
Показать файл в:
ProjectView: в виде Project, Packages, Android и разных Scop проекта
Показать структуру файла
Navigation bar
Открыть в Finder/Проводнике
Показать структуру проекта
![](https://habrastorage.org/getpro/habr/upload_files/615/c92/fb4/615c92fb4170793e6805e86b64af61dd.jpg)
Работа с кодом
Отформатировать код
![](https://habrastorage.org/getpro/habr/upload_files/3ab/aa5/af8/3abaa5af8ae419ea6918b21604d572a8.png)
Отформатировать файл:
![](https://habrastorage.org/getpro/habr/upload_files/757/7cf/48f/7577cf48f766e72d85f5925028bb9840.png)
Почти тоже самое, что форматирование кода, только более гибкое, так как появляется контекстное меню, в котором можно задать параметры форматирования:
![](https://habrastorage.org/getpro/habr/upload_files/f39/84d/7f5/f3984d7f503853c54f0ce70ebbe01f76.png)
Поменять строчки кода местами
![](https://habrastorage.org/getpro/habr/upload_files/d46/201/383/d46201383d7436fc4ed43aec670b9cae.png)
![](https://habrastorage.org/getpro/habr/upload_files/e68/0ce/f34/e680cef34f0777b3cfbbbd162e7240a9.png)
Меняет строчки кода местами. Удобно, когда нужно поменять параметры функции/метода/конструктора.
Поменять выражения местами:
![](https://habrastorage.org/getpro/habr/upload_files/b3d/996/76a/b3d99676aca7ed2e82f685d2a075634c.png)
![](https://habrastorage.org/getpro/habr/upload_files/888/84e/0df/88884e0df3777d95b021967c826b3780.png)
В отличие от свапа строчек местами, этот хоткей позволяет менять местами тела целых методов, объявления классов и top-lvl переменных и функций, параметров функции/метода/конструктора — но делает это умно и сам подставляет запятые в нужных местах. Также нельзя выйти за пределы сигнатуры метода, если меняете параметры метода местами.
Посмотреть быстрое объявление класса/метода/переменной
![](https://habrastorage.org/getpro/habr/upload_files/d7d/8b9/615/d7d8b96155ececd35fd301c23cd0487f.png)
![](https://habrastorage.org/getpro/habr/upload_files/916/0e3/05d/9160e305d5d2bbae10e223cdb453d94d.png)
Добавить/удалить каретку
![](https://habrastorage.org/getpro/habr/upload_files/d0e/68e/9df/d0e68e9df0d4f34686118e2ad5f5e76b.png)
Позволяет устанавливать несколько кареток текста, что бывает удобно при копировании параметров. Работает следующим образом: зажимаем хоткей и кликаем в нужное место в коде.
Переместить каретку к следующему/предыдущему слову:
![](https://habrastorage.org/getpro/habr/upload_files/7f5/b9e/985/7f5b9e98532f33ae98b2454769fb95ca.png)
![](https://habrastorage.org/getpro/habr/upload_files/9b1/727/04d/9b172704d7fb02b1bf27d2991f06afa2.png)
Выделить слово
![](https://habrastorage.org/getpro/habr/upload_files/ee7/320/abf/ee7320abf63254283555b8874f18077c.png)
![](https://habrastorage.org/getpro/habr/upload_files/6a6/c39/1d4/6a6c391d49c6e7362e5522770e8b93e0.png)
Переместить каретку к началу/концу строки:
![](https://habrastorage.org/getpro/habr/upload_files/727/992/6de/7279926de2005b733d8206ef449e9010.png)
![](https://habrastorage.org/getpro/habr/upload_files/3c8/880/d6e/3c8880d6e205f77cb9cf03e7a267b2ef.png)
Выделить строку:
![](https://habrastorage.org/getpro/habr/upload_files/85c/139/70b/85c13970bdb1859dbb9338702f447fcf.png)
![](https://habrastorage.org/getpro/habr/upload_files/dc3/e39/ef9/dc3e39ef94d4c9d0657f386a77ddecf5.png)
Расширить выделение текста
![](https://habrastorage.org/getpro/habr/upload_files/f5d/46b/bd1/f5d46bbd152c71e3affd48ee79c5406d.png)
Клонировать каретку над/под текущей кареткой:
![](https://habrastorage.org/getpro/habr/upload_files/6de/df0/e02/6dedf0e02142726b8a6bb6a5b73252bb.png)
Позволяет клонировать каретку над строчками выше/ниже текущей каретки. Это тоже удобно при копировании/перемещении параметров.
Работа с GIT
Rollback изменений (в этом примере будем использовать Git):
![](https://habrastorage.org/getpro/habr/upload_files/22e/097/d10/22e097d1098c98f5fcd5d28b6ef7f6b3.png)
Позволяет откатить изменения в индексе Git.
Можно использовать как в файлах исходного кода, так и целиком на файлах в индексе VCS, которые находятся во вкладке Git → LocalChanges
![](https://habrastorage.org/getpro/habr/upload_files/169/053/028/1690530288af2160f1bae940e8d18f3e.png)
Подтянуть изменения из удалённого репозитория
![](https://habrastorage.org/getpro/habr/upload_files/3dc/754/f65/3dc754f65c94d60071a28da6a922ea6c.png)
Сделать коммит
![](https://habrastorage.org/getpro/habr/upload_files/9cf/715/0d6/9cf7150d61eff96978c36f0014bc99fb.png)
Запушить коммиты
![](https://habrastorage.org/getpro/habr/upload_files/d5a/873/3a5/d5a8733a58c80fa812388372f78bdfb9.png)
Key Promoter X
В предыдущей главе я рассказал только о незначительной части хоткеев, которые можно установить в студии. Кто-то может возразить: «Что-то слишком их много, тяжело выучить все и запомнить пальцами будет тяжело». На что я могу вам ответить: «Используйте Key Promoter X».
Это плагин, позволяющий выучить хоткеи постепенно. Пока вы будете выполнять то или иное действие в студии при помощи мыши, плагин будет давать подсказки с хоткеями для этих действий. А если хоткея под это действие нет, посоветует вам его завести.
Найти плагин легко. Нужно ввести Key Promoter X в Preferences → Plugins → Marketplace:
![](https://habrastorage.org/getpro/habr/upload_files/0a0/762/bb6/0a0762bb6825360cf9967fe12d66109a.png)
После установки перезапускаем студию и пользуемся!
![](https://habrastorage.org/getpro/habr/upload_files/b70/bdd/f6b/b70bddf6b755f465c7f91c151c9d3c6f.gif)
Подсказки выглядят так:
![](https://habrastorage.org/getpro/habr/upload_files/f3a/101/e1c/f3a101e1c989b18b0654685b3f46d2f0.png)
В подсказке также будет написано, сколько раз вы вместо хоткея использовали мышку)
Подсказка появилась, когда я попытался навигировать в объявление метода через контекстное меню ПКМ-ом по методу:
![](https://habrastorage.org/getpro/habr/upload_files/fa7/032/5df/fa70325df16197ce37e4d0f4b6c8fb9b.png)
Также можно посмотреть общую статистику пропущенных хоткеев:
![](https://habrastorage.org/getpro/habr/upload_files/5fe/eaf/321/5feeaf3218ca7a23eb4ee16c72c561e4.png)
Шаблоны кода
При разработке встречается много бойлерплейта/однотипного кода, например ViewModel-и или Fragment. Чтобы автоматизировать написание таких мест, ребята из hh.ru сделали очень приятный инструмент: набор плагинов для работы с Android Studio
Я использую Geminio, который позволяет по шаблону создавать целые модули. В команде это гарантирует, что все модули, которые разные разработчики создадут с этим плагином, будут иметь одну и ту же структуру. Тогда структура проекта будет выглядеть единообразно.
Перед использованием плагинов сначала их нужно собрать (ручками ?) и этими же ручками подключить к Android Studio.
В документации всё подробно описано.
Подсветка вложенных скобок
В коде порой могут встречаться сложные вложенные конструкции, которые обрамляются либо обычными ()-скобками, либо фигурными {}. То, что этих скобок на единицу текста стало очень много, означает две вещи:
Надо отрефакторить этот код
Использовать плагин Rainbow Brackets, хотя одно другому не мешает :)
Найти его очень просто, достаточно ввести Rainbow Brackets в Preferences → Plugins → Marketplace:
![](https://habrastorage.org/getpro/habr/upload_files/fc6/3da/6b0/fc63da6b08deb590f845b5546d568cf2.png)
Плагин очень простой. Всё, что он делает — подсвечивает разными цветами скобочки, что делает код более читаемым.
Пример без Rainbow Brackets и с Rainbow Brackets:
![](https://habrastorage.org/getpro/habr/upload_files/7de/258/ca8/7de258ca8df0110577678d94e19e1c29.png)
![](https://habrastorage.org/getpro/habr/upload_files/154/ef1/a32/154ef1a320c8c5235b711b6e55fd87b9.gif)
Rainbow Brackets можно настроить под себя:
![](https://habrastorage.org/getpro/habr/upload_files/5aa/39c/c15/5aa39cc15cc7f06d2a986f638020840f.png)
Лично я в настройках из коробки ничего не менял, но всегда можно попробовать.
Подсветка логов
Недавно Google представила в свежей версии Android Studio новый Logcat, который, на мой взгляд, удобней, чем старый.
![](https://habrastorage.org/getpro/habr/upload_files/5c1/5bd/c84/5c15bdc84057a571ea1062216b101ba4.png)
Раз уж в предыдущей главе мы заговорили о подсветке — кроме скобок, в студии ещё можно подсвечивать и логи в Logcat! Студия поддерживает это из коробки.
Настраивается в Preferences → Editor → Color Scheme → Android Logcat:
![](https://habrastorage.org/getpro/habr/upload_files/617/7c9/11f/6177c911f4f580441f351afe718d7225.png)
Список настроек очень обширен, настраивать можно как:
стиль текста: жирный и курсив
цвет текста для каждого уровня логов
цвет фона
добавлять полоски в скролле сбоку, чтобы можно было видеть по скроллу где и с каким уровнем сообщения
даже добавлять эффекты, обводку текста определенным цветом:
![Присмотритесь: на этом фото задана обводка фиолетовым цветом для Warning (жёлтый текст) и полоска в скролле справа, на которой видно риски для Waring (голубая) и Debug (белая) Присмотритесь: на этом фото задана обводка фиолетовым цветом для Warning (жёлтый текст) и полоска в скролле справа, на которой видно риски для Waring (голубая) и Debug (белая)](https://habrastorage.org/getpro/habr/upload_files/a47/ce9/fdc/a47ce9fdc9709c0d81bd46be246fb208.png)
ADB Idea
При работе с вашим приложением на устройстве AS под капотом использует ADB (Android Debug Bridge), от установки приложения и вплоть до вывода логов в Logcat.
При отладке приложения бывают случаи, когда его нужно несколько раз переустанавливать на устройстве, стирать его данные, перезапускать, убивать процесс приложения или отзывать permissions. Это можно делать и руками на устройстве, но для автоматизации этих действий уже существует решение — плагин ADB Idea.
Найти его можно, введя в ADB Idea в Preferences → Plugins → Marketplace.
Плагин позволяет:
Деинсталлировать приложение
Убивать процесс приложения
Запускать приложение
Перезапускать ранее запущенное приложение
Очищать данные приложения
Очищать данные приложения и затем перезапускать
Запускать приложение с дебаггером
Перезапускать приложение с дебаггером
Предоставлять/отзывать permissions
Включить/отключить WiFi
Включить/отключить мобильные данные
После установки открыть список команд можно двумя способами:
Через вкладку Tools сверху → ADB Idea.
![](https://habrastorage.org/getpro/habr/upload_files/958/d3c/e8b/958d3ce8b5179f02b078d302a9ca299b.jpeg)
Через хоткей
Через Touchbar на Mac, команды просто выводятся на него:
![](https://habrastorage.org/getpro/habr/upload_files/15f/843/65a/15f84365aed33f101a42719423fac9e2.png)
![](https://habrastorage.org/getpro/habr/upload_files/466/ab6/b35/466ab6b354c6416982aa7425bfb8cf5b.jpeg)
Multirun
При запуске приложения на устройстве мы обычно используем конфигурацию запуска:
![](https://habrastorage.org/getpro/habr/upload_files/c9f/7bb/a6e/c9f7bba6e8dda27266ffaa8bea065379.png)
По умолчанию конфигурация собирает проект из app-модуля и запускает на устройстве, но там также могут быть тесты, Compose Preview и т.п. Что, если нам понадобится запускать сразу несколько конфигураций? Для решения этой проблемы есть плагин Multirun, который позволяет сразу запускать множество конфигураций одним кликом, а также группировать конфигурации.
![](https://habrastorage.org/getpro/habr/upload_files/ff7/081/62f/ff708162fe6c5375877c10f9b759edab.png)
Я в основном использую сценарий с запуском приложения под разные конфигурации в KMM — Android, iOS, Desktop:
![](https://habrastorage.org/getpro/habr/upload_files/058/8fa/4af/0588fa4afbee638f60c15ff439dd5fea.png)
Как настроить Multirun конфигурацию:
Run → Edit Configurations...
Найдите и добавьте новую конфигурацию Multirun
Добавьте другие конфигурации запуска в конфигурацию Multirun
Выбираем нужные нам варианты
Можно запускать!
Git Hooks
Скорее всего, свои задачи вы делаете в отдельных ветках, и вам приходится добавлять к commit message название ветки. Это тоже можно автоматизировать! Для этого потребуется Git hooks.
Git Hook — это скрипт, который выполняется до или после различных событий Git: commit, push и receive.
Git Hook могут лежать в двух местах:
под Git: мы можем сами настраивать директорию с Git Hook в нашем проекте. Как это можно сделать:
при помощи команды в терминале:
git config core.hooksPath .githooks
при помощи Gradle Task
Gradle Task
val changeGitHooksDir by tasks.registering(Exec::class) {
group = "git"
description = "Changing githooks dir to .githooks"
fun ExecSpec.executeStringCommand(command: String) {
val splitted = command.split(" ")
commandLine(*splitted.toTypedArray())
}
fun execute(command: String) {
exec { executeStringCommand(command) }
}
executeStringCommand("git config core.hooksPath .githooks")
}
tasks.getByPath(“<build>”).dependsOn(changeGitHooksDir)
В данном случае мы расположим Git Hook в корне директории/.githooks. Вариант с Gradle Task более предпочтителен, потому что нет гарантии, что разработчики будут выполнять команду в терминале:git config core.hooksPath .githooks
вне Git: корень директории/.git/hooks (там же еще лежат и примеры от Git
Git Hook, добавляющий название ветки к commit message в квадратных скобках []:
[]
#!/bin/sh
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
BRANCHES_TO_SKIP=(main dev)
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
TRIMMED=$(echo $BRANCH_NAME | sed -e 's:^\([^-]*-[^-]*\)-.*:\1:' -e \
'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/')
PREFIX="[$TRIMMED]"
COMMIT_MSG=$(cat $COMMIT_MSG_FILE)
if [ -n "$BRANCH_NAME" ] && ! [[ $COMMIT_MSG == "$PREFIX"* ]] && ! [[ $BRANCH_EXCLUDED -eq 1 ]]; then
sed -i.bak -e "1s/^/$PREFIX /" $COMMIT_MSG_FILE
fi
Так вы выполните commit на MYFEATURE-10 с сообщением "My commit". На выходе получите: [MYFEATURE-10] My commit
Ещё в Git Hook можно прогонять перед коммитом, например, Detekt с автоисправлением и проверкой кода на соответствие code-style.
Чтобы студия использовала Git Hook, в окне Commit Changes при коммите в разделе Before Commit нужно поставить галочку Run Git Hooks:
![](https://habrastorage.org/getpro/habr/upload_files/036/c7c/f98/036c7cf983eec27acc895527cb34bcc2.png)
Заключение
Всеми этими фишками я сам пользуюсь каждый день. Порой я вижу разработчиков, которые делают руками какие-то вещи руками, и от этого страдает скорость даже самых базовых операций. А если это операция, которую вы за день делаете сто или тысячу раз — на выходе получаете серьёзную потерю в скорости.
Этой статьёй я хотел сделать жизнь разработчиков продуктивнее. Надеюсь, вы тоже смогли почерпнуть для себя что-то новое в вашем основном инструменте.
❗️ Хотел бы обратить внимание, что не нужно выполнять все пункты разом. Главное, применяйте эти рекомендации периодически, возвращаясь к статье — и со временем увидите прогресс. Особенно в сравнении с теми, кто не автоматизирует свою работу… Вы, кстати, можете посоветовать им эту статью ?
Тема автоматизации — весьма обширная, и улучшать работу, внезапно, можно не только в Android Studio. Если статья вам понравится, в следующий раз я постараюсь разобрать более глубокие и общие фишки, которые подходят не только пользователями AS.
Другие статьи по Android-разработке для начинающих:
Статья про OAuth, из которой узнаете, на какие моменты стоит обратить внимание, какие способы реализации выбрать
Но это (не)точно: чего ждать мобильным разработчикам в 2023-м году
Другие статьи по Android-разработке для продвинутых:
Этапы работы во фреймворке Jetpack Compose, который упрощает написание и обновление визуального интерфейса приложения