Intereting Posts
Как импортировать библиотеку сохранения пространства в проект Android Проблема с базовой аутентификацией доступа в загрузчике файлов Закройте приложение и удалите из последних приложений / Как вызвать publishInstall () в графике facebook api android Что касается правильной прокрутки в режиме горизонтального просмотра ресайклеров Ядро Android Navigation реализовано с помощью действий Разрешение отказа: startActivity запрашивает запуск как пользователь -2, но вызывает от пользователя 0; Это требует android.permission.INTERACT_ACROSS_USERS_FULL Как получить значение столбца из курсора sqlite? Android Studio .2.2 и пакет Gradle не существуют Создайте приложение-волшебник на Android-устройстве HttpClient.execute бросает OutOfMemoryError SetSupportActionBar () выбрасывает исключение Nullpointer Как искать адрес по имени в Google Map Android Xamarin.Forms MissingMethodException: «Android.Support.V4.Widget.DrawerLayout.AddDrawerListener» не найден Android ADT 23.0.4 показывает Compile With: API21: Android 4.X (L Preview) Вместо API21: Android 5.0

Как сделать Android Expansion File с помощью Android Studio?

Мне нужно загрузить .apk но он превышает 50 МБ.

Я читал об этом по документации и некоторым вопросам, но у меня возникли трудности с этой работой.

Есть ли у кого-нибудь учебник, объясняющий, как это сделать (с помощью Android Studio), и если есть какой-то способ использовать Gradle для этого?

Solutions Collecting From Web of "Как сделать Android Expansion File с помощью Android Studio?"

Я сделал это по нескольким проектам, но я никогда не понял простой способ. Инструкции по

http://developer.android.com/google/play/expansion-files.html

Помог мне разобраться в основах, но я обнаружил, что части процесса (например, «проект обновления Android») не работают должным образом с Gradle.

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

Добавьте эти разрешения в AndroidManifest.xml

 <uses-permission android:name="com.android.vending.CHECK_LICENSE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

Добавить зависимость Службы Служб для build.gradle

 dependencies { compile 'com.google.android.gms:play-services:4.0.30' } 

Откройте диспетчер SDK и установите библиотеку расширения Google Play APK и библиотеку лицензирования Google Play .

Скопируйте исходные файлы java из этих папок в папку источника / основного / java вашего проекта:

 YOUR-ANDROID-SDK-FOLDER\extras\google\play_apk_expansion\zip_file\src YOUR-ANDROID-SDK-FOLDER\extras\google\play_apk_expansion\downloader_library\src YOUR-ANDROID-SDK-FOLDER\extras\google\play_licensing\library\src 

открыто

 YOUR-ANDROID-SDK-FOLDER\extras\google\play_apk_expansion\downloader_library\res 

Скопируйте drawable-hdpi , drawable -mdpi и макет в папку источника / основного / res вашего проекта.

Для всех файлов в папках значений объедините содержимое из файла в соответствующий файл в вашем проекте.

Создайте класс, который расширяет android.content.BroadcastReceiver

Добавьте что-то подобное вашему манифесту:

 <receiver android:name="mypackage.MyReceiver"/> 

Создайте класс, который расширяет com.google.android.vending.expansion.downloader.impl.DownloaderService

Добавьте что-то подобное вашему манифесту:

 <service android:name="mypackage.MyDownloaderService"/> 

Скомпилируйте проект и найдите ошибки, связанные с

 import com.android.vending.expansion.downloader.R; 

Вместо этого импортируйте свои собственные ресурсы проекта.

Вот некоторая верная информация для людей, которые попадают сюда на этом посту, поскольку есть некоторые вещи, которые изменились в том, как работают расширения apk, а также если вы используете Android Studio, чтобы заставить библиотеки работать. Вам понадобится библиотека игровых сервисов и библиотека загрузчика. (А также инструменты zip, если вы хотите использовать zip в качестве файла расширения и читать файлы и фильмы прямо из ZIP без распаковки).

С этими библиотеками довольно просто реализовать загрузку apk для расширения, просто убедитесь, что:

  1. Ваша деятельность (та, где вы хотите реализовать загрузку пакета расширения, когда загрузка не была выполнена автоматически) реализует IDownloaderClient.

  2. Вы настроили службу и приемник и настроили их в своем манифесте.

  3. BASE64_PUBLIC_KEY в классе сервиса верен. Загрузите первый apk => в Службы и API в консоли разработчика под своим приложением => Лицензионный код для этого приложения.

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

 boolean expansionFilesDelivered() { for (XAPKFile xf : xAPKS) { String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsMain, xf.mFileVersion); Log.i(TAG, "Expansion filename " +fileName); if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false)) return false; } return true; } 

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

 private static class XAPKFile { public final boolean mIsMain; // true public final int mFileVersion; //example 4 public final long mFileSize; //example 126515695L // example => main expansion that was first introduced in apk version 4 and is 126515695 bytes in size XAPKFile(boolean isMain, int fileVersion, long fileSize) { mIsMain = isMain; mFileVersion = fileVersion; mFileSize = fileSize; } } 

Его также довольно легко читать файлы фильмов и другие материалы непосредственно из файла расширения с помощью zip-инструментов, которые предоставил Google (com.android.vending.zipfile).

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

 ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, APKX_MAIN_APK, APKX_PATCH_APK); 

видео

Для воспроизведения видео непосредственно из этого файла zipresourcefile:

 AssetFileDescriptor a = expansionFile.getAssetFileDescriptor(pathToFileInsideZip); 

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

 player.setDataSource(a.getFileDescriptor(), a.getStartOffset(), a.getLength()); 

Другие

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

 expansionFile.getInputStream(pathToFileInsideZip);` 

Кроме того, убедитесь, что вы не сжимаете видео в zip, чтобы это работало! Например, чтобы не сжимать файлы .mp4:

 zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*" 

ПРИМЕЧАНИЕ 1

Вы больше не можете использовать черновик, поскольку ссылка на файл расширения еще не активна. Вы должны сначала загрузить версию в Alpha или Beta с файлом расширения. (Добавление файла расширения возможно только из второго загружаемого вами файла apk). Поэтому убедитесь, что вы видите файл расширения apk, указанный при нажатии деталей в разделе публикации разработчиков в APK.

ЗАМЕТКА 2

Если вы используете студию Android и хотите использовать библиотеку загрузчика, не просто скопируйте имя пакета и java-файлы в свой собственный каталог приложений src. Импортируйте библиотеку загрузчика в eclipse и выберите export => файлы сборки градиента. После этого вы можете импортировать библиотеку в качестве модуля в студии Android.

ЗАМЕТКА 3

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

Добавьте их в качестве модулей или импортируйте их в eclipse в качестве библиотек, перейдите в студию Android и импортируйте проект студии без андроида. Перейдите в Project Directory

Мне просто удалось создать приложение, которое использует файлы расширения с Android Studio. Это монументальный вызов. Мой первый совет: если вы просто хотите большое приложение, сделайте это для продукта Apple. Apple очень хорошо прикладывает большие приложения. С другой стороны, для Android почти невозможно сделать приложение размером более 100 мегабайт.

Если вы хотите создать большое приложение для Android, сначала запустите приложение. Но не выпускайте какую-либо версию приложения с compileSkdVersion больше 22. Позже я объясню, что библиотеки расширений не работают с более поздней версией, поэтому ваше окончательное приложение должно быть версии 22 или меньше. Если вы выпустили более позднюю версию, Google Store не позволит вам вернуться к версии 22. В этом случае отмените свой идентификатор приложения и создайте новое приложение, используя версию 22.

Библиотеки и код, которые вам нужны, могут быть получены с помощью инструментов-> android-> SDK Manager ». На вкладке« Инструменты SDK »выберите и загрузите библиотеку расширений Google Play APK и библиотеку лицензирования Google Play . В верхней части окна« Диспетчер SDK »обратите внимание на Android SDK Location: После загрузки вы можете найти эти файлы в своем каталоге SDK в разделе extras / google . На данный момент интересующие вас каталоги называются market_apk_expansion и market_licensing .

Документация Android на файлах расширений дает вам инструкции по связыванию этих библиотек с вашим проектом. Я потратил часы, пытаясь сделать эту работу. Как правило, Android Studio делает плохие вещи. Во-первых, он никогда не дает сообщений об ошибках, когда то, что вы вводите, неверно. Оба раза, когда я получал файлы расширения для работы, я включил библиотеки в свое приложение и не использовал функции библиотеки Android Studio. Однако размещение библиотек в вашем приложении непросто.

Во-первых, я должен объяснить, что эти библиотеки старые и не работают с последними версиями SDK. Мне удалось заставить библиотеки работать с compileSdkVersion в 22. (См. Build.gradle для модуля: приложение .) TargetSdkVersion должно быть 22. И в зависимостях вы должны скомпилировать 'com.android.support:appcompat-v7 : 22.2.1 ' . Это позволит вам использовать DisplayWebpageActivity.class. Я думаю, что это было добавлено в версии 23, но, похоже, это работает в этой версии 22. Я также добавил компиляцию 'com.google.android.gms: play-services-appindexing: 8.1.0', но я не знаю, необходимо.

На мой взгляд, для простых людей нет надежды написать код, необходимый для загрузки приложения. Я использовал код из образца, который включен в «дополнительные». Этот образец находится в / extras / google / market_apk_expansion / downloader_sample . Что вам нужно сделать, так это сделать это приложение-образец (которое ничего не делает, но загружает файлы .obb), это первая страница вашего приложения. Добавьте намерение в примерную программу, чтобы она вызывала настоящую первую страницу вашего приложения, когда файлы .obb присутствуют.

Примерная программа состоит из каталога «res» и трех файлов .java. Вам нужно поместить три файла .java в ваш основной каталог java. Измените имя каталога «res» (на «res2») и поместите его в тот же каталог, который содержит ваш обычный «res» каталог. Чтобы заставить Android Studio распознавать каталоги «res», вы добавляете следующее в файл «build.gradle (Module: app)»:

 sourceSets { main { res.srcDirs = ['src/main/res'] res.srcDirs += [ 'src/main/res2'] res.srcDirs += [ 'src/main/res3'] } } 

Вышеупомянутое находится в разделе android {} . «Res3» будет поступать из библиотек.

Все имена пакетов и некоторые из включений в трех файлах образца .java должны быть исправлены в соответствии с вашим именем пакета. В «res2» будет имя приложения, которое конфликтует с вашим именем приложения, поэтому удалите его. Вы должны исправить свой манифест, чтобы он начал выполнять SampleDownloaderActivity . И исправьте SampleDownloaderActivity, чтобы он вызывал начало вашего приложения, когда есть файлы .obb.

Документация на Android предлагает вам сделать ваш .ob файл архивом ZIP. Я сделал это с моим первым файлом расширения. Для моего приложения это не сработало. У меня было много маленьких изображений. Эти изображения были уже сжаты (.jpg). Доступ к какому-либо изображению был медленным, поэтому я оказался плохо работающим приложением.

Во втором приложении расширения я использовал файл «patch» для каталога и помещал фотографии в «основной» файл. Чтобы получить доступ к фотографии, файл исправления читается и помещается в словарь, содержащий имена фотографий, местоположения и длины. Это позволяет приложению находить, где изображение находится в главном файле, который рассматривается как файл произвольного доступа. Фотографии, которые мне нужны, копируются в хранилище для приложения и присваиваются именам (xxx.jpg). Затем фотографии попадают внутрь HTML-кода.

Две библиотеки также интегрированы в приложение. Существует каталог «res», который переименовывается в «res3» и помещается в тот же каталог, что и в обычном каталоге «res». В моем каталоге app / src / main / java / com / developer / app_name я добавил каталоги «загрузчика» и «лицензирования». Я написал программу для перемещения библиотек в свои каталоги, исправляя имена пакетов и другие вхождения исходного имени пакета. Программа получила только некоторые имена, которые необходимо было изменить. Продолжайте исправлять все эти имена, игнорируя некоторые другие ошибки. Многие вещи, ссылающиеся на каталог «res3», не работали, пока я не добавил оператор импорта следующим образом:

 import com.developer.app_name.R; 

В библиотеке лицензирования файл LicenseChecker.java содержит код, который будет сбой в SDK версии 22. Вы должны исправить этот код или использовать более старую версию SDK. Перейдите к строке 150. Прокомментируйте код, начинающийся с boolean bindResult = mContext в Context.BIND_AUTO_CREATE); , Замените его следующим:

 Intent serviceIntent = new Intent( new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))); serviceIntent.setPackage("com.android.vending"); 

В библиотеке есть еще две ошибки, в которых Android Studio дает хорошие советы о способах их исправления.

Во время отладки вы можете вручную поместить файлы .bb на свое устройство. На моем Android это делается в Nexus 5 / Internal storage / Android / obb, где я создаю папку с именем com.developer.app_name. Я обнаружил, что то, что я вижу на своем компьютере, – это не всегда то, что есть в устройстве. Иногда я должен выключить и выключить устройство, чтобы увидеть, что на самом деле существует. Я потратил много времени, пытаясь понять, почему приложение не могло найти файлы .bb, когда я мог видеть их через компьютер. На самом деле файлов .obb там не было.

После того, как приложение работает в режиме отладки с файлами .obb и без него. Без файлов .bb он сообщает вам, что они не могут быть получены из магазина, пришло время принять приложение на производство, чтобы закончить его тестирование. Если это первая загрузка в хранилище, программа загрузки не запрашивает файлы .bb. Загрузите приложение. Затем, прежде чем пытаться ее освободить, измените номер загрузки и номер версии и загрузите ее во второй раз. На этот раз он попросит файлы .obb.