Android разработан для работы на множестве различных устройств, таких как телефоны, планшеты и телевизоры. Широкий спектр устройств предоставляет вашему приложению огромную потенциальную аудиторию. Для того чтобы ваше приложение было успешным на всех устройствах, оно должно учитывать вариативность функций и предоставлять гибкий пользовательский интерфейс, адаптирующийся к различным конфигурациям экрана.
Для обеспечения совместимости с устройствами Android предоставляет динамическую структуру приложений, в которой вы можете предоставлять ресурсы приложения , специфичные для конфигурации, в статических файлах, например, различные XML-макеты для разных размеров экрана. Затем Android загружает соответствующие ресурсы в зависимости от текущей конфигурации устройства. Продумав дизайн приложения и добавив дополнительные ресурсы, вы можете опубликовать единый пакет приложения (APK), который оптимизирует пользовательский опыт на различных устройствах.
Однако при необходимости вы можете указать функциональные требования вашего приложения и контролировать, на какие типы устройств вы сможете установить приложение из Google Play Store. В этом документе объясняется, как контролировать доступ к вашим приложениям на каких устройствах и как подготовить их для целевой аудитории.
Что означает "совместимость"?
Что касается разработки под Android, существует два типа совместимости: совместимость с устройством и совместимость с приложением .
Поскольку Android — это проект с открытым исходным кодом, любой производитель оборудования может создать устройство, работающее под управлением операционной системы Android. Но устройство считается «совместимым с Android» только в том случае, если оно может корректно запускать приложения, написанные для среды выполнения Android . Точные характеристики среды выполнения Android определяются программой совместимости Android . Каждое устройство должно пройти набор тестов на совместимость (Compatibility Test Suite, CTS), чтобы считаться совместимым.
Разработчику приложений не нужно беспокоиться о совместимости устройства с Android, поскольку только устройства, совместимые с Android, включают Google Play Store. Таким образом, если пользователь устанавливает ваше приложение из Google Play Store, он использует устройство, совместимое с Android.
Однако необходимо учитывать совместимость вашего приложения с каждой потенциальной конфигурацией устройства. Поскольку Android работает на широком спектре конфигураций устройств, некоторые функции могут быть недоступны на всех устройствах. Например, некоторые устройства могут не иметь датчика компаса. Если основная функциональность вашего приложения требует наличия датчика компаса, то ваше приложение будет совместимо только с устройствами, которые имеют эту функцию.
Контролируйте доступность вашего приложения для различных устройств.
Android поддерживает множество функций, которые ваше приложение может использовать через API платформы. Некоторые функции основаны на аппаратном обеспечении, например, датчик компаса; некоторые — на программном обеспечении, например, виджеты приложения; а некоторые зависят от версии платформы. Не каждое устройство поддерживает все функции, поэтому вам может потребоваться ограничить доступность вашего приложения для устройств в зависимости от необходимых для него функций.
Чтобы охватить как можно больше пользователей вашего приложения, поддерживайте как можно больше конфигураций устройств, используя один APK или AAB-файл. В большинстве случаев это можно сделать, отключив дополнительные функции во время выполнения и предоставив ресурсам приложения альтернативные варианты для различных конфигураций, например, разные макеты для разных размеров экрана. При необходимости вы можете ограничить доступность вашего приложения для определенных устройств через Google Play Store на основе следующих характеристик устройства:
Характеристики устройства
Для управления доступностью вашего приложения в зависимости от функций устройства Android определяет идентификаторы функций для любых аппаратных или программных функций, которые могут быть недоступны на всех устройствах. Например, идентификатор функции для датчика компаса — FEATURE_SENSOR_COMPASS , а идентификатор функции для виджетов приложения — FEATURE_APP_WIDGETS .
При необходимости вы можете запретить пользователям устанавливать ваше приложение, если их устройства не поддерживают необходимую функцию, указав эту функцию с помощью элемента <uses-feature> в файле манифеста вашего приложения.
Например, если ваше приложение не работает на устройстве без датчика компаса, вы можете указать наличие датчика компаса как обязательное требование, используя следующий тег в манифесте:
<manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest>
Google Play Store сравнивает необходимые вашему приложению функции с функциями, доступными на устройстве каждого пользователя, чтобы определить, совместимо ли ваше приложение с каждым устройством. Если устройство не обладает всеми необходимыми вашему приложению функциями, пользователь не сможет его установить.
Однако, если основная функциональность вашего приложения не требует наличия функции устройства, установите атрибут required в значение "false" и проверяйте наличие функции устройства во время выполнения. Если функция приложения недоступна на текущем устройстве, корректно переведите соответствующую функцию приложения в режим пониженной производительности. Например, вы можете проверить доступность функции, вызвав метод hasSystemFeature() следующим образом:
Котлин
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { // This device doesn't have a compass. Turn off the compass feature. disableCompassFeature() }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { // This device doesn't have a compass. Turn off the compass feature. disableCompassFeature(); }
Информацию обо всех фильтрах, которые можно использовать для управления доступностью вашего приложения в Google Play Store, см. в документации по фильтрам в Google Play .
Версия платформы
На разных устройствах могут работать разные версии платформы Android, например, Android 12 или Android 13. Каждая последующая версия платформы часто добавляет API, недоступные в предыдущей версии. Чтобы указать, какой набор API доступен, каждая версия платформы указывает уровень API . Например, Android 12 — это уровень API 31, а Android 13 — уровень API 33.
В файле build.gradle необходимо указать значения minSdkVersion и targetSdkVersion :
Котлин
android { defaultConfig { applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdkVersion(30) // Specifies the API level used to test the app. targetSdkVersion(36) ... } }
Классный
android { defaultConfig { applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdkVersion 30 // Specifies the API level used to test the app. targetSdkVersion 36 ... } }
Для получения более подробной информации о файле build.gradle , прочитайте раздел «Настройка сборки» .
Каждая последующая версия Android обеспечивает совместимость с приложениями, созданными с использованием API предыдущих версий платформы, поэтому ваше приложение будет совместимо с будущими версиями Android, используя при этом документированные API Android.
Однако, если ваше приложение использует API, добавленные в более новой версии платформы, но не требует их для своей основной функциональности, проверьте уровень API во время выполнения и плавно понизьте уровень соответствующих функций, если он окажется слишком низким. В этом случае установите minSdkVersion на минимально возможное значение для основной функциональности вашего приложения, а затем сравните текущую версию системы, SDK_INT , с константой кодового имени в Build.VERSION_CODES , соответствующей уровню API, который вы хотите проверить, как показано в следующем примере:
Котлин
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Running on something older than API level 11, so disable // the drag and drop features that use ClipboardManager APIs. disableDragAndDrop() }
Java
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Running on something older than API level 11, so disable // the drag and drop features that use ClipboardManager APIs. disableDragAndDrop(); }
Настройка экрана
Android работает на устройствах различных размеров, таких как телефоны, планшеты и телевизоры. Для классификации устройств по типу экрана Android определяет две характеристики для каждого устройства: размер экрана (физический размер экрана) и плотность пикселей (физическая плотность пикселей на экране, известная как DPI ). Для упрощения различных конфигураций Android обобщает эти варианты в группы, что облегчает их выбор:
- Четыре обобщенных размера: малый, нормальный, большой и очень большой.
- Несколько обобщенных уровней плотности: mdpi (средний), hdpi (высокий), xhdpi (очень высокий), xxhdpi (сверхвысокий) и другие.
По умолчанию ваше приложение совместимо со всеми размерами и плотностями экрана, поскольку система автоматически подстраивает макет пользовательского интерфейса и графические ресурсы под каждый экран. Предоставьте оптимизированные растровые изображения для распространенных плотностей экрана.
Оптимизируйте пользовательский опыт, максимально используя гибкие макеты. Там, где есть макеты для больших изменений конфигурации, таких как портретная и альбомная ориентация, или большие и маленькие размеры окон, рассмотрите возможность предоставления альтернативных макетов, которые будут гибкими и позволять вносить меньшие изменения в конфигурацию. Это улучшит пользовательский опыт на таких форм-факторах, как планшеты, телефоны и складные устройства. Это также полезно при изменении размера окон в многооконном режиме.
Для получения информации о том, как создавать альтернативные ресурсы для разных экранов и как при необходимости ограничивать отображение приложения определенными размерами экрана, ознакомьтесь с обзором совместимости экранов и рекомендациями по качеству приложений для больших экранов .
Контролируйте доступность вашего приложения в деловых целях.
Помимо ограничения доступности вашего приложения на основе характеристик устройства, вам может потребоваться ограничить его доступность по деловым или юридическим причинам. В таких ситуациях Google Play Store предоставляет в Play Console параметры фильтрации, позволяющие контролировать доступность вашего приложения по нетехническим причинам, таким как местоположение пользователя или оператор мобильной связи.
Фильтрация по технической совместимости — например, по необходимым аппаратным компонентам — всегда основана на информации, содержащейся в вашем APK- или AAB-файле. Но фильтрация по нетехническим причинам — например, по географическому местоположению — всегда обрабатывается в консоли Google Play .
Дополнительные ресурсы:
- Обзор ресурсов приложения
- Информация о том, как структурированы приложения Android для разделения ресурсов приложения от кода приложения, в том числе о том, как можно предоставлять альтернативные ресурсы для конкретных конфигураций устройства.
- Фильтры в Google Play
- Информация о различных способах, которыми Google Play Store может предотвратить установку вашего приложения на разные устройства.
- Разрешения на Android
- Как Android ограничивает доступ приложений к определенным API с помощью системы разрешений, которая требует согласия пользователя для использования этих API вашим приложением.