Исторически сложилось так, что приложения дляAndroid, были ограниченны размером в 50МВ. Причина вполне очевидна: мобильные устройства пока не могут нести на борту терабайтные диски. Однако, с ростом вычислительной мощности росло и желания разработчиков создавать сложные, а значит и большие, программы и игры. Кроме того, размер памяти в телефонах тоже увеличивался, и барьер в 50 Мб стал фактором, тормозящим развитие платформы. В связи с этим разработчикиAndroidрешили расширить предел памяти для приложений до 4 Гб.
Предложенное Google решение довольно замысловато. Сама программа по-прежнему не может весить больше 50 Mb, но теперь к ней можно добавить два файла расширений размером по 2 Гб каждый. В Android Market пользователю будет показываться суммарный размер программы с учетом файлов расширения. На новых устройствах установка программы на телефон пользователя будет начинаться только после того как он полностью выкачает и саму программу и расширения. На старых телефонах расширения будут загружаться при первом запуске программы.
Googleрекомендует использовать первый файл расширений как хранилище ресурсов, а второй – для доставки патчей и исправлений.
Полезные ресурсы.
Android Developers в своем блоге приводят несколько примеров, демонстрирующих работу с файлами расширений. Они также отмечают, что для работы с файлами расширений можно использовать библиотеки:
Файлы расширений имеют уникальные имена и могут содержать ресурсы и исходный код. Как только расширения загружены на сайт издателя, им присваивается номер версии кода, соответствующий версии APK-файла с программой. Таким образом, они оказываются связанными вместе. Наименования и локализация имеют такой вид:
Локализация: <shared-storage>/Android/obb/<package-name>/
Имя файла: [main|patch].<expansion-version>.<package-name>.obb
Пример: /sdcard/Android/obb/com.example.myapp/main.5.com.example.myapp.obb
Файлы расширений хранятся в общедоступным хранилище. То есть в отличие от APK-файлов, они могут быть прочитаны из любого приложения.
Загрузку файлов расширений можно осуществить из основной деятельности приложения. Сразу после ее создания нужно проверить доступны ли файлы расширений. Это можно сделать с помощью методов класса “Helpers”. Ниже приводится код проверки:
boolean expansionFilesDelivered(){ // пытаемся получить имя файла, где main == true и version == 3 String fileName= Helpers.getExpansionAPKFileName(this,true,3); // Проверяем существует ли файл и совпадает и его размер с FILE_SIZE? if(!Helpers.doesFileExist(this, fileName, FILE_SIZE,false)){ returnfalse; } returntrue; }
Если файл не существует, запустить сервис загрузчика:DownloaderClientMarshaller.startDownloadServiceIfRequired(). Загрузчик будет выполнять проверку LVL на сервере лицензий. Он сопоставит имена файлов, размеры, и URL-адресоа.
После завершения проверки начнется загрузка файла. Вообще, вы можете и не использовать описанную схему и реализовать что-то свое. Однако, Android Developers отмечают, что они уже реализовали для вас несколько интересных фитч:
Для более полной информации о работе с файлами расширений, почитайте APK Expansion Files.
09 марта 2012
Источник:Tim Bray "Android Apps Break the 50MB Barrier"
Перевод:Евгений Чернов