Создание и использование *.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 Кб (Скачать документ)

 

        // Start the download service (if required)

        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,

                        pendingIntent, SampleDownloaderService.class);

        // If download has started, initialize this activity to show download progress

        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {

            // This is where you do set up to display the download progress (next step)

            ...

            return;

        } // If the download wasn't necessary, fall through to start the app

    }

    startApp(); // Expansion files are available, start the app

}


 

  1. Когда startDownloadServiceIfRequired() не возвращает ничего, кроме NO_DOWNLOAD_REQUIRED, создать экземпляр IStub по вызову DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class<?> downloaderService).

IStub обеспечивает связь между вашей Activity и службой загрузки, Activity получает отклики о ходе загрузки. Рекомендуется вызывать CreateStub() для создания экземпляра IStub в функции OnCreate(), после того как startDownloadServiceIfRequired() начинает загрузку.

// Start the download service (if required)

        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,

                        pendingIntent, SampleDownloaderService.class);

        // If download has started, initialize activity to show progress

        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {

            // Instantiate a member instance of IStub

            mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,

                    SampleDownloaderService.class);

            // Inflate layout that shows download progress

            setContentView(R.layout.downloader_ui);

            return;

        }

@Override

protected void onResume() {

    if (null != mDownloaderClientStub) {

        mDownloaderClientStub.connect(this);

    }

    super.onResume();

}

 

@Override

protected void onStop() {

    if (null != mDownloaderClientStub) {

        mDownloaderClientStub.disconnect(this);

    }

    super.onStop();

}


 

 

  1. ПОЛУЧЕНИЕ ИМЕНИ ФАЙЛА

Файлы расширения APK были сохранены с использованием формата:

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

Для получения местонахождения  и имен файлов расширения, необходимо использовать getExternalStorageDirectory() и getPackageName() для построения пути к файлам:

// The shared path to all app expansion files

private final static String EXP_PATH = "/Android/obb/";

 

static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {

    String packageName = ctx.getPackageName();

    Vector<String> ret = new Vector<String>();

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

        // Build the full path to the app's expansion files

        File root = Environment.getExternalStorageDirectory();

        File expPath = new File(root.toString() + EXP_PATH + packageName);

 

        // Check that expansion file path exists

        if (expPath.exists()) {

            if ( mainVersion > 0 ) {

                String strMainPath = expPath + File.separator + "main." +

                        mainVersion + "." + packageName + ".obb";

                File main = new File(strMainPath);

                if ( main.isFile() ) {

                        ret.add(strMainPath);

                }

            }

            if ( patchVersion > 0 ) {

                String strPatchPath = expPath + File.separator + "patch." +

                        mainVersion + "." + packageName + ".obb";

                File main = new File(strPatchPath);

                if ( main.isFile() ) {

                        ret.add(strPatchPath);

                }

            }

        }

    }

    String[] retArray = new String[ret.size()];

    ret.toArray(retArray);

    return retArray;

}


 

 

  1. ИСПОЛЬЗОВАНИЕ APK Expansion Zip Library

Пакет расширений содержит библиотеку APK Expansion Zip Library (расположенную в <sdk>/extras/google/google_market_apk_expansion/zip_file/). Это дополнительная библиотека, которая помогает читать сжатые файлы, когда они сохранены как ZIP файлы.

// Get a ZipResourceFile representing a merger of both the main and patch files

ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,

        mainVersion, patchVersion);

 

// Get an input stream for a known file inside the expansion file ZIPs

InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);


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

 

ЗАКЛЮЧЕНИЕ

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

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

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

Библиотека APK Expansion Zip Library помогает читать сжатые файлы, когда они сохранены как ZIP файлы.

 

 


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