На этой странице описаны полезные настройки приложения в файле build.gradle.kts на уровне модуля. Помимо обзора важных свойств, установленных в файле build.gradle.kts , вы узнаете, как:
- Измените идентификатор приложения для разных конфигураций сборки.
- Безопасно настройте пространство имен независимо от идентификатора приложения.
Установите идентификатор приложения
Каждое приложение Android имеет уникальный идентификатор приложения, который выглядит как имя пакета Java или Kotlin, например com.example.myapp . Этот идентификатор уникально идентифицирует ваше приложение на устройстве и в магазине Google Play.
Идентификатор вашего приложения определяется свойством applicationId в файле build.gradle.kts вашего модуля, как показано здесь. Обновите значение applicationId , заменив com.example.myapp идентификатором вашего приложения:
Котлин
android { defaultConfig { applicationId = "com.example.myapp" minSdk = 15 targetSdk = 24 versionCode = 1 versionName = "1.0" } ... }
классный
android { defaultConfig { applicationId "com.example.myapp" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... }
Хотя идентификатор приложения выглядит как традиционное имя пакета Kotlin или Java, правила именования для идентификатора приложения немного более строгие:
- Он должен иметь как минимум два сегмента (одну или несколько точек).
- Каждый сегмент должен начинаться с буквы.
- Все символы должны быть буквенно-цифровыми или символами подчеркивания [a-zA-Z0-9_].
Когда вы создаете новый проект в Android Studio , applicationId автоматически присваивается имя пакета, выбранное вами во время установки. С этого момента вы можете технически переключать эти два свойства независимо, но это не рекомендуется.
При настройке идентификатора приложения рекомендуется выполнить следующие действия:
- Сохраняйте идентификатор приложения таким же, как пространство имен. Различие между этими двумя свойствами может немного сбивать с толку, но если вы сохраните их одинаковыми, вам не о чем беспокоиться.
- Не меняйте идентификатор приложения после публикации приложения. Если вы измените его, Google Play Store будет считать последующую загрузку новым приложением.
- Явно определите идентификатор приложения. Если идентификатор приложения не определен явно с помощью свойства
applicationId, он автоматически принимает то же значение, что и пространство имен. Это означает, что изменение пространства имен приводит к изменению идентификатора приложения, а это обычно не то, что вам нужно.
Изменение идентификатора приложения для тестирования
По умолчанию инструменты сборки применяют идентификатор приложения к APK -файлу тестового инструмента , используя идентификатор приложения для данного варианта сборки, добавленный с помощью .test . Например, тестовый APK для варианта сборки com.example.myapp .free имеет идентификатор приложения com.example.myapp .free.test .
Хотя в этом нет необходимости, вы можете изменить идентификатор приложения, определив свойство testApplicationId в блоке defaultConfig или productFlavor .
Установите пространство имен
Каждый модуль Android имеет пространство имен, которое используется в качестве имени пакета Kotlin или Java для созданных им классов R и BuildConfig .
Ваше пространство имен определяется свойством namespace в файле build.gradle.kts вашего модуля, как показано в следующем фрагменте кода. namespace изначально установлено на имя пакета, которое вы выбираете при создании проекта .
Котлин
android { namespace = "com.example.myapp" ... }
классный
android { namespace "com.example.myapp" ... }
При сборке вашего приложения в окончательный пакет приложения (APK) инструменты сборки Android используют это пространство имен в качестве пространства имен для сгенерированного вашим приложением класса R , который используется для доступа к ресурсам вашего приложения . Например, в предыдущем файле сборки класс R создается по адресу com.example.myapp .R .
Имя, которое вы задаете для namespace файла build.gradle.kts , всегда должно совпадать с именем базового пакета вашего проекта, в котором вы храните свои действия и другой код приложения. В вашем проекте могут быть и другие подпакеты, но эти файлы должны импортировать класс R , используя пространство имен из свойства namespace .
Для упрощения рабочего процесса сохраните пространство имен таким же, как идентификатор приложения, как это происходит по умолчанию.
Изменить пространство имен
В большинстве случаев вам следует оставить пространство имен и идентификатор приложения такими же, как они есть по умолчанию. Однако в какой-то момент вам может потребоваться изменить пространство имен, если вы реорганизуете свой код или чтобы избежать конфликтов пространств имен.
В этих случаях измените пространство имен, обновив свойство namespace в файле build.gradle.kts вашего модуля независимо от идентификатора приложения. Прежде чем сделать это, убедитесь, что идентификатор вашего приложения определен явно, чтобы изменение пространства имен не привело к изменению идентификатора приложения. Дополнительные сведения о том, как пространство имен может повлиять на идентификатор приложения, см. в разделе Установка идентификатора приложения .
Если у вас разные имена для namespace и Gradle applicationId , инструменты сборки копируют идентификатор приложения в окончательный файл манифеста вашего приложения в конце сборки. Поэтому, если вы проверите файл AndroidManifest.xml после сборки, атрибуту package будет присвоен идентификатор приложения. Атрибут package объединенного манифеста — это то, где Google Play Store и платформа Android фактически ищут ваше приложение.
Измените пространство имен для тестирования
Пространством имен по умолчанию для наборов источников androidTest и test является основное пространство имен с добавленным в конце расширением .test . Например, если свойство namespace в файле build.gradle — com.example.myapp , пространство имен тестирования по умолчанию установлено на com.example.myapp .test . Чтобы изменить пространство имен для тестирования, используйте свойство testNamespace , как показано в следующем фрагменте кода:
Котлин
android { namespace = "com.example.myapp" testNamespace = "com.example.mytestapp" ... }
классный
android { namespace "com.example.myapp" testNamespace "com.example.mytestapp" ... }
Внимание: не устанавливайте testNamespace и namespace одно и то же значение, иначе возникнут конфликты пространств имен.
Дополнительную информацию о тестировании см. в разделе Тестирование приложений на Android .