Чем открыть на Android

Обновлено: 21.11.2024

Томо — разработчик Java, Android и Golang с более чем 13-летним опытом. Он работал в области телекоммуникаций и банковских систем.

Почти все современные устройства оснащены современным оборудованием, которое достаточно быстро для воспроизведения видео, поэтому скорость и надежность сети становятся самой большой проблемой. Почему это? Еще несколько лет назад каноническим способом хранения и публикации видео были протоколы на основе UDP, такие как RTP. Это оказалось проблематичным во многих отношениях, если перечислить лишь некоторые из них:

Где традиционная потоковая передача видео терпит неудачу

Это далеко не лучшее решение по нескольким причинам, одной из которых является эффективность. Если вы храните исходные видеофайлы в полном разрешении, пользователям в сельской местности или частях мира с плохой связью будет трудно их просмотреть. Их видеопроигрывателям будет сложно загрузить достаточно данных, чтобы воспроизвести их во время выполнения.

Поэтому вам нужна специальная версия файла, чтобы количество загруженного видео было примерно таким же, как и то, что можно воспроизвести. Например, если разрешение и качество видео таковы, что за пять секунд он может загрузить еще пять секунд видео, это оптимально. Однако, если требуется пять секунд, чтобы загрузить видео продолжительностью всего три секунды, проигрыватель остановится и будет ждать загрузки следующего фрагмента потока.

С другой стороны, дальнейшее снижение качества и разрешения только ухудшит работу пользователей при более быстром соединении, поскольку вы будете без необходимости экономить пропускную способность. Однако есть и третий способ.

Потоковая передача с адаптивным битрейтом

Хотя вы можете загружать разные версии видео для разных пользователей, вам необходимо иметь возможность управлять их проигрывателями и вычислять, какой поток лучше всего подходит для их подключения и устройства. Затем игроку нужно переключаться между ними (например, когда пользователь переключается с 3G на WiFi). И даже тогда, что если клиент изменит тип сети? Затем плеер должен переключиться на другое видео, но оно должно начать воспроизводиться не с начала, а где-то с середины видео. Так как же вычислить диапазон байтов для запроса?

Было бы здорово, если бы видеоплееры могли обнаруживать изменения в типе сети и доступной пропускной способности, а затем прозрачно переключаться между разными потоками (одного и того же видео, подготовленного для разных скоростей), пока не найдет лучший.

Примечание. В этом руководстве по HLS не рассматриваются вопросы шифрования, синхронизированного воспроизведения и IMSC1.

Что такое HLS?

  1. Плейлисты M3U8
  2. Медиафайлы для различных потоков

Плейлисты M3U8

Давайте начнем с ответа на основной вопрос: Что такое файлы M3U8?

M3U (или M3U8) – это обычный текстовый формат, изначально созданный для организации коллекций файлов MP3. Формат расширен для HLS, где он используется для определения медиапотоков. В HLS есть два типа файлов m3u8:

  • Медиа-плейлист: содержит URL-адреса файлов, необходимых для потоковой передачи (т. е. воспроизводимых фрагментов исходного видео).
  • Основной плейлист: содержит URL-адреса мультимедийных плейлистов, которые, в свою очередь, содержат варианты одного и того же видео, подготовленные для разной пропускной способности.

Пример файла M3U8 для потока HLS

В этом примере показано, как выглядит файл M3U8 для простого потока HLS:

  • Первые четыре строки представляют собой глобальные (заголовочные) метаданные для этого плейлиста M3U8.
  • EXT-X-VERSION — это версия формата M3U8 (должно быть не менее 3, если мы хотим использовать записи EXTINF).
  • Тег EXT-X-TARGETDURATION содержит максимальную продолжительность каждого фрагмента видео. Обычно это значение составляет около 10 секунд.
  • Остальная часть документа содержит пары строк, например:

Это фрагмент видео. Этот представляет фрагмент 00001.ts, который имеет длину ровно 10,344822 секунды. Когда клиентскому видеоплееру необходимо запустить видео с определенного места в указанном видео, он может легко вычислить, какой файл .ts ему нужно запросить, суммируя продолжительность ранее просмотренных фрагментов. Вторая строка может быть локальным именем файла или URL-адресом этого файла.

Файл M3U8 с его файлами .ts представляет собой простейшую форму потока HLS — список воспроизведения мультимедиа.

Имейте в виду, что не каждый браузер может воспроизводить потоки HLS по умолчанию.

Основной плейлист или индексный файл M3U8

Предыдущий пример M3U8 указывает на серию фрагментов .ts. Они создаются из исходного видеофайла, размер которого изменяется, кодируется и разбивается на фрагменты.

Это означает, что у нас все еще есть проблема, описанная во введении: что делать с клиентами в очень медленных (или необычно быстрых) сетях? Или клиенты в быстрых сетях с очень маленьким размером экрана? Нет смысла транслировать файл в максимальном разрешении, если он не может быть показан во всей красе на вашем новом сверкающем телефоне.

HLS решает эту проблему, добавляя еще один «уровень» M3U8. Этот файл M3U8 не будет содержать указатели на .ts, но содержит указатели на другие файлы M3U8, которые, в свою очередь, содержат видеофайлы, заранее подготовленные для определенных битрейтов и разрешений.

Вот пример такого файла M3U8:

Видеопроигрыватель выберет пары строк, например:

Так называются варианты одного и того же видео, подготовленные для разных скоростей сети и разрешений экрана. Этот конкретный файл M3U8 ( 640x360_1200.m3u8 ) содержит фрагменты видеофайла, размер которых изменен до 640x360 пикселей и подготовлен для скорости передачи данных 1296 кбит/с. Обратите внимание, что сообщаемый битрейт должен учитывать и видеопоток, и аудиопоток в видео.

Видеопроигрыватель обычно начинает воспроизведение с первого варианта потока (в предыдущем примере это 640x360_1200.m3u8). По этой причине вы должны проявлять особую осторожность, чтобы решить, какой вариант будет первым в списке. Порядок остальных вариантов не важен.

Если первый файл .ts загружается слишком долго (вызывая «буферизацию», то есть ожидание следующего фрагмента), видеопроигрыватель переключится на поток с меньшим битрейтом. И, конечно же, если он загружается достаточно быстро, значит, он может переключиться на более качественный вариант, но только если это имеет смысл для разрешения экрана.

Если первый поток в индексном списке M3U8 не самый лучший, клиенту потребуется один или два цикла, пока он не остановится на правильном варианте.

Итак, теперь у нас есть три слоя HLS:

  1. Индексный файл M3U8 (главный плейлист), содержащий указатели (URL) на варианты.
  2. Вариантные файлы M3U8 (список воспроизведения мультимедиа) для разных потоков для разных размеров экрана и скорости сети. Они содержат указатели (URL) на файлы .ts.
  3. Файлы .ts (фрагменты), представляющие собой двоичные файлы с частями видео.

Вы можете посмотреть пример индексного файла M3U8 здесь (опять же, это зависит от вашего браузера/ОС).

Иногда вы заранее знаете, что клиент находится в медленной или быстрой сети. В этом случае вы можете помочь клиенту выбрать правильный вариант, предоставив индексный файл M3U8 с другим первым вариантом. Есть два способа сделать это.

Подготовка видеофайлов для HLS

Начнем с видеофайлов. Протокол HLS предполагает, что видеофайлы хранятся в меньших фрагментах одинаковой длины, обычно по 10 секунд каждый. Первоначально эти файлы должны были храниться в файлах MPEG-2 TS ( .ts ) и кодироваться в формате H.264 со звуком в формате MP3, HE-AAC или AC-3.

Это означает, что 30-секундное видео будет разделено на 3 небольших файла .ts, каждый примерно по 10 секунд.

Обратите внимание, что последняя версия HLS также поддерживает фрагментированные файлы .mp4. Поскольку это все еще новая вещь, и некоторые видеопроигрыватели все еще нуждаются в ее реализации, в примерах в этой статье будут использоваться файлы .ts.

Ключевые кадры

Фрагменты должны быть закодированы с ключевым кадром в начале каждого файла. Каждое видео содержит кадры. Кадры — это изображения, но видеоформаты не хранят полные изображения, это заняло бы слишком много места на диске. Они кодируют только отличие от предыдущего кадра. Когда вы переходите к средней точке видео, проигрывателю нужна «начальная точка», откуда следует применить все эти различия, чтобы отобразить начальное изображение, а затем начать воспроизведение видео.

Вот почему фрагменты .ts должны иметь ключевой кадр в начале. Иногда игрокам нужно начинать с середины чанка. Игрок всегда может рассчитать текущее изображение, добавив все «разницы» из первого ключевого кадра. Но, если он запускается через 9 секунд от начала, ему нужно рассчитать 9 секунд «разниц». Чтобы ускорить это вычисление, лучше всего создавать ключевые кадры каждые несколько секунд (лучше всего около 3 секунд).

Точки останова HLS

В некоторых случаях требуется воспроизвести несколько видеоклипов подряд. Один из способов сделать это — объединить исходные видеофайлы, а затем создать потоки HLS с этим файлом, но это проблематично по нескольким причинам. Что делать, если вы хотите показать рекламу до или после вашего видео? Возможно, вы не хотите делать это для всех пользователей и, возможно, вам нужны разные объявления для разных пользователей. И, конечно же, вы не хотите заранее готовить HLS-файлы с разной рекламой.

Прямая трансляция с помощью HLS

Видеопроигрыватель проверит счетчик. Если он изменился по сравнению с прошлым разом, он знает, есть ли новые фрагменты для загрузки и воспроизведения. Убедитесь, что файл M3U8 обслуживается с заголовками без кеша, потому что клиенты будут продолжать перезагружать файлы M3U8, ожидая воспроизведения новых фрагментов.

Еще одна интересная особенность потоков HLS заключается в том, что вы можете встраивать в них файлы Web Video Text Track (VTT). Файлы VTT можно использовать для различных целей. Например, для веб-проигрывателя HLS можно указать снимки изображений для различных частей видео. Когда пользователь наводит указатель мыши на область таймера видео (под видеопроигрывателем), проигрыватель может отображать снимки с этой позиции в видео.

Другим очевидным применением файлов VTT являются субтитры. Поток HLS может указывать несколько субтитров для нескольких языков:

Тогда файл prog_index.m3u8 выглядит следующим образом:

Фактический VTT (например, 0000.webvtt ):

В дополнение к файлам VTT Apple недавно объявила, что HLS будет поддерживать IMSC1, новый формат субтитров, оптимизированный для потоковой доставки. Его наиболее важным преимуществом является то, что он может быть оформлен с помощью CSS.

Apple представила ряд полезных инструментов HSL, которые более подробно описаны в официальном руководстве по HLS.

  • Для прямых трансляций Apple подготовила инструмент mediastreamsegmenter для создания файлов сегментов на лету из текущего видеопотока.
  • Еще один важный инструмент — mediastreamvalidator . Он проверит ваши списки воспроизведения M3U8, загрузит видеофайлы и сообщит о различных проблемах. Например, если сообщаемый битрейт не совпадает с рассчитанным для файлов .ts.
  • Конечно, когда вам нужно кодировать/декодировать/мультиплексировать/демультиплексировать/фрагментировать/разделить/объединить/объединить/… видео/аудио файлы, есть ffmpeg. Будьте готовы скомпилировать свои собственные версии ffmpeg для конкретных случаев использования.

Одной из наиболее частых проблем с видео является синхронизация звука. Если вы обнаружите, что звук в некоторых из ваших потоков HLS не синхронизирован с видео (например, актер открывает рот, но вы замечаете, что голос звучит на несколько миллисекунд раньше или позже), возможно, исходный видеофайл был снят. с использованием переменной частоты кадров. Обязательно конвертируйте его в постоянный битрейт.

Если возможно, еще лучше убедиться, что ваше программное обеспечение настроено на запись видео с постоянной частотой кадров.

Я подготовил приложение HLS для Android, которое транслирует предопределенный HLS с помощью проигрывателя ExoPlayer от Google. Он покажет видео и список «событий» HLS под ним. К таким событиям относятся: каждый загруженный файл .ts или каждый раз, когда проигрыватель решает переключиться на поток с более высоким или более низким битрейтом.

Давайте рассмотрим основные этапы инициализации средства просмотра. На первом этапе мы получим текущий тип подключения устройства и используем эту информацию, чтобы решить, какой файл m3u8 получить.

Обратите внимание, что это не является строго обязательным. Проигрыватель HLS всегда будет подстраиваться под правильный вариант HLS после нескольких чанков, но это означает, что в первые 5-20 секунд пользователь может смотреть не идеальный вариант трансляции.

Помните, первый вариант в файле m3u8 — это тот, с которого начнет просмотрщик. Так как мы на стороне клиента и можем определить тип подключения, мы можем хотя бы попытаться избежать переключения начального игрока между вариантами, запросив файл m3u8, который заранее подготовлен для этого типа подключения.

На следующем шаге мы инициализируем и запускаем наш проигрыватель HLS:

Затем подготавливаем плеер и скармливаем ему нужный m3u8 для данного типа сетевого подключения:

И вот результат:

Совместимость браузера HLS, будущие разработки

Apple предъявляет требование к приложениям для потоковой передачи видео на iOS: они должны использовать HLS, если видео длится более 10 минут или превышает 5 МБ. Это само по себе является гарантией того, что HLS никуда не денется. Были некоторые опасения по поводу HLS и MPEG-DASH и того, какой из них станет победителем на арене веб-браузеров. HLS реализован не во всех современных браузерах (вы, вероятно, заметили это, если щелкнули предыдущие примеры URL-адресов m3u8). На Android, например, в версиях ниже 4.0 вообще работать не будет. С 4.1 по 4.4 работает только частично (например, отсутствует звук или отсутствует видео, но работает звук).

Но в последнее время эта «битва» стала немного проще. Apple объявила, что новый протокол HLS позволит использовать фрагментированные файлы mp4 (fMP4). Раньше, если вы хотели иметь поддержку HLS и MPEG-DASH, вам приходилось дважды кодировать видео. Теперь вы сможете повторно использовать одни и те же видеофайлы и переупаковывать только файлы метаданных (.m3u8 для HLS и .mpd для MPEG-DASH).

Еще одно недавнее объявление касается поддержки высокоэффективного видеокодека (HEVC). Если он используется, он должен быть упакован в фрагментированные файлы mp4. А это, вероятно, означает, что будущее HLS — за fMP4.

Текущая ситуация в мире браузеров такова, что только некоторые браузерные реализации тега могут воспроизводить HLS по умолчанию. Но есть решения с открытым исходным кодом и коммерческие решения, которые предлагают совместимость с HLS. Большинство из них предлагают HLS с резервным Flash, но есть несколько реализаций, полностью написанных на JavaScript.

Подведение итогов

  • Это упрощает хранение видеофайлов.
  • CDN
  • Клиентские проигрыватели обрабатывают разную пропускную способность клиентов и переключаются между потоками.
  • Субтитры, шифрование, синхронизированное воспроизведение и другие функции, не описанные в этой статье.

Независимо от того, используете ли вы в конечном итоге HLS или MPEG-DASH, оба протокола должны предлагать схожие функции, а с введением фрагментированного mp4 (fMP4) в HLS вы можете использовать одни и те же видеофайлы. Это означает, что в большинстве случаев вам необходимо понимать основы обоих протоколов. К счастью, кажется, что они движутся в одном направлении, что должно упростить их освоение.

Понимание основ

Что такое файл M3U8?

M3U (или M3U8) – это обычный текстовый формат, изначально созданный для организации коллекций файлов MP3. Формат расширен для HLS, где он используется для определения медиапотоков.

Что такое HLS?

Что такое MPEG-DASH?

Какой браузер поддерживает HLS?

В последние годы поддержка HLS была добавлена ​​в большинство браузеров. Однако различия сохраняются. Например, Chrome и Firefox имеют лишь частичную поддержку на настольных платформах.

Если вы вообще не можете открыть приложение "Play Маркет", следуйте инструкциям по устранению неполадок, связанных с тем, что вы не можете открыть приложение "Play Маркет" на телефоне.

Основные шаги по устранению неполадок

Убедитесь, что у вас есть надежное подключение к сети Wi-Fi или мобильному интернету

  • Убедитесь, что у вас есть надежное подключение к Интернету.
  • Лучше всего, если вы можете подключиться к сети Wi-Fi.
  • Если у вас нет доступа к Wi-Fi, убедитесь, что у вас есть надежное мобильное подключение для передачи данных.

После проверки подключения к Интернету повторите попытку загрузки. Дополнительные сведения о проблемах с подключением см. в статье Устранение проблем с подключением к Интернету на устройствах Android.

Проверьте место для хранения

  • Если на вашем устройстве недостаточно места, это может помешать загрузке и установке приложений.
  • Возможно, на вашем устройстве недостаточно места, если:
    • Вы получаете уведомление о свободном месте для хранения.
    • На вашем устройстве доступно менее 1 ГБ.

    Проверить наличие обновлений системы Android

    1. На телефоне или планшете Android откройте приложение "Настройки".
    2. Нажмите SystemAdvancedSystem update.
    3. Появится ваш статус обновления.
    4. Следуйте инструкциям на экране, чтобы загрузить или установить обновления.

    Совет. Если ваше устройство работает под управлением Android 2.2 или более ранней версии, Google Play может работать некорректно. Обратитесь за помощью к производителю устройства.

    Устранение неполадок только с одним приложением

    Проверьте, доступно ли приложение для вашего устройства

    1. Откройте приложение Google Play Маркет.
    2. Найдите и коснитесь приложения, которое хотите скачать.
    3. На странице приложения указано, доступно ли оно для вашего устройства.
      • Если он недоступен, вы не можете его скачать.

    Удалите и переустановите приложение

    1. Откройте приложение Google Play Маркет.
    2. В правом верхнем углу коснитесь значка профиля.
    3. Нажмите "Управление приложениями и устройствами".
    4. Нажмите на название приложения, которое хотите удалить. Удалить.
    5. Чтобы переустановить его, нажмите «Установить» или «Включить».

    Если вам по-прежнему не удается загрузить приложение, попробуйте выполнить следующие действия по устранению неполадок.

    Дополнительные шаги по устранению неполадок

    Если вы выполнили все описанные выше действия, но по-прежнему не можете загружать приложения, попробуйте выполнить указанные ниже действия. После каждого шага пытайтесь снова загрузить приложение, чтобы проверить, устранена ли проблема.

    Закройте и снова откройте Play Маркет

    1. На устройстве Android проведите снизу вверх, удерживайте и отпустите.
    2. Чтобы закрыть приложение "Play Маркет", проведите по нему вверх.
    3. Снова откройте Play Маркет.

    Удаление и повторная установка обновлений Play Маркета

    1. Убедитесь, что вы подключены к надежному Wi-Fi.
    2. Найдите приложение "Play Маркет" на главном экране устройства или на экране приложения.
    3. Нажмите и удерживайте значок приложения "Play Маркет".
    4. Нажмите "Информация о приложении" .
    5. Вверху нажмите "Ещё" Удалить обновления.
    6. Если вам будет предложено вернуть заводскую версию приложения Play Маркет, нажмите "ОК".

    Перезагрузите устройство

    1. Нажмите и удерживайте кнопку питания.
    2. Нажмите «Выключить» или «Перезагрузить».
    3. При необходимости нажмите и удерживайте кнопку питания, пока устройство снова не включится.

    Очистить кеш и данные из сервисов Google Play

    Удалите и снова добавьте свой аккаунт Google

    При удалении учетной записи часть информации удаляется с вашего устройства. Перед выполнением этого шага обязательно сделайте резервную копию всей важной информации.

    Важно: перед удалением и переустановкой игры создайте ее резервную копию. Все игровые данные с вашей учётной записью будут потеряны.

    Поскольку у телефонов на Android интерфейс меняется в зависимости от производителя (Samsung, LGE, ASUS и т.д.), инструкции по обновлению системы смены или настройки телефона также могут быть изменены.

    Инструкции по настройке Android могут отличаться в зависимости от телефона. При необходимости выхода из строя устройства.

    Внешний интерфейс завис

    Удалите ненужные приложения или перенесите их в облачное хранилище или на карту microSD. А затем очистите кэш, перейдя в Настройки > Приложения > Очистить кэш.

    Если приложение вылетает

    Вероятно, установлены ли у вас последние версии обновлений для телефонов и приложений.

    Если экран не обратная связь

    Если приложение не загружается

    Приложение не используется

    • Все приложения, запущенные на исходе, воспроизвели его память. Если вы не можете играть или играть в игру, возможно, на дефицит памяти. и использует игру заново.

    Возможность устройства — старая модель вашего iPad или iPhone

    Из-за высокой доступности игры нельзя использовать на устройствах. Следующие действия могут временно улучшить работу игры:

    • Отключите регулярное обновление всех приложений, включая электронную почту.
    • Принудительно закрыты все другие приложения, включая приложения, работающие в фоновом режиме.
    • Регулярно перезагружайте устройство, особенно перед тем, как включить игру.

    Если устройство было модифицировано

    Если приложение зависло или временно работает, принудительное закрытие часто решает проблему.

    Перезагрузка приложений

    Принудительная перезагрузка устройства

    Нажмите и удерживайте кнопки включения и регулировки громкости, пока не появится анимация восстановления.

    Перезапустить Wi-Fi

    Если дата и время не совпадают с вашим актуальным местоположением, это может отразиться на работе вашего телефона, поэтому их необходимо настроить.

    1. Если вы подключите VPN, отключите его, а затем перезагрузите или переустановите. приложение
    2. Если время и дата не подходят с вашим часовым поясом, измените их и проверьте, устранена ли проблема.

    Попробуйте подключиться к игре по сети Wi-Fi. Если это не помогло, попробуйте использовать мобильный интернет.

    На многих устройствах Android есть возможность использования Wi-Fi и мобильного интернета в местах с плохим сигналом. Если подобная функция возникла > Wi-Fi и сеть, можно включить ее и проверить, решил ли эту проблему.

    Если вы находитесь в крупных городах, вам может помочь использование 3G для передачи данных через сотовую сеть:

    Удаление приложений кэширования и данных может решить некоторые проблемы. Вот как можно очистить кэш и данные приложения — см. под шагом 2.

    Если осталось менее 1 Гб, восстановите немного места и попробуйте установить игру ещё раз.

    Другие приложения могут препятствовать работе над игрой, в том числе:

    • программы, блокирующие рекламу
    • приложения, анализ исходящих и поступающих в игровые данные
    • хранилище или версия ОС.

    Попробуйте создать или удалите их. Возможно, это решит проблему.

    Обновление версии Android

    Обычно эта возможность используется в общественном устройстве:

    • Настройки > Обновление ПО
    • Настройки > Об изменениях > Обновление ПО

    Если вы не знаете, как проверить наличие обновлений, ознакомьтесь с сайтом Справки Android.

    Обновите приложение

    Попробуйте установить другое приложение из магазина Google Play

    Если вам не удается воспроизвести ни одно приложение, может возникнуть проблема с авторизацией Google. Выполните авторизацию своей учётной записи Google, загрузив любое приложение из магазина Google Play.

    Если вы устанавливали приложения под многочисленными учётными записями Google, укажите шаг для всех учётных записей.

    Переустановка приложения

    Убедитесь в том, что ваши данные защищены, прежде чем предпринять возможные шаги.

    Важно: создание резервной копии предварительно учётной записи перед удалением или установкой игры. Чтобы избежать потери игрового прогресса, привяжите учётную запись игры в Facebook или Google Play.

    Если вы играете анонимно (не используя учётную запись EA, Facebook или Google Play), вы можете потерять прогресс в игре при удалении или переустановке приложения.

    Прогресс в некоторых играх может не соответствовать, если вы привязаны только к учётной записи EA. Не удалось проверить, как найти прогресс в каждой конкретной мобильной игре.

    Если приложение все ещё не работает, попробуйте удалить его с устройства (см. под шаг 2) и переустановить.

    Переустановили игру и не можете найти свой прогресс? Если перед удалением приложения вы привязали игру к Facebook или Google Play, не волнуйтесь! Ваш прогресс естественно. Пройдите обучение в игре, и вы сможете продолжить играть с того места, куда направлена.

    Если это повторная платная игра, в которой содержится учётная запись Google, под которую можно приобрести игру, чтобы избежать томной покупки.

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

    Попробуйте поиграть в приложение для просмотра

    Если проблема не исчезла, попробуйте воспроизвести то же самое на других устройствах.

    Найдите другое устройство, установите приложение и проверьте, возникает ли та же проблема.

    Всё ещё нужна помощь?

    Лучший способ связаться с нами — создать запрос в игре. Так у нас будет информация о вашей учётной записи, и мы быстрее сможем вам помочь.

    В каких играх можно получить помощь в игре?

    Если вы играете в игру, в которой нет возможности получить помощь в игре, нажмите Связаться с нами.

    Не можете войти в свою учётную запись? При обращении к нам вам необходимо сообщить нам ваш идентификатор пользователя. В этой статье рассказано, как найти идентификатор пользователя в игре.

    Связаться с нами $a$ из $b$ пользователей, пользующихся этим профилем.

    " text-negative-area-placeholder="Ввести комментарий" text-positive-area-placeholder="Ввести комментарий" cta-positive-label="Да" cta-negative-label="Нет" >

    Вы создаете приложение для Android с нуля и хотите развернуть его в разных уголках мира? Если реализация многоязычной поддержки для вашего приложения вызывает у вас головную боль, позвольте этому учебному пособию рассказать вам о том, что нужно и чего нельзя делать при разработке приложений Android для глобальных рынков от начала до конца.

    Android уже давно является ведущей мобильной ОС в мире. Летом 2020 года она контролировала 74,6 процента всего рынка мобильных ОС. Если вы ищете рекомендации по созданию многоязычного приложения для Android, в следующем руководстве по разработке приложений для Android вы узнаете, что можно и чего нельзя делать.

    Прежде чем мы начнем, отметим, что платформа приложений Android основана на нескольких библиотеках/утилитах i18n и l10n. Это означает, что вам не нужно импортировать какие-либо внешние библиотеки i18n или l10n, чтобы обеспечить многоязычную поддержку вашего приложения для Android. Теперь мы можем начать копаться в деталях!

    Android I18n и L10n Framework

    Структура интернационализации является частью более широкой платформы приложений Android, в которой некоторые, если не все, компоненты основаны на интернационализации. Иными словами, Android уже предоставляет в своем SDK набор библиотек, таких как форматирование даты и времени, форматирование чисел, форматирование сообщений, валюта, единицы измерения, часовой пояс, правила сопоставления, правила множественного числа, гендерные правила, транслитерация, поддержка макета двунаправленного текста и т. д. Поддержка эмодзи и т. д.

    Допустим, вы разрабатываете приложение, ориентированное на европейские финансовые рынки, и вам нужно обрабатывать все различия даты и времени, а также определять валюту и систему нумерации каждого региона. В идеале вы можете обратиться к классам SDK, которые обеспечивают полную стандартизированную поддержку. Кроме того, в Android есть структура локализации, отвечающая за локализацию самой ОС, а также всех приложений. Он также предоставляет механизмы для определения локали, загрузки ресурсов, сопоставления локали, отката и т. д.

    В общих чертах Android использует библиотеку ICU и проект CLDR для поддержки Unicode и других интернационализаций.

    Связь между Unicode CLDR, ICU и Android

    Внедрение I18n и L10n в ваше приложение для Android

    Теперь, когда мы познакомились с основами платформы Android i18n и l10n, мы сосредоточимся на четырех темах, важных для разработки многоязычных приложений для Android:

    1. Настройка/подготовка,
    2. Локализуемость,
    3. Двунаправленность,
    4. Форматирование.

    1. Конфигурация/Подготовка

    Чтобы убедиться, что приложение Android готово к глобальному использованию, нам нужно позаботиться о нескольких ключевых конфигурациях как в файле манифеста, так и в файле Gradle.

    В файле AndroidManifest.xml нам нужно установить для свойства android:supportsRtl значение true . Это свойство указывает, готово ли ваше приложение поддерживать макеты справа налево (RTL). Значение по умолчанию — false .

    В файле build.gradle нам нужно установить следующие конфигурации:

    Целое число, обозначающее уровень API, на который нацелено приложение, где 17 — минимально допустимое значение, поскольку до API 17 API Android не поддерживали макеты с направлением справа налево.

    Список языков, поддерживаемых приложением.

    Зачем вообще необходимо свойство resConfigs? Ну, вам нужно убедиться, что ваше приложение будет работать правильно для второй предпочтительной настройки локали.Другими словами, если пользователь устанавливает дополнительные языки на своем мобильном устройстве, ваше приложение попытается сопоставить все конфигурации устройства, включая вторичные, третичные языки и т. д.

    См. сценарий ниже:

    Контент на каком языке должен быть выбран и показан пользователю с учетом этих настроек?

    Поскольку нидерландский (Бельгия) является основным вариантом, а ресурсов на этом языке нет, как и ожидалось, выбирается дополнительный вариант, содержащий контент для немецкого языка.

    Вы можете задаться вопросом, почему выбрано de_DE, несмотря на то, что de_BE является языковым стандартом пользователя. Давайте объясним стратегию разрешения ресурсов, используемую Android для определения наилучшего соответствия:

    1. Проверьте первый вариант: попробовать nl_BE→ не удалось
    2. Удалить регион и попробовать только региональные настройки: Попробуйте nl→ Ошибка
    3. Попробуйте дочерние локали nl: дочерние элементы nl→ Неудача
    4. Перейдите ко второму варианту: попробовать de_BE→ не удалось
    5. Удалить регион и попробовать только региональные настройки: попробовать de→ не удалось
    6. Проверить дочерние локали de: дочерние элементы de→ de_DE
      Использовать de_DE
    7. Описанные выше шаги повторяются для всех конфигураций. Если ни один из них не совпадает, используется языковой стандарт по умолчанию.

    При этом у пользователя по-прежнему есть язык, который он понимает, даже если приложение не поддерживает нидерландский. Однако это происходит только благодаря свойству resConfigs.

    Если ваше приложение импортирует какую-либо библиотеку Android и вы не добавите свойство resConfigs, оно не будет работать должным образом и, возможно, будет отображаться содержимое по умолчанию (на английском языке), что не очень хорошо для пользовательского интерфейса. перспектива.

    2. Возможность локализации

    Локализуемость – это практика, позволяющая локализовать программное обеспечение на различные языки без изменения его исходного кода. На этом этапе вам следует обратить внимание на следующие шаги:

    1. Помните об экстернализации ресурсов.
    2. Включить полный набор ресурсов по умолчанию,
    3. Хранить ресурсы по умолчанию без квалификаторов языка или локали (независимо от языка по умолчанию, используемого в вашем приложении, хранить каталоги ресурсов по умолчанию без квалификаторов языка или локали),
    4. Убедитесь, что файл res/values/strings.xml существует и определяет все необходимые строки.

    Упомянутые выше шаги также применимы к другим ресурсам Android, таким как макеты, звуки, графика и другие данные, которые могут понадобиться вашему приложению.

    Дополнительную информацию о ресурсах для Android см. в обзоре ресурсов для приложений.

    Давайте перейдем к лучшим примерам локализации!

    Избегайте использования Java toUpperCase()/toLowerCase() для строк, видимых пользователю

    Выполнить

    Не

    Использование этих методов без указания конкретной локали может стать источником ошибок. Это происходит потому, что эти методы будут использовать текущую локаль на устройстве пользователя, и даже если код работает правильно, когда вы разрабатываете приложение, в некоторых локалях он не работает.

    Некоторые сопоставления регистра зависят от языка или региона. Хорошим примером является турецкий язык, где заглавная буква "I" соответствует строчной букве "ı" без точек, а замена "i" в верхнем регистре не является "I".

    Пример: (en) ВЫЙТИ ⇒ выйти / (tr) ВЫЙТИ => выйти

    Если вы хотите, чтобы методы просто выполняли замену ASCII для преобразования имени перечисления, вместо этого вызовите toUpperCase(Locale.ENGLISH)/toLowerCase(Locale.ENGLISH). Если вы действительно хотите использовать текущую локаль, вместо этого вызовите toUpperCase(Locale.getDefault())/toLowerCase(Locale.getDefault()).

    Для получения дополнительной информации нажмите здесь.

    Избегайте объединения строковых ресурсов

    Выполнить

    Не

    В разных языках действуют разные правила порядка слов, использования заглавных букв, пола, единственного или множественного числа, что может привести к ужасным грамматическим ошибкам.

    Не обозначайте непереводимые строки как переводимые

    Выполнить

    Не

    Предоставьте достаточный контекст для объявленных строк, например, добавив комментарии

    Выполнить

    Как правило, инструмент перевода показывает только комментарий к строке, редактируемой/переводимой в данный момент. Рассмотрите возможность предоставления контекстной информации, которая может включать:

    • Для чего нужна эта строка? Когда и где она представлена ​​пользователю?
    • Где это находится в макете? Например, перевод кнопок менее гибок, чем текстовых полей.

    Отметить все части сообщения, которые не следует переводить

    Выполнить

    Не

    Чтобы пометить непереводимый контент, используйте тег. Типичными примерами могут быть фрагмент кода, заполнитель для значения, специальный символ или имя. При подготовке строк к переводу ищите и помечайте текст, который должен остаться таким, какой он есть, чтобы переводчик не изменил его.

    При объявлении тега-заполнителя всегда добавляйте атрибут id, поясняющий, для чего нужен тег-заполнитель. Если ваше приложение позже заменит значение заполнителя, не забудьте предоставить пример атрибута, чтобы прояснить ожидаемое использование.

    В приведенном выше примере отсутствие тегов XLIFF может привести к неожиданным переводам: Phrase > Frase, PHRASEDISCOUNT > DESCONTOFRASE и т. д.

    Оставьте дополнительное место для перевода

    Выполнить

    Не

    Как видно из приведенного выше примера, английская фраза «Ответить всем» имеет довольно длинный аналог в македонском языке: «Одговори на сайте».

    Избегайте размещения символов новой строки

    Выполнить

    Не

    Избегайте использования количественных строк

    Выполнить

    Не

    Рекомендуется использовать класс ICU MessageFormat, небольшую библиотеку, извлеченную из ICU.

    3. Двунаправленность

    Когда содержимое представлено горизонтально, в большинстве скриптов текст/символы отображаются слева направо, но есть несколько шрифтов (например, арабский, персидский, иврит, урду), в которых естественный порядок горизонтального выравнивания на дисплее — справа налево.

    Основное различие между языковыми сценариями с письмом слева направо (LTR) и письмом справа налево (RTL) заключается в направлении отображения содержимого:

    • Текст
      • LTR → Предложения читаются слева направо.
      • RTL → Предложения читаются справа налево.
      • LTR → Иллюстрированная последовательность событий развивается слева направо.
      • RTL → Проиллюстрированная последовательность событий развивается справа налево.
      • LTR → Стрелка, указывающая слева направо, указывает на движение вперед: (→)
      • RTL → Стрелка, указывающая справа налево, указывает на движение вперед: (←)

      Когда пользовательский интерфейс меняется с LTR на RTL (или наоборот), это часто называют зеркалированием. Макет RTL является зеркальным отражением макета LTR и влияет на макет, текст и графику.

      Уточнение изменений зеркального отображения

      При зеркалировании пользовательского интерфейса происходят следующие изменения:

      • Значки текстовых полей отображаются на противоположной стороне поля,
      • Кнопки навигации отображаются в обратном порядке,
      • Значки, указывающие направление, например стрелки, отображаются зеркально.
      • Текст (если он переведен на язык с письмом справа налево) выравнивается по правому краю.

      Эти элементы не дублируются:

      • Непереведенный текст (даже если он является частью фразы),
      • Значки, которые не указывают направление, например камера,
      • Числа, такие как время, номера телефонов, URL-адреса и т. д.
      • Диаграммы и графики.

      Инструкции по биди для Android

      Теперь давайте уточним инструкции по включению поддержки двунаправленного текста в вашем приложении:

      1. Проверьте файлы сборки и манифеста
        Как уже упоминалось в разделе о настройке выше, необходимо установить свойство android:supportsRtl, поскольку зеркалирование RTL поддерживается только на устройствах под управлением Android 4.2 (уровень API 17) или выше.
      2. Обновите/стандартизируйте атрибуты макета
        Вместо левого и правого используйте начало и конец соответственно, чтобы задать позиции элементов пользовательского интерфейса в файлах ресурсов макета. Это позволяет FW выравнивать элементы пользовательского интерфейса приложения в зависимости от языковых настроек пользователя.

      Выполнить

      Не

      Если вам интересно, что было бы, если бы все файлы макета вашего приложения были реализованы с использованием свойств left/right. Не волнуйтесь, Android Studio может сделать это за вас!

      Еще несколько советов по другим элементам пользовательского интерфейса:

      Хорошо известный и широко используемый класс ViewPager не обеспечивает встроенной поддержки макетов RTL. Если в вашем приложении используется режим подкачки с использованием этого класса, и вы хотите включить нативную ориентацию справа налево, в прошлом году Google выпустила вторую версию класса ViewPager, в которой было несколько улучшений, включая поддержку макета RTL. Вы можете найти более подробную информацию здесь. Компания Google также выпустила документ, разъясняющий процесс перехода с ViewPager на ViewPager2.

      Например, если в вашем приложении есть чертежи, которые необходимо отразить для макета RTL, выполните один из следующих шагов в зависимости от целевой версии Android:

      • Android 4.3 (уровень API 18) и более ранние версии
        • добавьте и определите файлы ресурсов -ldrt.
        • используйте android:autoMirrored="true" при определении drawable, что позволит системе автоматически обрабатывать зеркальное отображение макета RTL
        • android:textAlignment (ссылка здесь)
          • Значения свойства: наследовать, центр, гравитация, textStart, textEnd, viewStart, viewEnd
          • Значения свойств: inherit, anyRtl, firstStrong, firstStrongLtr, firstStrongRtl, locale, ltr, rtl

          Чтобы предоставить специализированные ресурсы для языков с письмом справа налево, вы можете использовать ресурсы для конкретных направлений и языков. Ресурсы внутри таких каталогов будут использоваться только для языков RTL или для одной конкретной локали. См. ниже:

          4. Форматирование

          Для достижения глобальной готовности настоятельно рекомендуется использовать API-интерфейсы с учетом региональных настроек Android.Экосистема Android использует библиотеку ICU и проект CLDR для обеспечения Unicode и другой поддержки интернационализации.

          Ознакомьтесь со следующим набором мощных библиотек, которые рекомендуется использовать при разработке вашего приложения:

          Давайте посмотрим, как лучше всего использовать некоторые из упомянутых выше библиотек!

          Не программируйте формат даты

          Выполнить

          Не

          В параметре Не выводить через SimpleDateFormat обратите внимание, что порядок содержимого оставался таким же, как и в скелете (MMMM d день месяца), независимо от локали, что означает правило локали не уважали. Данные о месяце и дне были локализованы, а стиль — нет.

          При использовании DateFormat.getBestDateTimePattern мы можем наблюдать всю дату, т. е. и стиль, и содержимое правильно локализованы.

          При работе с датой очень важно обратить внимание на стиль даты шаблона, который будет указывать на выходные данные. Вы можете увидеть синтаксис формата даты/времени здесь.

          Не программируйте формат времени жёстко

          Выполнить

          Не

          Точно так же очень важно следить за шаблоном стиля времени, который будет указывать на выходные данные. Вы можете увидеть синтаксис формата даты/времени здесь.

          Не думайте, что числовой формат одинаков для каждой локали

          Выполнить

          Не

          Избегайте жестко заданных единиц измерения

          Выполнить

          Не

          Обратите внимание, что класс MeasureFormat может форматировать не только единицы измерения в соответствии с локалью, но и числа, пробелы, наличие пробелов и т. д.

          Для получения дополнительной информации о доступных единицах измерения нажмите здесь. Вы также можете использовать различную ширину для единиц измерения (УЗКИЕ, КОРОТКИЕ, ШИРОКИЕ, ЦИФРОВЫЕ).

          Используйте BidiFormatter для форматирования смешанного контента (текст LTR и RTL)

          Выполнить

          Не

          Если вы присмотритесь, номер дома (15) появится справа от адреса, а не слева, как ожидалось, из-за чего номер дома больше похож на странный почтовый индекс. Та же проблема может возникнуть, если вы включаете текст RTL в сообщение, в котором используется направление текста LTR.

          Чтобы справиться с этим, метод unicodeWrap() определяет направление строки и заключает ее в символы форматирования Unicode, которые объявляют это направление, поэтому содержимое будет отображаться соответствующим образом.

          Подведение итогов нашего руководства по разработке приложений для Android

          Мы искренне надеемся, что это руководство помогло прояснить самые насущные вопросы и, самое главное, подготовило вас к тому, чтобы сделать ваше приложение для Android глобальным. Вот краткий обзор:

          • Никогда не жестко кодируйте строки в исходном коде и не используйте внешние ресурсы,
          • Избегайте конкатенации и используйте класс FormatMessage,
          • Поддержка макетов с письмом справа налево и двунаправленного текста.
          • Создавайте код с высокой степенью локализации и используйте Android API,
          • Правильно обрабатывать множественное число,
          • Предоставлять контекстную информацию в строковых ресурсах,
          • Тест-драйв с псевдолокалями,
          • Следуйте рекомендациям CxD.

          Если вы чувствуете, что готовы начать использовать передовые методы разработки многоязычных приложений для Android и сосредоточиться на написании кода, пусть Phrase сделает всю тяжелую работу. Подпишитесь на 14-дневную пробную версию, и если у вас возникнут какие-либо вопросы, отправьте сообщение или оставьте комментарий ниже в любое время!

          Существует множество вариантов того, как сделать свой Android-телефон максимально эффективным, и существует множество нюансов, касающихся того, какой из вариантов лучше всего сделать. У каждого есть свое мнение о лучших приложениях, макетах домашнего экрана, средствах запуска и так далее. Однако есть некоторые устойчивые факторы, которых нельзя избежать. Вот десять правил, которые можно и нельзя делать каждому пользователю Android.

          Что нужно сделать: настроить ограничения на использование данных

          Не превышайте месячную норму снова.

          В основных настройках системы каждого Android-смартфона есть инструмент для контроля и ограничения использования данных. В наш век ограниченных тарифных планов вам, вероятно, следует уделить время, чтобы настроить это как можно скорее. Вы можете установить дату ежемесячного платежного цикла, лимит данных и настроить предупреждение, когда вы приближаетесь к своему лимиту. Есть даже возможность отключить данные, чтобы у вас не было излишков, если это делает ваш оператор связи.

          Нельзя: использовать сторонние экраны блокировки

          Стандартный экран блокировки всегда надежнее и стабильнее, чем его аналоги.

          Многие части вашего телефона можно настраивать, и вы даже можете заменить то, что вам не нравится. Есть один компонент, который вы должны оставить в покое — экран блокировки. Play Store предлагает множество приложений для замены экрана блокировки, но официального способа замены экрана блокировки Android не существует. Это означает, что все эти приложения — просто беспорядочные взломы, требующие жертвовать безопасностью. Метод, который они используют для захвата экрана, когда вы просыпаете телефон, также может вызвать задержку. Когда дело доходит до экрана блокировки, вы должны просто обойтись ограниченными возможностями настройки, включенными в ваш телефон.

          Что нужно сделать: настроить и использовать «Окей, Google»

          Мгновенный голосовой поиск откуда угодно!

          Слово "Окей, Google" – это самый быстрый способ запустить голосовой поиск на Android, и вы должны им воспользоваться. Доступные вам параметры немного различаются от одного устройства к другому, но вы, по крайней мере, должны иметь возможность произнести «ОК, Google», когда устройство не спит, чтобы открыть голосовой поиск (так называемый «ОК, Google везде»). Чтобы включить эту функцию, перейдите в приложение Google и откройте настройки голоса, чтобы обучить его своему голосу. Некоторые устройства (например, Nexus 6) даже могут прослушивать OK Google даже при выключенном экране.

          Не устанавливайте APK из ненадежных источников

          Будьте осторожны с тем, что вы загружаете!

          Одна из замечательных особенностей Android заключается в том, что вы можете получать приложения из различных источников за пределами Google Play, таких как Amazon и репозиторий F-Droid с открытым исходным кодом. Однако с большой силой приходит и большая ответственность.

          Не устанавливайте APK-файлы, размещенные на форумах, и уж точно не пытайтесь загружать пиратские приложения и игры на свой телефон. Это отличный способ избавиться от вредоносных программ и спама. Вы можете не отключать параметр Неизвестные источники в настройках безопасности, если не планируете загружать какие-либо приложения за пределами Google Play.

          Что нужно сделать: отключите нежелательные приложения

          Убирайся отсюда с этим хламом.

          Практически каждый телефон и планшет поставляется с несколькими встроенными приложениями, которые вам не нужны. Даже если вы никогда их не используете, они все равно останутся в вашем списке приложений, а некоторые даже запустятся в фоновом режиме. Часто вы не сможете удалить приложение, если оно вам не нужно. Это особенно часто встречается в приложениях для управления учетными записями операторов связи.

          Если они вам не нужны, просто отключите их. Вам не нужно рутировать или делать что-то необычное, просто откройте настройки системы и найдите диспетчер приложений (к сожалению, расположение в настройках зависит от устройства). Прокрутите список и нажмите на приложения-нарушители, чтобы открыть информационную страницу. Там вы увидите кнопку отключения. Легко.

          Нельзя убивать фоновые задачи

          Это принесет больше вреда, чем пользы.

          Несмотря на то, что вы слышали, Android отлично справляется со своими фоновыми задачами. Вам не нужно приложение диспетчера задач или что-то еще, что претендует на ускорение вашего телефона за счет очистки оперативной памяти. Когда процесс не нужен, Android достаточно умен, чтобы завершить его. На самом деле микроуправление задачами приведет к замедлению работы телефона, потому что большинство процессов, которые эти приложения убивают, просто запускаются снова и потребляют больше энергии в процессе.

          Что нужно сделать: установите безопасный экран блокировки и используйте Smart Lock

          Безопасность и удобство? Зарегистрируйте меня!

          Одной из лучших функций Android является Smart Lock (только для Android 5.0 и более поздних версий), и это означает, что нет никаких причин откладывать использование защищенного экрана блокировки. Вы можете установить графический ключ или экран блокировки с помощью PIN-кода, чтобы предотвратить несанкционированное отслеживание, а затем использовать интеллектуальную блокировку, чтобы автоматически вернуться к более быстрой разблокировке при выполнении определенных условий. Например, держите экран прокрутки активным, когда вы дома, но если вы находитесь вне дома, вступает в действие безопасный экран блокировки. Вы также можете использовать доверенные устройства Bluetooth или даже свое лицо, чтобы разблокировать телефон, когда это удобно.

          Не используйте сторонние антивирусные приложения

          Это просто лишнее.

          Интернет может быть пугающим местом, и часто сенсационное освещение проблем безопасности Android не помогает. Многие телефоны даже поставляются с предустановленными антивирусными приложениями. Откровенно говоря, они вам не нужны. Они просто будут работать в фоновом режиме и тратить циклы процессора на сканирование всех установленных вами приложений, хотя Google уже сканирует их автоматически через сервисы Play. Ваш телефон лучше без стороннего антивирусного приложения.

          Что делать: планируйте заранее с помощью диспетчера устройств

          Опять в диванных подушках или какой-то хулиган забрал?

          Google включает функции потерянного телефона как часть всех устройств Android с помощью Диспетчера устройств, доступ к которому можно получить с любого компьютера или телефона на веб-сайте Диспетчера устройств. Если вы когда-нибудь потеряете из виду свой телефон, этот инструмент может отследить его, заставить его звонить, заблокировать его и даже удаленно удалить все, если вы думаете, что он никогда не вернется домой. Просто убедитесь, что у вас есть полный доступ администратора для диспетчера устройств в настройках. Перейдите в раздел Безопасность и найдите меню Администраторы телефона. Убедитесь, что Диспетчер устройств установлен, и все готово.

          Нельзя: перезагружать телефон сразу после смены пароля Google

          Защита устройства отключена переключателем разблокировки OEM.

          Google добавила систему защиты устройств в Android 5.1, чтобы сделать украденный телефон бесполезным для воров. Android теперь запрашивает данные для входа из последней учетной записи Google, которая использовалась на устройстве после сброса, когда включена защита устройства. Ее уже поддерживает значительное количество устройств, и в будущем эта функция будет по умолчанию доступна почти для всех телефонов и планшетов.

          Малоизвестная часть этой схемы защиты – автоматическая блокировка устройства, которая действует в течение трех дней после смены пароля Google. Технически возможно, что кто-то, кто украл ваш телефон, мог также взломать вашу учетную запись и изменить пароль, а затем сбросить настройки телефона, чтобы обойти блокировку. Таким образом, вы не можете войти в только что сброшенное устройство менее чем через 72 часа после смены пароля. Перебор? Возможно, но все же не стоит испытывать судьбу.

          Примечание. Когда вы покупаете что-либо после перехода по ссылкам в наших статьях, мы можем получить небольшую комиссию. Подробнее читайте в нашей политике в отношении партнерских ссылок.

          Читайте также: