Автор работы: Пользователь скрыл имя, 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
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУВПО
БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Информатика и программное обеспечение»
РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА
СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ *.OBB ФАЙЛОВ ПРИЛОЖЕНИЯМИ ANDROID
Выполнила студентка гр. 08-МОА
________________ Филипенко М.Ю.
«_____»___________2012 г.
Руководитель
________________ Панус Д.Н.
«_____»__________2012 г.
Брянск 2012
СОДЕРЖАНИЕ
Введение…………………………………………………………
1. Общая информация об использовании .obb файлов…………………..4
2. Особенности загрузки файлов…………………………………………..6
3. Реализация загрузки файлов………………………………………..….11
4. Получение имени файла………………………
5. Использование APK Expansion Zip Library……………………..…….16
Заключение……………………………………………………
ВВЕДЕНИЕ
Google Play в настоящее время требует, чтобы размер APK файлов был не больше 50 Мб. Для большинства приложений этого достаточно. Тем не менее, некоторые приложения содержат графику высокой точности, медиа-файлы и другие крупные объекты. Раньше, если приложение превышало 50 Мб, необходимо было загружать дополнительные ресурсы самостоятельно после открытия приложения. Хостинг и обслуживание этих файлов может быть дорогостоящим. Чтобы сделать процесс более легким и удобным для пользователей, Google Play позволяет подключить два больших файла расширения, которые дополняют APK файл.
Google Play бесплатно размещает у себя ваши файлы расширения. Файлы сохраняются в общем хранилище (карта SD или USB), куда приложение имеет доступ. На большинстве устройств Google Play загружает файлы расширения в тоже самое время, когда загружается само приложение, поэтому не возникает проблем даже при первом запуске APK. В некоторых случаях, однако, ваше приложение должно загрузить файлы с Google Play при запуске.
Каждый раз, когда загружаете APK с помощью Google Play Android Developer Console, у вас есть возможность добавить один или два файла расширения. Каждый файл может быть до 2 Гб и иметь любой формат, но рекомендуется использовать сжатый файл для отображения полосы загрузки.
Два файла расширения можно использовать любым образом, но рекомендуется, чтобы главный файл содержал первичные ресурсы и обновлялся редко, а дополнительный (patch) файл был меньше и обновлялся по мере необходимости.
Однако, даже если ваше приложение требует обновления только patch файла, все равно необходимо загрузить новый APK с обновленным versionCode в манифесте.
Каждый файл может иметь любой формат (zip, pdf, mp4 и т.д.). Также можно использовать инструмент Jobb для инкапсуляции и шифрования набора файлов и будущих патчей этого набора. Независимо от типа файлов, Google Play переводит их в бинарное представление и переименовывает следующим образом:
[main|patch].<expansion-
[main|patch] – определяет, является файл дополнительным или главным.
expansion-version – это целое число, которые соответствует первой версии APK (значение Android:versionCode).
package-name – Java-пакет приложения.
Когда Google Play загрузил ваш файл расширения на устройство, он сохраняется в общем хранилище. Вы не должны перемещать, удалять, либо переименовывать эти файлы. Местонахождение файлов:
<shared-storage>/Android/obb/<
<shared-storage> - доступно из getExternalStorageDirectory ().
package-name – доспупно из getPackageName().
Если вам нужно извлечь содержимое файла расширения, нельзя затем удалять .obb файл и сохранять распакованные данные в той же директории. Необходимо сохранить их в каталоге, полученном getExternalFilesDir (). Но лучше использовать формат файла расширения, позволяющий читать данные непосредственно из него без извлечения. Например, существует библиотека Expansion Zip Library.
В некоторых случаях Google Play не может загрузить файлы или пользователь удалил ранее загруженные файлы расширения. Чтобы решить эту проблему, приложение должно иметь возможность скачивать эти файлы, когда запускается MainActivity, используя URL, предоставляемый Google Play.
Процесс загрузки:
Если приложение бесплатное, то вы не имеете доступа к Application Licensing службе. Это в первую очередь предназначено для соблюдения политики лицензирования вашего приложения. В целях расширения функциональности служба лицензирования была расширена и теперь может присылать URL файлов расширения, размещенных на Google Play. Таким образом, даже если ваше приложение бесплатное для пользователей, необходимо включить библиотеку проверки лицензии (LVL), чтобы использовать файлы.
В дополнение к LVL, необходим код загрузки файлов по HTTP-соединению и сохранения их в общем хранилище. Была создана Downloader-библиотека, которая обрабатывает запросы URL к службе лицензирования, загружает файлы, также позволяет останавливать и возобновлять загрузку.
Если вы хотите разработать собственное решение для загрузки файлов с помощью URL-адресов Google Play, должны следовать документации службы лицензирования для выполнения запросов по получению имен файлов, размеров и URL. Нужно использовать класс APKExpansionPolicy.
Библиотека позволяет
скачивать файлы расширения в
фоновом режиме, показывает пользователю
уведомления о состоянии
Необходимо скачать два пакета из SDK Manager и добавить соответствующие библиотеки:
Если используете Eclipse,
нужно создать проект для каждой библиотеки
и добавить их к приложению. Необходимо
выбрать «Создать проект
из существующих источников» и папку <sdk>/extras/google/market_
Или из командной строки:
android update project --path ~/Android/MyApp \
--library ~/android_sdk/extras/google/
--library ~/android_sdk/extras/google/
Библиотеке требуется несколько разрешений, объявленных в манифесте приложения:
<manifest ...>
<!-- Required to access Google Play Licensing -->
<uses-permission
android:name="com.android.
<!-- Required to download files from Google Play -->
<uses-permission
android:name="android.
<!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->
<uses-permission
android:name="android.
<!-- Required to poll the state of the network connection and respond to changes -->
<uses-permission
android:name="android.
<!-- Required to check whether Wi-Fi is enabled -->
<uses-permission
android:name="android.
<!-- Required to read and write the expansion files on shared storage -->
<uses-permission
android:name="android.
...
</manifest>
Для того, чтобы выполнить загрузку в фоновом режиме, Downloader library предоставляет DownloaderService, а также:
Нужно создать класс в приложении, расширяющее 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.
}
}
В манифесте:
<application ...>
<service
android:name=".
...
</application>
Для того чтобы следить за ходом
загрузки файла, необходимо переопределить OnReceive() для вызова DownloaderClientMarshaller.
public class SampleAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
DownloaderClientMarshaller.
SampleDownloaderService.class)
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
}
Загрузка с использованием Downloader Library включает в себя следующие шаги:
Библиотека имеет несколько 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.
if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
return false;
}
return true;
}
DownloaderClientMarshaller.
Этот метод возвращает целое число, которое указывает требуется загрузка или нет. Возможные значения:
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(
...
PendingIntent
pendingIntent = PendingIntent.getActivity(
notifierIntent, PendingIntent.FLAG_UPDATE_
Информация о работе Создание и использование *.obb файлов приложениями android