Проблемы с загрузкой файлов расширения

Я загрузил свое приложение в Google. Он был опубликован. Мой основной файл exp был загружен с кодом версии 2 приложения, и он до сих пор носит то же имя. Мое основное приложение сейчас имеет код версии 4 и все еще использует файл расширения main.2.

Я уже протестировал файл с моим приложением через отладку.

Я создал тестовую учетную запись, вошел в систему на устройстве с этой учетной записью и попытался загрузить через 20 минут после создания этой тестовой учетной записи.

Я считаю, что мой размер файла тоже правильный. Я использую размер из свойств 155 630 535 байт и установил его на 155630535L. Есть еще один, называемый размером на диске, который я не использую.

Я загрузил свой apk более 12 часов назад.

На самом деле не знаю, где я ошибаюсь. Единственное, что меня интересует, это название моей версии 1.13. Нужно ли мне использовать это где-нибудь?

У меня проблемы с загрузкой файлов расширения. Сначала я получал сообщение «Ошибка загрузки, поскольку вы, возможно, не приобрели это приложение». Теперь, после перекомпиляции (файла экспорта) файла apk, его удаления и повторной установки на моем устройстве, я загрузил его в свою учетную запись публикации и теперь получаю сообщение «Не удалось найти ресурсы». Пожалуйста помоги...


person user2672052    schedule 16.08.2013    source источник


Ответы (2)


Ok. Я решил свои проблемы после того, как много боролся сам.

Во-первых, это размер файла только в байтах, а не размер файла в байтах на диске.

Во-вторых, они перенесли тестовый аккаунт в настройки. Вам необходимо создать тестовую учетную запись.

В-третьих, приложение нужно сохранить в черновом режиме. Файлы расширения не будут загружаться при тестировании с использованием тестовой учетной записи, если приложение было опубликовано.

Я надеюсь, что это поможет кому-то.

person user2672052    schedule 17.08.2013
comment
эй, мое приложение находится в черновом режиме, я разместил тестовую учетную запись, я указал правильный размер и все еще получаю ту же ошибку. Любые другие идеи? - person chelo_c; 23.05.2014
comment
Режим черновика также больше не работает, теперь вам нужно опубликовать приложение в альфа- или бета-версии, чтобы правильно протестировать его. См. мой ответ для получения дополнительной информации о файлах расширения apk. - person Jordy; 24.09.2014

Некоторая полезная информация для людей, которые попадают сюда, в этот пост, поскольку есть некоторые вещи, которые изменились в том, как работают расширения apk, а также если вы используете Android Studio для работы библиотек.

ПРИМЕЧАНИЕ 1

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

ПРИМЕЧАНИЕ 2

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

ПРИМЕЧАНИЕ 3

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

Кстати

С этими библиотеками довольно легко реализовать загрузку расширения 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 исправления.

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

Видео

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

AssetFileDescriptor a = expansionFile.getAssetFileDescriptor(pathToFileInsideZip);

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

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

Другое

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

expansionFile.getInputStream(pathToFileInsideZip);`

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

zip -n .mp4 -r zipfile.zip . -x ".*" -x "*/.*"
person Jordy    schedule 24.09.2014