Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

migrate_legacy_obb_data.sh
Проверка папки для OBB-файлов

Тип файла: скрипт

   

Комментарии


https://developer.android.com/google/play/expansion-files

OBB - Файлы расширения APK

OBB (Opaque Binary Blob) - непрозрачный двоичный объект

Google Play требует, чтобы размер сжатого APK-файла, который загружают пользователи, не превышал 100 МБ.
Для большинства приложений этого достаточно места для всего кода и ресурсов приложения.
Однако некоторым приложениям требуется больше места для высококачественной графики, мультимедийных файлов или других крупных ресурсов.
Раньше, если размер сжатой загрузки вашего приложения превышал 100 МБ, вам приходилось самостоятельно размещать и загружать дополнительные ресурсы, когда пользователь открывает приложение.
Хостинг и обслуживание дополнительных файлов могут быть дорогостоящими, а пользовательский опыт часто не идеален.Чтобы облегчить вам этот процесс и сделать его более приятным для пользователей, Google Play позволяет вам прикрепить два больших файла расширения, дополняющих ваш APK.

Google Play размещает файлы расширения для вашего приложения и бесплатно доставляет их на устройство.
Файлы расширения сохраняются в общем хранилище устройства (SD-карта или раздел, подключаемый через USB; также известное как «внешнее» хранилище), где ваше приложение может получить к ним доступ.
На большинстве устройств Google Play загружает файлы расширения одновременно с загрузкой APK, поэтому в вашем приложении есть все необходимое, когда пользователь открывает его в первый раз.
Однако в некоторых случаях ваше приложение должно загружать файлы из Google Play при запуске.

Если вы не хотите использовать файлы расширения, а размер сжатой загрузки вашего приложения превышает 100 МБ, вместо этого вам следует загрузить приложение с помощью пакетов Android App Bundle , которые позволяют загрузить сжатый размер загрузки до 150 МБ.
Кроме того, поскольку использование пакетов приложений откладывает создание APK и подписание в Google Play, пользователи загружают оптимизированные APK, содержащие только код и ресурсы, необходимые для запуска вашего приложения.
Вам не нужно создавать, подписывать и управлять несколькими APK-файлами или файлами расширений, а пользователи получают меньшие по размеру и более оптимизированные загрузки.

ОБЗОР

Каждый раз, когда вы загружаете APK с помощью консоли Google Play, у вас есть возможность добавить в APK один или два файла расширения.
Каждый файл может иметь размер до 2 ГБ и иметь любой выбранный вами формат, но мы рекомендуем использовать сжатый файл для экономии полосы пропускания во время загрузки.

Концептуально каждый файл расширения играет различную роль:

  • Основной файл расширения (main expansion file) — это основной файл расширения для дополнительных ресурсов, необходимых вашему приложению.
  • Файл расширения патча (patch expansion file) является необязательным и предназначен для небольших обновлений основного файла расширения.

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

    Однако даже если для обновления вашего приложения требуется только новый файл расширения исправления, вам все равно необходимо загрузить новый APK с обновленным versionCodeманифестом. Play Console не позволяет загружать файл расширения в существующий APK.

    Примечание. Файл расширения патча семантически такой же, как и основной файл расширения — вы можете использовать каждый файл по своему усмотрению.

    ФОРМАТ ИМЕНИ ФАЙЛА

    Каждый загружаемый вами файл расширения может иметь любой выбранный вами формат (ZIP, PDF, MP4 и т.д.).
    Вы также можете использовать инструмент JOBB для инкапсуляции и шифрования набора файлов ресурсов и последующих исправлений для этого набора.
    Независимо от типа файла, Google Play считает их непрозрачными двоичными объектами и переименовывает файлы по следующей схеме:

    [main|patch].<expansion-version>.<package-name>.obb

    В этой схеме есть три компонента:

    main или patch
    Указывает, является ли файл основным или файлом расширения исправления.
    Для каждого APK может быть только один основной файл и один файл исправления.

    <expansion-version>
    Это целое число, соответствующее коду версии APK, с которым впервые связано расширение (оно соответствует значению приложения android:versionCode ).

    «Первое» подчеркивается, потому что, хотя Play Console позволяет повторно использовать загруженный файл расширения с новым APK, имя файла расширения не меняется — оно сохраняет версию, примененную к нему при первой загрузке файла.

    <package-name>
    Имя пакета вашего приложения в стиле Java.
    Например, предположим, что ваша версия APK — 314159, а имя вашего пакета — com.example.app.
    Если вы загружаете основной файл расширения, он переименовывается в:
    main.314159.com.example.app.obb

    МЕСТО ХРАНЕНИЯ

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

    Метод getObbDir()возвращает конкретное местоположение файлов расширения в следующей форме:

    <shared-storage>/Android/obb/<package-name>/

    <shared-storage>— это путь к общему пространству хранения, доступному из getExternalStorageDirectory().

    <package-name>— это имя пакета вашего приложения в стиле Java, доступное по адресу getPackageName().

    Для каждого приложения в этом каталоге не может быть более двух файлов расширения.
    Один из них — основной файл расширения, а другой — файл расширения исправлений (при необходимости).
    Предыдущие версии перезаписываются при обновлении приложения новыми файлами расширения.
    Начиная с Android 4.4 (уровень API 19), приложения могут читать OBBфайлы расширения без разрешения внешнего хранилища.
    Однако некоторые реализации Android 6.0 (уровень API 23) и более поздних версий по-прежнему требуют разрешения, поэтому вам нужно будет объявить разрешение READ_EXTERNAL_STORAGEв манифесте приложения и запросить разрешение во время выполнения следующим образом:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

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

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

    Например, мы предоставили проект библиотеки под названием APK Expansion Zip Library , который считывает ваши данные непосредственно из ZIP-файла.

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

    Совет:
    Если вы упаковываете мультимедийные файлы в ZIP-архив, вы можете использовать вызовы воспроизведения мультимедиа для файлов с элементами управления смещением и длиной (например, MediaPlayer.setDataSource()и SoundPool.load()) без необходимости распаковывать ZIP-архив.
    Чтобы это работало, вы не должны выполнять дополнительное сжатие медиафайлов при создании ZIP-пакетов.

    Например, при использовании zipинструмента следует использовать -nопцию, позволяющую указать суффиксы файлов, которые не следует сжимать:

    zip -n .mp4;.ogg main_expansion media_files

    ПРОЦЕСС ЗАГРУЗКИ

    В большинстве случаев Google Play загружает и сохраняет файлы расширений одновременно с загрузкой APK на устройство.
    Однако в некоторых случаях Google Play не может загрузить файлы расширения или пользователь мог удалить ранее загруженные файлы расширения. Чтобы справиться с такими ситуациями, ваше приложение должно иметь возможность самостоятельно загружать файлы при запуске основного действия, используя URL-адрес, предоставленный Google Play.

    Процесс загрузки с высокого уровня выглядит так:

  • Пользователь выбирает установку вашего приложения из Google Play.
  • Если Google Play может загружать файлы расширения (что характерно для большинства устройств), он загружает их вместе с APK.
  • Если Google Play не может загрузить файлы расширения, он загружает только APK.
  • Когда пользователь запускает ваше приложение, оно должно проверить, сохранены ли уже файлы расширения на устройстве.
    Если да, ваше приложение готово к работе.
    Если нет, ваше приложение должно загрузить файлы расширения по HTTP из Google Play.
    Ваше приложение должно отправить запрос клиенту Google Play с помощью службы лицензирования приложений Google Play , которая отвечает именем, размером файла и URL-адресом для каждого файла расширения. Используя эту информацию, вы затем загружаете файлы и сохраняете их в нужном месте хранения .

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

    ПРАВИЛА И ОГРАНИЧЕНИЯ

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

    Размер каждого файла расширения не может превышать 2 ГБ.

    Чтобы загрузить файлы расширения из Google Play, пользователь должен приобрести ваше приложение из Google Play . Google Play не будет предоставлять URL-адреса ваших файлов расширения, если приложение было установлено другим способом.

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

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

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

    Не сохраняйте другие данные в своем obb/ каталоге Если вам необходимо распаковать некоторые данные, сохраните их в месте, указанном параметром getExternalFilesDir().

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

    ЗАГРУЗКА ФАЙЛОВ РАСШИРЕНИЯ

    В большинстве случаев Google Play загружает и сохраняет файлы расширений на устройство одновременно с установкой или обновлением APK.
    Таким образом, файлы расширения будут доступны при первом запуске вашего приложения.
    Однако в некоторых случаях ваше приложение должно само загрузить файлы расширения, запросив их по URL-адресу, предоставленному вам в ответе службы лицензирования приложений Google Play .

    Основная логика, необходимая для загрузки файлов расширения, следующая:

  • Когда ваше приложение запустится, найдите файлы расширения в общем хранилище (в Android/obb/<package-name>/каталоге).

  • Если файлы расширения есть, все готово, и ваше приложение может продолжать работать.
  • Если файлов расширения нет :
    Выполните запрос с помощью лицензирования приложений Google Play, чтобы получить имена, размеры и URL-адреса файлов расширения вашего приложения.
    Используйте URL-адреса, предоставленные Google Play, чтобы загрузить файлы расширения и сохранить их. Вам необходимо сохранить файлы в общем хранилище ( Android/obb/<package-name>/) и использовать точное имя файла, указанное в ответе Google Play.

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

    Если ваше приложение бесплатное (а не платное), возможно, вы не пользовались службой лицензирования приложений . В первую очередь он предназначен для обеспечения соблюдения политик лицензирования вашего приложения и обеспечения того, чтобы пользователь имел право использовать ваше приложение (он или она по праву заплатили за него в Google Play).
    Чтобы облегчить функциональность файлов расширения, служба лицензирования была усовершенствована и теперь предоставляет ответ вашему приложению, включающий URL-адрес файлов расширения вашего приложения, размещенных в Google Play.
    Таким образом, даже если ваше приложение бесплатно для пользователей, вам необходимо включить библиотеку проверки лицензий (LVL), чтобы использовать файлы расширения APK.
    Конечно, если ваше приложение бесплатное, вам не нужно принудительно проверять лицензию — вам просто нужна библиотека для выполнения запроса, который возвращает URL-адрес ваших файлов расширения.

    Примечание.
    Независимо от того, является ли ваше приложение бесплатным или нет, Google Play возвращает URL-адреса файлов расширения, только если пользователь приобрел ваше приложение из Google Play.

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

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

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

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

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

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

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

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

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

    О БИБЛИОТЕКЕ ЗАГРУЗЧИКА

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

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

    Чтобы реализовать загрузку файлов расширения с помощью библиотеки Downloader, все, что вам нужно сделать, это:

  • Расширьте специальный Serviceподкласс и BroadcastReceiverподкласс, каждый из которых потребует от вас всего несколько строк кода.
  • Добавьте в свое основное действие некоторую логику, которая проверяет, были ли уже загружены файлы расширения, и, если нет, запускает процесс загрузки и отображает пользовательский интерфейс прогресса.
  • Реализуйте интерфейс обратного вызова с несколькими методами в своем основном действии, который будет получать обновления о ходе загрузки.