删除的APK扩展文件仍然提供NO_DOWNLOAD_REQUIRED

时间:2014-03-26 22:26:41

标签: java android google-play android-lvl apk-expansion-files

[更新]

我卸载了,然后再次在测试设备上安装了应用程序,它开始正常工作。


我正在实施APK扩展文件支持(但没有XAPK ZIP库支持)。

文档暗示如果缺少必需的APK扩展文件(例如,它已从obb文件夹中删除),我的应用程序将重新下载它。这对我来说并不会发生;我的应用程序一直说NO_DOWNLOAD_REQUIRED。 Google Play Downloader Library似乎从其SQLite数据库获取下载信息。请注意,我还没有在Google Play上更新草稿APK和扩展文件 - 它们仍然是第一个版本。此外,上传到Google Play的APK版本代码也与测试设备上的版本相同。

详情:

  1. 正确的文件夹(obb)中有一个APK扩展文件。在实际开始实现下载器功能之前,我将它用于测试目的。
  2. 当Downloader实施(基于Google Play下载程序库)完成后,我更改了上述obb文件的大小,使其对我的应用程序无效。因此,这使我的应用程序调用startDownloadIfNeeded()方法。
  3. 首先,我在Google Play上没有任何文件的情况下运行我的实现。正如我所料,回应是:"下载失败,因为无法找到资源"
  4. 然后我将40MB APK和4 MB扩展文件上传到Google Play(用于测试目的)。请注意,此4 MB扩展文件不是obb文件夹中保留的无效文件。当我运行我的实现时,响应在1.5秒后发出:"下载完成"。
  5. 这很奇怪,因为我的互联网连接下载4 MB并不是那么快。实际上,obb文件夹(APK扩展文件的文件夹)仍然包含我最初手动放在那里的无效扩展文件。也就是说,没有下载任何内容!
  6. 我删除了无效文件,即obb文件夹现在为空,但仍然没有开始下载,Downloader Library说NO_DOWNLOAD_REQUIRED。 (我检查了它的内部实现:当它在SQLite数据库中查询下载信息时,它在查询后变为null。)
  7. 我刚刚在某处看到上传到Google Play的APK扩展文件需要几个小时才能生效。就我而言,我在上传后立即测试了我的实现。但是必须注意到Google Play上有文件,因为找不到资源"它会给出不同的消息("下载已完成")。太糟糕了,它实际上并没有下载任何东西;从那以后,它甚至没有尝试(它一直返回NO_DOWNLOAD_REQUIRED)。

    我错过了什么?

    如果APK扩展文件被删除,那么下载者库是否应该注意?它的实现似乎解决了这个问题,但前提是SQLite数据库查询为可下载文件返回非null值。

    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;
        }
    

1 个答案:

答案 0 :(得分:0)

如果遇到相同问题,请卸载该应用程序,然后重新安装。 (不要让Eclipse以通常的方式重新安装它。手动从设备上完全卸载它。)