Удаленный файл расширения APK по-прежнему дает NO_DOWNLOAD_REQUIRED

[ОБНОВЛЕНИЕ]

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


Я реализую поддержку файлов расширения APK (но без поддержки библиотеки XAPK ZIP).

Документация подразумевает, что если необходимый файл расширения APK отсутствует (например, он был удален из папки obb), мое приложение повторно загрузит его. Со мной этого не происходит; мое приложение продолжает говорить NO_DOWNLOAD_REQUIRED. Кажется, что библиотека загрузчика Google Play получает нулевую информацию о загрузке из своей базы данных SQLite. Обратите внимание, что я не обновлял черновик APK и файл расширения в Google Play - они все еще являются первой версией. Кроме того, код версии APK, загруженного в Google Play, также совпадает с кодом на тестовом устройстве.

Подробно:

  1. Файл расширения APK находится в правильной папке (obb). Я использовал его в целях тестирования, прежде чем фактически начал реализовывать функциональность загрузчика.
  2. Когда реализация загрузчика (на основе библиотеки загрузчика Google Play) была завершена, я изменил размер вышеуказанного файла obb, чтобы сделать его недействительным для моего приложения. Следовательно, это заставляет мое приложение вызывать метод startDownloadIfNeeded ().
  3. Сначала я запустил свою реализацию без файлов в Google Play. Ответ был, как я и ожидал: «Загрузка не удалась, потому что не удалось найти ресурсы».
  4. Затем я загрузил свой 40-мегабайтный APK и 4-мегабайтный файл расширения в Google Play (для тестирования). Обратите внимание, что этот файл расширения размером 4 МБ не является недопустимым, который был оставлен в папке obb. Когда я запустил свою реализацию, через 1,5 секунды пришел ответ: «Загрузка завершена».
  5. Это было странно, потому что мое интернет-соединение не так быстро, чтобы загрузить 4 МБ. Действительно, папка obb (папка для файлов расширения APK) все еще содержала недопустимый файл расширения, который я изначально поместил туда вручную. То есть ничего не скачалось!
  6. Я удалил недопустимый файл, т.е. папка obb теперь пуста, но загрузка по-прежнему не начинается, а в библиотеке загрузчика написано NO_DOWNLOAD_REQUIRED. (Я проверил его внутреннюю реализацию: когда он запрашивает информацию о загрузке в базе данных SQLite, после запроса он получает значение null.)

Я только что где-то читал на SO, что файлы расширения APK, загруженные в Google Play, должны вступить в силу через несколько часов. В моем случае я протестировал свою реализацию сразу после загрузки. Но он, должно быть, заметил, что в Google Play есть файлы, потому что вместо «ресурсы не найдены» было выдано другое сообщение («Загрузка завершена»). Жаль, что он на самом деле ничего не скачивал; и с тех пор он даже не пытается (продолжает возвращать NO_DOWNLOAD_REQUIRED).

Что мне не хватает?

Разве библиотека загрузчика не должна замечать удаление файла расширения APK? Его реализация, кажется, справляется с этим, но только если запрос базы данных SQLite возвращает ненулевое значение для загружаемых файлов.

Соответствующая часть внутренней реализации библиотеки загрузчика Google Play (последний комментарий мой):

    int status = NO_DOWNLOAD_REQUIRED;

    // the database automatically reads the metadata for version code
    // and download status when the instance is created
    DownloadsDB db = DownloadsDB.getDB(context);

    // we need to update the LVL check and get a successful status to
    // proceed
    if (isLVLCheckRequired(db, pi)) {
        status = LVL_CHECK_REQUIRED;
    }
    // we don't have to update LVL. do we still have a download to start?
    if (db.mStatus == 0) {
        DownloadInfo[] infos = db.getDownloads();
        if (null != infos) {
            for (DownloadInfo info : infos) {
                if (!Helpers.doesFileExist(context, info.mFileName, info.mTotalBytes, true)) {
                    status = DOWNLOAD_REQUIRED;
                    db.updateStatus(-1);
                    break;
                }
            }
        }            
        /// <----- This is when infos==null, in this case result will be NO_DOWNLOAD_REQUIRED

    } else {
        status = DOWNLOAD_REQUIRED;
    }

person Thomas Calc    schedule 26.03.2014    source источник
comment
Со мной этого не случилось. Этот код плохо документирован и написан так, как будто никто не собирается его использовать. По-прежнему не могу скачать файлы. Я имею в виду давай! Это 1 zip-файл, загруженный из Интернета! Действительно?! Мне нужно написать 500-1000 строк кода, чтобы загрузить 1 файл ?! Я бы лучше устроил это самому.   -  person milosmns    schedule 12.07.2015


Ответы (1)


Если вы столкнулись с той же проблемой, удалите приложение, а затем установите его снова. (Не позволяйте Eclipse переустанавливать его обычным способом. Полностью удалите его с устройства вручную.)

person Thomas Calc    schedule 28.03.2014