Создание и использование *.obb файлов приложениями android

Автор работы: Пользователь скрыл имя, 03 Января 2014 в 14:41, практическая работа

Краткое описание

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

Содержание

Введение…………………………………………………………………………...3
1. Общая информация об использовании .obb файлов…………………..4
2. Особенности загрузки файлов…………………………………………..6
3. Реализация загрузки файлов………………………………………..….11
4. Получение имени файла………………………………….……………14
5. Использование APK Expansion Zip Library……………………..…….16
Заключение……………………………………………………………………….17

Прикрепленные файлы: 1 файл

моя ргр.docx

— 46.20 Кб (Скачать документ)

 

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

 

ФГБОУВПО

БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ 

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

 

Кафедра «Информатика и программное обеспечение»

 

 

 

РАСЧЕТНО-ГРАФИЧЕСКАЯ  РАБОТА

СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ *.OBB ФАЙЛОВ ПРИЛОЖЕНИЯМИ ANDROID

 

 

 

Выполнила студентка гр. 08-МОА

________________ Филипенко М.Ю.

«_____»___________2012 г.

 

 

Руководитель

________________ Панус Д.Н.

«_____»__________2012 г.

 

 

 

 

Брянск 2012

СОДЕРЖАНИЕ

Введение…………………………………………………………………………...3

1. Общая информация об  использовании .obb файлов…………………..4

2. Особенности загрузки  файлов…………………………………………..6

3. Реализация загрузки  файлов………………………………………..….11

4. Получение имени файла………………………………….……………14

5. Использование APK Expansion Zip Library……………………..…….16

Заключение……………………………………………………………………….17 

ВВЕДЕНИЕ

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

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

 

  1. ОБЩАЯ ИНФОРМАЦИЯ ОБ ИСПОЛЬЗОВАНИИ *.OBB ФАЙЛОВ

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

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

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

Каждый файл может иметь  любой формат (zip, pdf, mp4 и т.д.). Также можно использовать инструмент Jobb для инкапсуляции и шифрования набора файлов и будущих патчей этого набора. Независимо от типа файлов, Google Play переводит их в бинарное представление и переименовывает следующим образом:

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

[main|patch] – определяет, является файл дополнительным или главным.

expansion-version – это целое число, которые соответствует первой версии APK (значение Android:versionCode).

package-name – Java-пакет приложения.

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

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

<shared-storage> - доступно из getExternalStorageDirectory ().

package-name – доспупно из getPackageName().

Если вам нужно извлечь  содержимое файла расширения, нельзя затем удалять .obb файл и сохранять распакованные данные в той же директории. Необходимо сохранить их в каталоге, полученном getExternalFilesDir (). Но лучше использовать формат файла расширения, позволяющий читать данные непосредственно из него без извлечения. Например, существует библиотека Expansion Zip Library.

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

Процесс загрузки:

  • Пользователь выбирает на Google Play приложение для установки.
  • Если Google Play имеет возможность загрузить файлы расширения, скачивает их вместе с APK.
  • Когда пользователь запускает приложение, оно должно проверить файлы расширения, ранее сохраненные на устройстве. Если они присутствуют, то приложение готово к работе. Если нет, приложение должно загрузить файлы с помощью HTTP с Google Play. Приложение отправляет запрос, используя Google Play’s Application Licensing службу, которая присылает имя файла, расширение и URL. Теперь можно загрузить файлы и сохранить их в надлежащем хранилище.

 

  1. ОСОБЕННОСТИ ЗАГРУЗКИ ФАЙЛОВ

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

В дополнение к LVL, необходим код загрузки файлов по HTTP-соединению и сохранения их в общем хранилище. Была создана Downloader-библиотека, которая обрабатывает запросы URL к службе лицензирования, загружает файлы, также позволяет останавливать и возобновлять загрузку.

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

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

Необходимо скачать два  пакета из SDK Manager и добавить соответствующие библиотеки:

  • Google Play Licensing Library package;
  • Google Play APK Expansion Library Package.

Если используете Eclipse, нужно создать проект для каждой библиотеки и добавить их к приложению. Необходимо выбрать «Создать проект из существующих источников» и папку <sdk>/extras/google/market_licensing или market_apk_expansion/downloader_library. Указать название проекта, такие как «Google Play Licensing Library» и «Google Play Downloader Library». Нажать кнопку Готово. Щелкните правой кнопкой мыши на проект, в котором хотите использовать файл расширения и выберите Свойства. Нажмите кнопку Добавить, чтобы выбрать и добавить библиотеки к приложению.

Или из командной строки:

  • Измените пути на sdk/tools.
  • Запустите обновления проекта с добавлением библиотек:

android update project --path ~/Android/MyApp \

--library ~/android_sdk/extras/google/market_licensing \

--library ~/android_sdk/extras/google/market_apk_expansion/downloader_library


Библиотеке требуется  несколько разрешений, объявленных  в манифесте приложения:

<manifest ...>

    <!-- Required to access Google Play Licensing -->

    <uses-permission   android:name="com.android.vending.CHECK_LICENSE" />

 

    <!-- Required to download files from Google Play -->

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

 

    <!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->

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

 

    <!-- Required to poll the state of the network connection and respond to changes -->

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

 

    <!-- Required to check whether Wi-Fi is enabled -->

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

 

    <!-- Required to read and write the expansion files on shared storage -->

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

    ...

</manifest>


 

Для того, чтобы выполнить загрузку в фоновом режиме, Downloader library предоставляет DownloaderService, а также:

  • BroadcastReceiver, который обнаруживает изменения в подключении к сети устройства (the CONNECTIVITY_ACTION Broadcast) для того, чтобы приостановить загрузку, когда это необходимо, и возобновить загрузку, когда это возможно.
  • Расписание RTC_WAKEUP для повторной загрузки для случаев, когда служба «погибает».
  • Пользовательские уведомления, которые отображают процесс загрузки и любые ошибки или изменения состояния.
  • Позволяет приложению вручную приостановить и возобновить загрузку.
  • Проверяет, чтобы общее хранилище было установлено и доступно, файлы не существуют, достаточно места. Затем уведомляет пользователей, если кто-либо из них не аутентифицирован.

Нужно создать класс в  приложении, расширяющее DownloaderService, и переопределить три метода:

getPublicKey() – возвращает строку, закодированный с помощью RSA открытый ключ для вашей учетной записи, доступный в профиле на сайте разработчика.

GetSalt – возвращает массив слуйчайных чисел, использующийся при создании Obfuscator. Гарантируется, что ваш SharedPreferences файл, в котором данные сохраняются, будет уникальным.

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

public class SampleDownloaderService extends DownloaderService {

    // You must use the public key belonging to your publisher account

    public static final String BASE64_PUBLIC_KEY = "YourLVLKey";

    // You should also modify this salt

    public static final byte[] SALT = new byte[] { 1, 42, -12, -1, 54, 98,

            -100, -12, 43, 2, -8, -4, 9, 5, -106, -107, -33, 45, -1, 84

    };

 

    @Override

    public String getPublicKey() {

        return BASE64_PUBLIC_KEY;

    }

 

    @Override

    public byte[] getSALT() {

        return SALT;

    }

 

    @Override

    public String getAlarmReceiverClassName() {

        return SampleAlarmReceiver.class.getName();

    }

}


В манифесте:

<application ...>

    <service android:name=".SampleDownloaderService" />

    ...

</application>


 

Для того чтобы следить за ходом загрузки файла, необходимо переопределить OnReceive() для вызова DownloaderClientMarshaller.startDownloadServiceIfRequired().

public class SampleAlarmReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        try {

            DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent,

                    SampleDownloaderService.class);

        } catch (NameNotFoundException e) {

            e.printStackTrace();

        }

    }

}


 

 

  1. РЕАЛИЗАЦИЯ ЗАГРУЗКИ ФАЙЛОВ

Загрузка с использованием Downloader Library включает в себя следующие шаги:

  1. Проверка, установлены ли файлы.

Библиотека имеет несколько  APIs в Helper class:

getExtendedAPKFileName (Cintext, c, Boolean mainFile, int versionCode);

doesFileExist (Context c, String filename, long fileSize).

boolean expansionFilesDelivered() {

    for (XAPKFile xf : xAPKS) {

        String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, xf.mFileVersion);

        if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))

            return false;

    }

    return true;

}


 

  1. Начать загрузку путем вызова статического метода

DownloaderClientMarshaller.startDownloadServiceIfRequired (Context c, PendingIntent notificationClient, Class <?> ServiceClass).

Этот метод возвращает целое число, которое указывает требуется загрузка или нет. Возможные значения:

NO_DOWNLOAD_REQUIRED – если файлы уже существуют, или скачивание уже идет.

LVL_CHECK_REQUIRED – если требуется проверка лицензии для приобретения URL-адресов.

DOWNLOAD_REQUIRED – если URL-адреса уже известны, но файлы еще не загружены.

Например:

@Override

public void onCreate(Bundle savedInstanceState) {

    // Check if expansion files are available before going any further

    if (!expansionFilesDelivered()) {

        // Build an Intent to start this activity from the Notification

        Intent notifierIntent = new Intent(this, MainActivity.getClass());

        notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |

                                Intent.FLAG_ACTIVITY_CLEAR_TOP);

        ...

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,

                notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Информация о работе Создание и использование *.obb файлов приложениями android