Интегрированные среды разработки
Избегаем ловушек автозавершения в Android Studio
Автозавершение минимизирует количество ошибок и помогает оптимизировать процесс разработки, предсказывая и завершая код по мере ввода, что экономит время и снижает когнитивную нагрузку во время разработки.
Когда вы сосредоточены на разработке, функция автозавершения в вашей IDE имеет решающее значение. Она значительно повышает производительность, сокращая необходимость набирать полные выражения, позволяя вам писать код быстрее и эффективнее. Автозавершение минимизирует количество ошибок и помогает оптимизировать процесс разработки, предсказывая и завершая код по мере ввода, что экономит время и снижает когнитивную нагрузку во время разработки.
Однако вы наверняка сталкивались с ситуациями, когда автозавершение в вашей IDE импортирует не тот пакет или предлагает слишком много несвязанных пакетов с похожими именами классов или функций. Это может замедлить работу и заставить вас задуматься, поскольку вы тратите время на перебор вариантов, чтобы выбрать правильный, что в конечном итоге прерывает процесс программирования.
В этой статье вы узнаете, как выборочно отключить предложения по автозавершению в Android Studio (IntelliJ IDE), что является главной темой Dove Letter на этой неделе. Dove Letter — это репозиторий по подписке, где вы можете учиться, обсуждать и делиться новыми знаниями об Android и Kotlin.
Ловушка автозавершения в нашей жизни
Если вы используете Jetpack Compose, то, возможно, сталкивались с ситуацией, когда все вроде бы хорошо, но что-то кажется не так.
![]()
Например, вы могли импортировать объект Modifier по инструкции или по привычке, но вдруг обнаружили, что он не работает. Если вы поймете и устраните проблему в течение нескольких минут, это будет удачным исходом. Однако если вы потратите более 10 минут на устранение неполадок, это станет разочаровывающим сценарием.
Так в чем же проблема? Скорее всего, вы импортировали не тот пакет из-за предложения автозаполнения, как показано на изображении ниже, и в итоге застряли. Это распространенная ловушка в разработке, когда автозаполнение может ошибочно предложить похожий, но неправильный пакет, что приводит к путанице и потере времени.
![]()
Еще одна распространенная ситуация, с которой вы наверняка сталкивались, особенно если работали с Kotlin Flow, — это когда IDE выдает вам несколько предложений пакетов, как показано на рисунке ниже. В чем проблема? Нужный вам класс Flow часто находится в последнем варианте, заставляя вас прокручивать неактуальные варианты. Это может замедлить ваш рабочий процесс и привести к ошибкам, если вы выберете неправильный пакет.
![]()
Исключение класса или пакета из дополнения
Существует простой способ запретить IDE предлагать в автодополнении пакеты, не имеющие отношения к делу. Это можно сделать прямо в IDE, выполнив всего несколько шагов. Если вы хотите перестать видеть предложения от определенного пакета, следуйте следующему простому методу: когда в редакторе появится предложение автозаполнения, нажмите Opt + Enter (или Alt + Enter в Windows). После этого IntelliJ IDE спросит, хотите ли вы исключить предложения из этого пакета, как показано на рисунке ниже.
![]()
Если вы выберете опцию «Исключить java.lang.reflect.Modifier из завершения», вы увидите всплывающее меню, подтверждающее исключение, как показано на рисунке ниже. Это не позволит IDE предлагать этот пакет в будущих подсказках автозаполнения, что поможет вам избежать неактуальных предложений и упростить процесс программирования.
![]()
Вы также можете определить область действия исключения следующим образом:
- IDE Scope: Этот параметр применяет исключение ко всей IDE. Независимо от того, над каким проектом вы работаете, IDE больше не будет предлагать исключенный пакет. Будьте осторожны с этой опцией, так как она может привести к проблемам в будущих проектах, где потребуются другие библиотеки. Если исключить нужный пакет, это может привести к новой катастрофе.
- Project Scope: Как правило, это лучший вариант для исключения определенных пакетов. Преимущество использования области действия проекта заключается в том, что настройки зависят от конкретного проекта и могут быть сохранены в резервной копии. Это гарантирует, что даже если вы обновите IDE до новой версии (например, с Android Studio Koala до Ladybug), ваши настройки исключения останутся нетронутыми для этого проекта, в отличие от IDE scope, которые могут быть потеряны при иммиграции.
Настройка codeInsightSettings.xml
Если вы выбрали опцию проекта для исключения определенных пакетов, вы можете заметить, что в папке .idea создается файл с именем codeInsightSettings.xml. Если его нет, вы можете создать его. Этот файл содержит исключенные пакеты для вашего проекта.
Если вы откроете этот файл, то увидите записи, подобные приведенному ниже примеру, с подробным описанием пакетов, которые вы исключили из предложений по завершению. Это позволяет настройкам оставаться специфичными для проекта и переносимыми, обеспечивая применение одних и тех же исключений при каждом открытии проекта, независимо от обновлений IDE.
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaProjectCodeInsightSettings">
<excluded-names>
<name>java.lang.reflect.Modifier</name>
</excluded-names>
</component>
</project>
Если вы используете Jetpack Compose, Kotlin Flow, Dagger или Hilt, вы можете упростить процесс разработки, скопировав файл codeInsightSettings.xml, представленный ниже, и вставив его в каталог ./idea/codeInsightSettings.xml вашего проекта. Это предотвратит появление ненужных или неактуальных предложений во время автозавершения, что поможет вам сосредоточиться и не отвлекаться.
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaProjectCodeInsightSettings">
<excluded-names>
<name>android.graphics.Canvas</name>
<name>android.graphics.Color</name>
<name>android.graphics.Paint</name>
<name>android.graphics.drawable.Icon</name>
<name>android.inputmethodservice.Keyboard.Row</name>
<name>android.text.Layout.Alignment</name>
<name>android.view.Surface</name>
<name>android.widget.Button</name>
<name>android.widget.GridLayout.Alignment</name>
<name>androidx.core.content.pm.ShortcutInfoCompat.Surface</name>
<name>java.lang.reflect.Modifier</name>
<name>java.nio.file.WatchEvent.Modifier</name>
<name>java.time.format.TextStyle</name>
<name>javax.annotation.concurrent.Immutable</name>
<name>org.threeten.bp.format.TextStyle</name>
<name>org.w3c.dom.Text</name>
<name>java.util.concurrent.Flow</name>
<name>org.intellij.lang.annotations.Flow</name>
<name>jakarta.inject.Inject</name>
</excluded-names>
</component>
</project>
Заключение
Вы узнали, как предотвратить появление ненужных или неактуальных предложений автозаполнения в Android Studio (IDE IntelliJ), что может повысить эффективность разработки. Хотя ваш проект может прекрасно функционировать и без этих оптимизаций IDE, небольшие улучшения в рабочем процессе могут накапливаться со временем, что в конечном итоге приведет к значительному повышению производительности. Выработка привычек, позволяющих оптимизировать среду разработки, в конечном итоге может оказать значительное влияние на общую производительность.
Как всегда, счастливого программирования!
-
Разработка3 недели назадДаем ИИ видеть SwiftUI: Xcode Preview MCP на практике — проблемы и надежды
-
Новости4 недели назадВидео и подкасты о мобильной разработке 2026.39
-
Новости3 недели назадВидео и подкасты о мобильной разработке 2026.40
-
Новости2 недели назадВидео и подкасты о мобильной разработке 2026.41
