Чтобы создать качественное приложение, следуйте основным рекомендациям по обеспечению качества.
В них определены минимальные требования к качеству, которым должны соответствовать все приложения.
Качество адаптивных приложений
Приложения Android работают на самых разных устройствах – от компактных телефонов до планшетов, складных устройств, настольных компьютеров, подключенных дисплеев, автомобильных информационно-развлекательных систем, телевизоров и XR. Оконные режимы, такие как разделение экрана и многооконный режим, позволяют запускать приложения в изменяемых по размеру частях экрана.
Следуйте рекомендациям по обеспечению качества адаптивных и основных приложений, чтобы:
- Создавайте приложения, оптимизированные для всех типов устройств и размеров экрана.
- Как повысить позиции приложений в списках и результатах поиска Google Play
- Привлекайте больше пользователей и повышайте удержание пользователей
Правила
Ниже приведены основные рекомендации по созданию качественного приложения.
Удобство использования
Стандартный визуальный дизайн и логика взаимодействия Android обеспечивают единообразие и удобство интерфейса.
По возможности используйте компоненты Material Design для создания пользовательского интерфейса приложения вместо компонентов платформы Android. Material Design обеспечивает современный внешний вид Android и единообразие пользовательского интерфейса в разных версиях Android.
Удобство использования
| ID | Тесты | Описание |
|---|---|---|
| Consistent_UX | T-Consistent_UX, T-SD_Card |
Приложение обеспечивает стабильное удобство использования для всех сценариев использования на всех типах устройств. |
| App_Switcher | T-App_Switcher, T-SD_Card |
Приложение переходит в фоновый режим, когда фокус переключается на другое приложение. Приложение возвращается в активный режим, когда пользователь повторно активирует его из переключателя приложений Недавние. |
| Sleep_Resume | T-Sleep_Resume, T-SD_Card |
Если приложение активно, оно приостанавливается, когда устройство переходит в спящий режим, и возобновляет работу, когда устройство выходит из него. |
| Lock_Resume | T-Lock_Resume, T-SD_Card |
Если приложение активно, оно приостанавливается при блокировке устройства и возобновляет работу при разблокировке. |
Пользовательский интерфейс
| ID | Тесты | Описание |
|---|---|---|
| Display_State_Parity | T-Orientation_Transitions |
При изменении ориентации экрана или положения устройства доступные функции и взаимодействия остаются прежними. |
| Fullscreen_Display | T-Orientation_Transitions |
Приложение заполняет окно в обеих ориентациях, и леттербокс не применяется из-за изменений конфигурации, в том числе когда пользователь складывает и раскладывает устройство. Допускается незначительное кашетирование для компенсации небольших различий в геометрии экрана. |
| Orientation_Transitions | T-Orientation_Transitions | Приложение обрабатывает быструю смену ориентации экрана, а также складывание и раскладывание устройства без проблем с отрисовкой и потерей состояния. |
Качество изображения
| ID | Тесты | Описание |
|---|---|---|
| Graphic_Quality | T-Graphic_Quality |
Графика, текст, изображения и другие элементы интерфейса отображаются без заметных искажений, размытия или пикселизации.
|
| Line_Length | T-Line_Length | Приложение обеспечивает удобочитаемость текста и текстовых блоков, ограничивая длину строки до 45–75 символов (включая пробелы) для каждого из поддерживаемых языков. |
| Theme_Support | T-Theme_Support | Контент приложения и весь веб-контент, к которому оно обращается, поддерживают как светлую, так и тёмную темы. |
Навигация
| ID | Тесты | Описание |
|---|---|---|
| Back_Button_Nav | T-Back_Nav | Приложение поддерживает стандартную навигацию с помощью кнопки "Назад" и не использует собственные экранные подсказки для этой кнопки. |
| Back_Gesture_Nav | T-Back_Nav | Приложение поддерживает навигацию жестами для возврата назад и перехода на главный экран. |
| State_Preservation | T-State_Preservation, T-Back_Nav |
Приложение сохраняет состояние пользователя или приложения при переходе из активного режима и предотвращает случайную потерю данных из-за обратной навигации или других изменений состояния. При возврате на передний план приложение восстанавливает сохраненное состояние и все ожидающие транзакции с сохранением состояния. Например, это могут быть изменения в редактируемых полях, прогрессе игры, меню, видео и других разделах приложения.
|
Уведомления
| ID | Тесты | Описание |
|---|---|---|
| Notification_Quality | T-Notification_Quality |
Уведомления содержат важную информацию о вашем приложении.
|
| Conversation_Quality | T-Notification_Quality |
Для мессенджеров, социальных приложений и чатов:
|
Специальные возможности
| ID | Тесты | Описание |
|---|---|---|
| Touch_Target_Size | T-Touch_Target_Size | Область прикосновения не менее 48 dp. Ознакомьтесь с рекомендациями по размерам целевых объектов в Material Design. |
| Visual_Contrast | T-Visual_Contrast |
Текст и контент на переднем плане приложения имеют следующие коэффициенты контрастности с фоном:
Подробнее о цвете и контрасте… |
| Content_Description | T-Content_Description | Опишите каждый элемент интерфейса, кроме TextView, с помощью contentDescription. |
функциональные возможности.
В приложении должны быть реализованы следующие функции:
Аудио
| ID | Тесты | Описание |
|---|---|---|
| Audio_Playback_Start | T-Audio_Playback_Start |
Когда пользователь запускает воспроизведение аудио, приложение должно в течение одной секунды выполнить одно из следующих действий:
|
| Audio_Focus_Request | T-Audio_Focus_Request | Приложение должно запрашивать аудиофокус, когда начинается воспроизведение аудио, и отменять запрос, когда воспроизведение прекращается. |
| Audio_Focus_Change | T-Audio_Focus_Change | Приложение должно обрабатывать запросы других приложений на управление звуком. Например, приложение может уменьшить громкость воспроизведения, когда другое приложение воспроизводит речь. |
| Audio_Playback_Background | T-Audio_Playback_Background | Приложение должно поддерживать фоновое воспроизведение. Приложение должно использовать активную службу, чтобы система не завершала его процесс, когда оно невидимо. Кроме того, в строке состояния или на заблокированном экране должно показываться постоянное уведомление о том, что приложение запущено. У пользователей должна быть возможность управлять воспроизведением с помощью уведомлений, элементов управления на заблокированном экране или подключенного аксессуара. |
| Audio_Notification_Style | T-Audio_Notification_Style | Когда приложение воспроизводит аудио в фоновом режиме, оно должно создавать уведомление со стилем MediaStyle. |
| Audio_Playback_Resume | T-Audio_Playback_Resume | Если приложение находится в фоновом режиме и воспроизведение аудио приостановлено, оно должно возобновляться, когда приложение возвращается в активный режим. В противном случае приложение должно сообщать пользователю, что воспроизведение приостановлено. |
Видео
| ID | Тесты | Описание |
|---|---|---|
| Video_PiP | T-Video_PiP | Если приложение воспроизводит видео, оно должно поддерживать режим картинка в картинке. |
| Video_Encoding | T-Video_Encoding | Если приложение кодирует видео, оно должно использовать стандарт сжатия HEVC. |
| Video_Playback_Background | T-Video_Playback_Background | Приложение поддерживает фоновое воспроизведение видео, когда оно не является основным, в том числе когда окно приложения:
|
Совместный доступ
| ID | Тесты | Описание |
|---|---|---|
| System_Sharesheet | T-System_Sharesheet | Для отправки контента в приложении должна использоваться панель "Поделиться". Приложение может предлагать цели, недоступные для пользовательских решений. |
Фоновые службы
| ID | Тесты | Описание |
|---|---|---|
| Background_Service_Optimization | T-Background_Service_Optimization |
Приложение не запускает в фоновом режиме службы, которые работают слишком долго, чтобы не мешать работе устройства. Примечание. Система накладывает различные ограничения на фоновые службы. Ниже приведены примеры недопустимого использования фоновых служб.
Подробнее о фоновых задачах… |
Производительность и стабильность
Приложение должно обеспечивать оптимальную производительность, стабильность, совместимость и адаптивность.
Эффективность
| ID | Тесты | Описание |
|---|---|---|
| App_Startup_Time | T-App_Startup_Time | Приложение загружается быстро или показывает пользователю индикатор загрузки или другие подсказки, если на запуск требуется больше двух секунд. |
| Rendering_Performance | T-Rendering_Performance | Приложение отрисовывает кадры каждые 16 миллисекунд или чаще, чтобы показывать не менее 60 кадров в секунду. Подробнее о медленной отрисовке… |
| StrictMode_Compliance | T-StrictMode_Compliance | Если включен режим StrictMode (см. раздел о тестировании StrictMode), при тестировании приложения не появляются красные вспышки (предупреждения о производительности от StrictMode). |
Стабильность
| ID | Тесты | Описание |
|---|---|---|
| Stability_ANR | T-Stability_ANR | Приложение не завершает работу со сбоем и не блокирует поток UI, вызывая ошибки ANR (Android Not Responding). Используйте отчет о тестировании в Google Play, чтобы выявлять потенциальные проблемы со стабильностью. После развертывания отслеживайте показатели на странице Android Vitals в Google Play Console. |
SDK
| ID | Тесты | Описание |
|---|---|---|
| Android_Platform_Compatibility | T-Android_Platform_Compatibility | Приложение работает на последней общедоступной версии платформы Android без сбоев и серьезных проблем с основными функциями. |
| Target_SDK_Version | T-Target_SDK_Version | Приложение должно быть ориентировано на последнюю версию Android SDK, чтобы соответствовать требованиям Google Play. Для этого нужно задать значение targetSdk в файле build.gradle модуля приложения. |
| Compile_SDK_Version | T-Target_SDK_Version | Приложение создано с помощью последней версии Android SDK. Для этого в файле build.gradle модуля приложения задано значение compileSdk. |
| SDK_Maintenance | T-SDK_Maintenance, T-Non_SDK_Interfaces |
Все используемые SDK Google и сторонних разработчиков актуальны. Любые улучшения этих SDK, связанные со стабильностью, совместимостью или безопасностью, должны своевременно предоставляться пользователям. Если вы используете SDK от Google, выбирайте те, которые работают на основе сервисов Google Play. Эти SDK обратно совместимы, автоматически обновляются, уменьшают размер пакета приложения и эффективно используют ресурсы устройства. |
| Non_SDK_Interfaces | T-Non_SDK_Interfaces | Приложение не использует интерфейсы, не относящиеся к SDK. |
| Production_Build_Quality | T-Production_Build_Quality | В рабочей версии приложения нет библиотек отладки. Они могут вызывать проблемы с производительностью и безопасностью. |
Батарея
| ID | Тесты | Описание |
|---|---|---|
| Power_Management | T-Power_Management |
Приложение поддерживает функции управления энергопотреблением Спящий режим и App Standby. Приложения могут запрашивать исключение из режима энергосбережения. Ознакомьтесь с разделом Поддержка других сценариев использования в статье Оптимизация для спящего режима и App Standby. |
Конфиденциальность и безопасность
Приложение безопасно обрабатывает пользовательские данные и личную информацию и предоставляет соответствующие уровни разрешений.
Приложения, опубликованные в Google Play, также должны соответствовать правилам Google Play в отношении пользовательских данных, чтобы защищать конфиденциальность пользователей.
Разрешения
| ID | Тесты | Описание |
|---|---|---|
| Minimize_Permissions | T-Minimize_Permissions | Приложение запрашивает только те разрешения, которые необходимы для работы. Для некоторых разрешений, например на доступ к местоположению, приложение по возможности использует приблизительные данные вместо точных. Подробнее о том, как свести к минимуму запросы разрешений. |
| Sensitive_Permissions | T-Sensitive_Permissions |
Приложение запрашивает доступ к конфиденциальным данным (например, группам разрешений для SMS или списка вызовов или местоположению) или платным сервисам (например, к телефону или SMS), только если это напрямую связано с основными функциями приложения. Пользователь должен быть явно проинформирован о последствиях предоставления этих разрешений. В зависимости от того, как ваше приложение использует разрешения, может быть доступен альтернативный способ реализации функций без доступа к конфиденциальной информации. Например, вместо того чтобы запрашивать разрешения, связанные с контактами пользователя, используйте неявное намерение. |
| Runtime_Permissions | T-Runtime_Permissions | Приложение запрашивает динамические разрешения, когда требуется доступ для работы функции, а не при запуске. |
| Permission_Rationale | T-Permission_Rationale | В приложении четко объясняется, зачем нужны разрешения. |
| Graceful_Degradation | T-Graceful_Degradation | Приложение постепенно сокращает функциональность, когда пользователи отказываются предоставить разрешение или отменяют его. Приложение не должно полностью блокировать доступ пользователя. |
Данные и файлы
| ID | Тесты | Описание |
|---|---|---|
| Sensitive_Data_Storage | T-Sensitive_Data_Storage, T-Sensitive_Data_Handling |
Все конфиденциальные данные хранятся во внутренней памяти приложения. |
| Sensitive_Data_Logging | T-Sensitive_Data_Logging | Личные и конфиденциальные пользовательские данные не записываются в системный журнал или журнал приложения. |
| Hardware_IDs | T-Hardware_IDs | Приложение не использует несбрасываемые идентификаторы оборудования, например IMEI, для идентификации. |
Резервное копирование и восстановление данных
| ID | Тесты | Описание |
|---|---|---|
| App_Data_Backup | T-App_Data_Backup |
Приложение сохраняет пользовательские данные, настройки и состояние в резервных копиях в облаке и при переносе с одного устройства на другое. Реализуйте автоматическое копирование в облако и настройте |
| App_Logins_Restoration | T-App_Logins_Restoration |
Приложение автоматически восстанавливает аккаунты пользователей и статус входа, когда пользователь настраивает новое устройство. Реализуйте восстановление учетных данных с помощью Менеджера учетных данных, чтобы автоматически выполнять повторную аутентификацию пользователей без необходимости входа вручную или восстановления доступа к аккаунту. |
Идентификационные данные
| ID | Тесты | Описание |
|---|---|---|
| Autofill_Hints | T-Autofill_Hints | Приложение предоставляет подсказки для автозаполнения учетных данных аккаунта и другой конфиденциальной информации, например данных кредитных карт, физического адреса и номера телефона. |
| Credential_Manager | T-Credential_Manager | В приложении используется Менеджер учетных данных для Android, который упрощает вход и поддерживает ключи доступа, федеративную идентификацию и пароли. |
| Biometric_Authentication | T-Biometric_Authentication | Приложение поддерживает биометрическую аутентификацию для защиты финансовых транзакций или конфиденциальной информации, например важных документов пользователя. |
Компоненты приложения
| ID | Тесты | Описание |
|---|---|---|
| Component_Export | T-Component_Export |
В приложении явно задан атрибут Экспортируются только компоненты приложения, которые обмениваются данными с другими приложениями или должны вызываться другими приложениями. |
| Component_Permissions | T-Component_Permissions |
Все интенты и широковещательные сообщения соответствуют рекомендациям:
|
| Component_Protection | T-Component_Protection |
Все компоненты, которые обмениваются контентом между приложениями, используют Приложения не должны полагаться на доступ к списку установленных пакетов. |
Сети
| ID | Тесты | Описание |
|---|---|---|
| Network_Security_Traffic | T-Network_Security_Traffic | Весь сетевой трафик передается по протоколу SSL. |
| Network_Security_Configuration | T-Network_Security_Configuration | В приложении объявлена конфигурация сетевой безопасности. |
| Security_Provider_Initialization | T-Security_Provider_Initialization | Если приложение использует сервисы Google Play, поставщик услуг безопасности инициализируется при запуске приложения. |
Элементы WebView
| ID | Тесты | Описание |
|---|---|---|
| WebView_Asset_Loader | T-WebView_Asset_Loader, T-WebView_Navigation |
Не используйте setAllowUniversalAccessFromFileURLs() для доступа к локальному контенту. Вместо него необходимо использовать WebViewAssetLoader. |
| WebView_JavaScript | T-WebView_JavaScript, T-WebView_Navigation |
Веб-просмотры не используют В Android 6.0 (уровень API 23 и выше) используйте каналы сообщений HTML. |
Выполнение
| ID | Тесты | Описание |
|---|---|---|
| App_Bundles | T-App_Bundles |
Приложение не загружает динамически код из источников за пределами APK-файла. Используйте наборы Android App Bundle, которые включают Play Feature Delivery и Play Asset Delivery. С августа 2021 года все новые приложения в Google Play должны публиковаться в формате набора Android App Bundle. |
Криптография
| ID | Тесты | Описание |
|---|---|---|
| Cryptographic_Algorithms | T-Cryptographic_Algorithms | Приложение использует надежные криптографические алгоритмы и генератор случайных чисел, предоставляемые платформой. Кроме того, в приложении не используются специальные алгоритмы. |
Google Play
Опубликуйте приложение в Google Play.
Правила
| ID | Тесты | Описание |
|---|---|---|
| Play_Content_Policies | T-Play_Content_Policies | Приложение строго соответствует правилам Google Play в отношении контента, не содержит неприемлемых материалов и не использует чужую интеллектуальную собственность или бренд. |
| Play_Content_Rating | T-Play_Content_Policies | Возрастные ограничения для приложения установлены в соответствии с правилами в отношении возрастных ограничений. |
Страница сведений о приложении
| ID | Тесты | Описание |
|---|---|---|
| Play_Feature_Graphic | T-Play_Feature_Graphic, T-Play_Graphic_Assets |
Картинка для описания приложения соответствует рекомендациям, приведенным в этой статье Справочного центра. Убедитесь в следующем:
|
| Play_Device_References | T-Play_Graphic_Assets | На скриншотах и в видео не показаны устройства, работающие не на Android. |
| Play_Misleading_Content | T-Play_Graphic_Assets | Скриншоты и видео не вводят пользователей в заблуждение относительно контента и функций приложения. |
Поддержка пользователей
| ID | Тесты | Описание |
|---|---|---|
| Play_User_Reviews | T-Play_Content_Policies | Если ошибки, о которых часто сообщают пользователи на вкладке Отзывы в Google Play, воспроизводятся и возникают на разных устройствах, они устраняются. Если ошибка возникает только на нескольких устройствах, ее все равно следует устранить, если эти устройства особенно популярны или новы. |
Тестовая среда
Настройте тестовую среду следующим образом:
Тестирование в эмуляторе. Эмулятор Android – отличный инструмент для тестирования приложения на разных версиях Android и разрешениях экрана. Настройте эмулированные устройства (AVD), чтобы представить наиболее распространенные форм-факторы и комбинации аппаратного и программного обеспечения для вашей целевой пользовательской базы. Протестируйте приложение на разных типах устройств, используя как минимум следующие эмуляторы:
- Складные устройства: 7,6-дюймовый складной экран с внешним дисплеем (в Менеджере AVD относится к телефонам).
- Планшет: Pixel C 9,94 дюйма (2560 x 1800 пикселей)
- Тестирование уведомлений в мобильном приложении: подключите мобильное устройство или эмулятор к эмулятору Wear OS (Wear OS Round 1,84").
Аппаратные устройства. В тестовую среду следует включить небольшое количество реальных аппаратных устройств, представляющих основные форм-факторы и комбинации аппаратного и программного обеспечения, доступные потребителям. Вам не нужно тестировать на каждом устройстве, которое есть на рынке. Сосредоточьтесь на небольшом количестве репрезентативных устройств, даже если вы используете одно или два устройства на каждый форм-фактор.
Лаборатории тестирования устройств. Вы также можете использовать сторонние сервисы, такие как Firebase Test Lab, чтобы протестировать приложение на различных устройствах.
Протестируйте приложение на последней версии Android. Помимо тестирования на версиях Android, которые использует ваша целевая аудитория, всегда проверяйте приложение на последней версии Android. Это позволит убедиться, что последние изменения в поведении не влияют на удобство использования приложения.
Дополнительные сведения о тестировании, в том числе модульном, интеграционном и тестировании интерфейса, можно найти в статье Основы тестирования приложений для Android.
StrictMode
Чтобы протестировать производительность, включите в приложении режим StrictMode. Он позволяет StrictModeвыявить операции, которые могут повлиять на производительность, доступ к сети, а также чтение и запись файлов. Ищите потенциально проблемные операции как в основном потоке, так и в других.
Настройте правило мониторинга для каждого потока с помощью StrictMode.ThreadPolicy.Builder и включите все поддерживаемые функции мониторинга в ThreadPolicy с помощью detectAll().
Включите визуальные уведомления о нарушениях правил для ThreadPolicy с помощью penaltyFlashScreen().
Тесты
Тесты, описанные в этом разделе, помогут вам оценить основные аспекты качества приложения. Вы можете объединять их или интегрировать группы тестов в свой план тестирования.
Удобство использования
Протестируйте приложение, чтобы убедиться, что оно удобно и понятно для пользователей.
Удобство использования
| ID | Функция | Описание |
|---|---|---|
| T-Consistent_UX | Consistent_UX |
Перейдите во все разделы приложения: на все экраны, в диалоговые окна, настройки и пути пользователя. Выполните следующие действия:
|
| T-App_Switcher | App_Switcher | На каждом экране приложения переключитесь на другое запущенное приложение, а затем вернитесь к тестируемому приложению с помощью переключателя приложений Недавние. |
| T-Sleep_Resume | Sleep_Resume | Нажмите кнопку питания, чтобы перевести устройство в спящий режим, а затем нажмите ее снова, чтобы вывести экран из спящего режима. |
| T-Lock_Resume | Lock_Resume | Настройте блокировку экрана на устройстве. Нажмите кнопку питания, чтобы перевести устройство в спящий режим (при этом оно будет заблокировано). Затем нажмите кнопку питания ещё раз, чтобы включить экран и разблокировать устройство. |
SD-карта
| ID | Функция | Описание |
|---|---|---|
| T-SD_Card | Consistent_UX |
Проверьте основные функции приложения, установленного на SD-карту (если приложение поддерживает такой способ установки). Чтобы переместить приложение на SD-карту, откройте настройки приложения. |
Пользовательский интерфейс
| ID | Функция | Описание |
|---|---|---|
| T-Orientation_Transitions | Display_State_Parity, Fullscreen_Display, Orientation_Transitions |
На каждом экране приложения поверните устройство между альбомной и портретной ориентациями, а также сложенным и разложенным состояниями не менее трех раз. Убедитесь, что приложение выполняет следующие действия:
|
Качество изображения
| ID | Функция | Описание |
|---|---|---|
| T-Graphic_Quality | Graphic_Quality | Проверьте все функции приложения. Убедитесь, что все визуальные элементы, включая графику, текст, изображения и другие элементы интерфейса, не искажены, не размыты и не пикселизированы. |
| T-Line_Length | Line_Length |
Проверьте все текстовые блоки в приложении. Убедитесь, что длина строк в них не превышает 45–75 символов (включая пробелы). Проверьте следующее:
|
| T-Theme_Support | Theme_Support | Убедитесь, что весь текст читается как в светлой, так и в тёмной теме. Убедитесь, что все визуальные элементы хорошо различимы и эстетичны в светлой и темной темах. |
Навигация
| ID | Функция | Описание |
|---|---|---|
| T-Back_Nav | Back_Button_Nav, Back_Gesture_Nav |
Перейдите во все разделы приложения: на все экраны, в диалоговые окна, настройки и пути пользователя. На любом экране приложения нажмите кнопку Назад или проведите по экрану назад. Приложение должно перейти на предыдущий или главный экран. |
| T-State_Preservation | State_Preservation | На экране каждого приложения нажмите кнопку Главный экран или проведите вверх, если вы используете навигацию жестами, а затем перезапустите приложение с экрана Все приложения. |
Уведомления
| ID | Функция | Описание |
|---|---|---|
| T-Notification_Quality | Notification_Quality, Conversation_Quality |
Активируйте и посмотрите на панели уведомлений все типы уведомлений, которые может показывать приложение. Разверните уведомления, если это возможно (Android 4.1 и более поздние версии), и нажмите на все доступные действия. |
Специальные возможности
| ID | Функция | Описание |
|---|---|---|
| T-Touch_Target_Size | Touch_Target_Size | Убедитесь, что области прикосновения сохраняют одинаковый размер и положение на экранах всех размеров и конфигураций. Подробнее о Сканере доступности… |
| T-Visual_Contrast | Visual_Contrast | Проверьте контрастность всех визуальных элементов. |
| T-Content_Description | Content_Description | Убедитесь, что у всех элементов интерфейса, кроме TextView, есть описания контента. |
функциональные возможности.
Убедитесь, что в вашем приложении реализованы следующие функции:
Аудио
| ID | Функция | Описание |
|---|---|---|
| T-Audio_Playback_Start | Audio_Playback_Start | Начать воспроизведение аудио. Убедитесь, что в течение одной секунды приложение начинает воспроизводить аудио или показывает визуальный индикатор того, что аудиоданные подготавливаются к воспроизведению. |
| T-Audio_Focus_Request | Audio_Focus_Request | Начать воспроизведение аудио. Приложение должно запрашивать фокус воспроизведения аудио. Когда воспроизведение аудио прекращается, приложение должно отказаться от аудиофокуса (это происходит автоматически в приложениях, предназначенных для Android 12 (уровень API 31) и более поздних версий). |
| T-Audio_Focus_Change | Audio_Focus_Change | Начать воспроизведение аудио. Запустите воспроизведение аудио в другом приложении. Ваше приложение должно отреагировать на изменение фокуса аудио и остановить воспроизведение или уменьшить громкость. |
| T-Audio_Playback_Background | Audio_Playback_Background | Начать воспроизведение аудио. Взаимодействуйте с другим неаудиоприложением в качестве активного приложения. Приложение должно продолжать воспроизводить аудио в фоновом режиме и отображать уведомление в строке состояния. Убедитесь, что вы можете управлять воспроизведением с помощью элементов управления в уведомлении. Заблокируйте экран устройства. Приложение должно продолжить воспроизведение аудио в фоновом режиме и показать уведомление на заблокированном экране. Убедитесь, что вы можете управлять воспроизведением с помощью элементов управления в уведомлении. |
| T-Audio_Notification_Style | Audio_Notification_Style | Начать воспроизведение аудио. Взаимодействуйте с другим приложением, не воспроизводящим аудио, в качестве активного приложения. Убедитесь, что ваше приложение продолжает воспроизводить аудио в фоновом режиме и создало уведомление в стиле MediaStyle. Подробнее о работе с элементами управления мультимедиа… |
| T-Audio_Playback_Resume | Audio_Playback_Resume | Начать воспроизведение аудио. Взаимодействуйте с другим приложением, не воспроизводящим аудио, как с активным. Взаимодействуйте со своим приложением, чтобы сделать его активным. Воспроизведение аудио должно возобновиться или громкость должна восстановиться. В противном случае приложение должно сообщить пользователю, что воспроизведение приостановлено. |
Видео
| ID | Функция | Описание |
|---|---|---|
| T-Video_PiP | Video_PiP | Включите воспроизведение видео в режиме "картинка в картинке". |
| T-Video_Encoding | Video_Encoding | Убедитесь, что приложение кодирует видео с использованием стандарта сжатия HEVC. |
| T-Video_Playback_Background | Video_Playback_Background | Запустите воспроизведение видео. Сверните окно приложения или откройте другое приложение, чтобы переместить окно приложения в фоновый режим. На устройствах с поддержкой режима рабочего стола переместите окно приложения за пределы видимой области рабочего стола. Убедитесь, что воспроизведение видео не прерывается ни в одном из случаев. |
Совместный доступ
| ID | Функция | Описание |
|---|---|---|
| T-System_Sharesheet | System_Sharesheet | Создайте намерение и запустите действие, вызвав startActivity() с намерением в качестве аргумента. Подробнее о том, как использовать панель "Поделиться" в Android… В приложении должна показываться панель "Поделиться". |
Фоновые службы
| ID | Функция | Описание |
|---|---|---|
| T-Background_Service_Optimization | Background_Service_Optimization | Используйте все основные функции приложения. Убедитесь, что не запускаются долго работающие фоновые службы. Переключитесь на другое приложение, чтобы отправить текущее в фоновый режим. Перейдите в Настройки и проверьте, есть ли у приложения сервисы, работающие в фоновом режиме. На устройствах с Android 4.0 и более поздними версиями ОС перейдите в раздел Приложения и найдите нужное приложение на вкладке Работающие. |
Производительность и стабильность
Проверьте производительность, стабильность и качество изображения.
Эффективность
| ID | Функция | Описание |
|---|---|---|
| T-App_Startup_Time | App_Startup_Time | Запустите приложение. Убедитесь, что оно загружается быстро или показывает индикатор загрузки или другие подсказки, если на запуск требуется больше двух секунд. |
| T-Rendering_Performance | Rendering_Performance | Используйте все основные функции приложения. Убедитесь, что оно отрисовывает не менее 60 кадров в секунду. Чтобы протестировать приложение, используйте параметр Профилирование отрисовки HWUI. |
| T-StrictMode_Compliance | StrictMode_Compliance |
Включите Уделяйте особое внимание сборке мусора и ее влиянию на удобство для пользователей. |
Стабильность
| ID | Функция | Описание |
|---|---|---|
| T-Stability_ANR | Stability_ANR | Используйте все основные функции приложения. Убедитесь, что оно не дает сбоев и не блокирует поток UI, вызывая ошибки ANR ("Приложение не отвечает"). Проверьте отчет о тестировании в Google Play, чтобы выявить возможные проблемы со стабильностью. |
SDK
| ID | Функция | Описание |
|---|---|---|
| T-Android_Platform_Compatibility | Android_Platform_Compatibility | Запустите приложение на последней общедоступной версии платформы Android. Использование всех основных функций. Убедитесь, что приложение не дает сбоев и работает без потери основных функций. |
| T-Target_SDK_Version | Target_SDK_Version, Compile_SDK_Version |
Проверьте файл манифеста Android и конфигурацию сборки, чтобы убедиться, что приложение создано с использованием последней доступной версии SDK (targetSdk и compileSdk). |
| T-SDK_Maintenance | SDK_Maintenance | Проверьте файл build.gradle приложения на наличие устаревших зависимостей. |
| T-Non_SDK_Interfaces | Non_SDK_Interfaces | Используйте инструмент lint в Android Studio, чтобы обнаружить использование интерфейсов, не относящихся к SDK. Альтернативные методы тестирования описаны в статье Ограничения для интерфейсов, не относящихся к SDK. |
| T-Production_Build_Quality | Production_Build_Quality | Проверьте файл build.gradle приложения на наличие библиотек отладки. |
Батарея
| ID | Функция | Описание |
|---|---|---|
| T-Power_Management | Power_Management |
Используйте все основные функции приложения в спящем режиме и режиме App Standby. Убедитесь, что будильники, таймеры, уведомления и синхронизация работают правильно в период обслуживания спящего режима и когда приложение выходит из режима App Standby. Протестируйте работу спящего режима и App Standby с помощью команд ADB (требования и инструкции приведены в статье Тестирование спящего режима и App Standby). Чтобы диагностировать быстрый расход батареи, используйте Android Studio Power Profiler или инструмент Battery Historian в сочетании с запланированной фоновой работой. |
Конфиденциальность и безопасность
Проверьте, соответствуют ли средства защиты конфиденциальности и безопасности ожиданиям пользователей.
Разрешения
| ID | Функция | Описание |
|---|---|---|
| T-Minimize_Permissions | Minimize_Permissions | Проверьте все разрешения, которые требуются вашему приложению, в файле манифеста, во время выполнения и в настройках приложения на устройстве (Настройки > О приложении). |
| T-Sensitive_Permissions | Sensitive_Permissions | Используйте функции приложения, которые запрашивают разрешения. Убедитесь, что приложение запрашивает разрешение на доступ к конфиденциальным данным или сервисам только для основных сценариев использования. Убедитесь, что пользователь понимает, к каким последствиям приведет предоставление доступа к конфиденциальным данным и сервисам. |
| T-Runtime_Permissions | Runtime_Permissions | Используйте все функции приложения, для которых требуются разрешения. Убедитесь, что разрешения запрашиваются по мере необходимости, то есть только при доступе к функциям, а не при запуске приложения. |
| T-Permission_Rationale | Permission_Rationale | Используйте все функции приложения, для которых требуются разрешения. Убедитесь, что в приложении объясняется, зачем нужны разрешения. |
| T-Graceful_Degradation | Graceful_Degradation | Используйте все функции приложения, для которых требуются разрешения. Запретите или отзовите разрешения. Убедитесь, что приложение предлагает альтернативный вариант использования и продолжает работать. |
Данные и файлы
| ID | Функция | Описание |
|---|---|---|
| T-Sensitive_Data_Storage | Sensitive_Data_Storage | Проверьте все данные, хранящиеся во внутренней памяти. Убедитесь, что данные, хранящиеся во внешних источниках, не являются конфиденциальными. |
| T-Sensitive_Data_Handling | Sensitive_Data_Storage | Проверьте, как обрабатываются данные, загруженные из внешнего хранилища. |
| T-Sensitive_Data_Logging | Sensitive_Data_Logging | Используйте все основные функции приложения, отслеживая журнал устройства. Убедитесь, что в журнал не записывается личная информация пользователей. |
| T-Hardware_IDs | Hardware_IDs | Используйте все основные функции приложения. Убедитесь, что приложение не использует для идентификации аппаратные идентификаторы, например IMEI. |
Резервное копирование и восстановление данных
| ID | Функция | Описание |
|---|---|---|
| T-App_Data_Backup | App_Data_Backup |
Настройте локальные предпочтения, базы данных и параметры приложения на основном устройстве. Выполните резервное копирование в облако или перенесите данные на новое устройство. Запустите приложение на целевом устройстве после переноса и убедитесь, что локальные параметры, состояние базы данных и пользовательские настройки восстановлены в соответствии с правилами автоматического копирования в облако. Подробные инструкции по тестированию приведены в разделе Тестирование резервного копирования и восстановления. |
| T-App_Logins_Restoration | App_Logins_Restoration |
Настройте сеанс с входом в аккаунт на основном устройстве, используя ключи доступа, пароли или функцию "Войти с аккаунтом Google". Выполните резервное копирование в облако или перенесите данные на новое устройство. Запустите приложение на целевом устройстве после переноса и убедитесь, что аутентификация восстанавливается автоматически с помощью Restore Credentials без показа экранов входа и необходимости восстанавливать аккаунт. Подробные инструкции по тестированию приведены в разделе Тестирование учетных данных для восстановления. |
Идентификационные данные
| ID | Функция | Описание |
|---|---|---|
| T-Autofill_Hints | Autofill_Hints | Используйте все функции приложения, требующие ввода данных пользователем. Убедитесь, что приложение предоставляет подсказки для автозаполнения полей ввода, например учетных данных аккаунта и другой конфиденциальной информации. |
| T-Credential_Manager | Credential_Manager | Войдите в приложение. Убедитесь, что в нем интегрирован Менеджер учетных данных для Android, который позволяет входить с помощью ключей доступа, федеративной идентификации и паролей. |
| T-Biometric_Authentication | Biometric_Authentication | Использовать все функции приложения, для которых требуется аутентификация. Убедитесь, что приложение защищает финансовые транзакции и конфиденциальную информацию, например важные документы пользователя, с помощью биометрической аутентификации. |
Компоненты приложения
| ID | Функция | Описание |
|---|---|---|
| T-Component_Export | Component_Export | Проверьте все компоненты приложения, определенные в файле манифеста Android, на предмет правильного состояния экспорта. Свойство exported должно быть явно задано для всех компонентов. |
| T-Component_Permissions | Component_Permissions | Проверьте все разрешения, которые требуются вашему приложению, в файле манифеста, во время выполнения и в настройках приложения на устройстве (Настройки > О приложении). |
| T-Component_Protection | Component_Protection | Проверьте всех поставщиков контента, определенных в файле манифеста Android. Убедитесь, что у каждого поставщика есть подходящий protectionLevel. |
Сети
| ID | Функция | Описание |
|---|---|---|
| T-Network_Security_Traffic | Network_Security_Traffic | Объявите конфигурацию сетевой безопасности, которая отключает трафик открытого текста, а затем протестируйте приложение. |
| T-Network_Security_Configuration | Network_Security_Configuration | Проверьте конфигурацию сетевой безопасности приложения. Убедитесь, что все проверки конфигурации пройдены. |
| T-Security_Provider_Initialization | Security_Provider_Initialization | Убедитесь, что поставщик услуг безопасности инициализируется при запуске приложения для сервисов Google Play. |
Элементы WebView
| ID | Функция | Описание |
|---|---|---|
| T-WebView_Asset_Loader | WebView_Asset_Loader | Проверьте конфигурацию сетевой безопасности приложения. Убедитесь, что все проверки конфигурации пройдены. |
| T-WebView_JavaScript | WebView_JavaScript | Для каждого WebView перейдите на страницу, для которой требуется JavaScript. |
| T-WebView_Navigation | WebView_Asset_Loader, WebView_JavaScript |
В каждом компоненте WebView попробуйте перейти на сайты и к контенту, которые не загружаются напрямую вашим приложением. |
Выполнение
| ID | Функция | Описание |
|---|---|---|
| T-App_Bundles | App_Bundles | Убедитесь, что приложение использует наборы Android App Bundle и не загружает динамически код из источников, не связанных с APK-файлом приложения. |
Криптография
| ID | Функция | Описание |
|---|---|---|
| T-Cryptographic_Algorithms | Cryptographic_Algorithms | Убедитесь, что в приложении используются надежные криптографические алгоритмы и генератор случайных чисел, предоставляемые платформой. Также убедитесь, что в приложении не используются собственные алгоритмы. |
Google Play
Убедитесь, что приложение готово к публикации в Google Play.
Правила
| ID | Функция | Описание |
|---|---|---|
| T-Play_Content_Policies | Play_Content_Policies, Play_Content_Rating, Play_User_Reviews |
Войдите в Google Play Console и проверьте профиль разработчика, описание приложения, скриншоты, картинку для описания приложения, возрастные ограничения и отзывы пользователей. |
Страница сведений о приложении
| ID | Функция | Описание |
|---|---|---|
| T-Play_Feature_Graphic | Play_Feature_Graphic | Скачайте картинку для описания и скриншоты и уменьшите их до размеров экранов устройств и форм-факторов, на которые вы ориентируетесь. |
| T-Play_Graphic_Assets | Play_Feature_Graphic, Play_Device_References, Play_Misleading_Content |
Проверьте все графические объекты, медиафайлы, текст, библиотеки кода и другой контент, который входит в приложение или файл дополнения. |
Архив
Предыдущие версии основных рекомендаций по обеспечению качества приложения: