Как настроить модуль приложения

На этой странице описаны полезные настройки приложения в файле build.gradle.kts на уровне модуля. Помимо обзора важных свойств, заданных в файле build.gradle.kts, вы узнаете, как:

  • Измените идентификатор приложения для разных конфигураций сборки.
  • Безопасно настраивайте пространство имен независимо от идентификатора приложения.

Идентификатор приложения

У каждого приложения для Android есть уникальный идентификатор приложения, который выглядит как название пакета Java или Kotlin, например com.example.myapp. Этот идентификатор уникален для вашего приложения на устройстве и в Google Play.

Идентификатор приложения определяется свойством applicationId в файле build.gradle.kts модуля, как показано ниже. Замените значение applicationId (com.example.myapp) на идентификатор своего приложения:

Kotlin

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 будет считать последующие загрузки новым приложением.
  • Явно укажите идентификатор приложения. Если идентификатор приложения не задан явно с помощью свойства 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 используется название пакета, которое вы выбрали при создании проекта.

Kotlin

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 и applicationId Gradle, инструменты сборки скопируют идентификатор приложения в итоговый файл манифеста приложения в конце сборки. Поэтому если вы проверите файл AndroidManifest.xml после сборки, то увидите, что атрибуту package присвоен идентификатор приложения. Google Play и платформа Android идентифицируют приложение по атрибуту package в объединенном манифесте.

Изменение пространства имен для тестирования

Пространство имен по умолчанию для наборов исходных файлов androidTest и test – это основное пространство имен с добавлением .test в конце. Например, если свойство namespace в файле build.gradle имеет значение com.example.myapp, то для пространства имен тестирования по умолчанию задается значение com.example.myapp.test. Чтобы изменить пространство имен для тестирования, используйте свойство testNamespace, как показано в следующем фрагменте кода:

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Яркий

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

Подробнее о тестировании приложений для Android…