首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >已删除的APK扩展文件仍然给NO_DOWNLOAD_REQUIRED

已删除的APK扩展文件仍然给NO_DOWNLOAD_REQUIRED
EN

Stack Overflow用户
提问于 2014-03-26 22:26:40
回答 1查看 477关注 0票数 2

更新

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

我正在实现APK扩展文件支持(但不支持XAPK库)。

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

详情如下:

  1. 正确的文件夹(obb)中有一个APK展开文件。在实际开始实现下载程序功能之前,我使用它进行测试。
  2. 当下载器实现(基于Google )完成时,我更改了上述obb文件的大小,使其对我的应用程序无效。因此,这使得我的应用程序调用startDownloadIfNeeded()方法。
  3. 首先,我运行我的实现没有任何文件谷歌播放。如我所料:“下载失败是因为找不到资源”。
  4. 然后,我将我的40 MB的APK和一个4 MB的扩展文件上传到Google (用于测试目的)。请注意,这个4MB的扩展文件不是保存在obb文件夹中的无效文件。当我运行我的实现时,响应在1.5秒后出现:“下载完成”。
  5. 这是很奇怪的,因为我的互联网连接不是那么快下载4MB。事实上,obb文件夹( APK扩展文件的文件夹)仍然包含我最初手动放在那里的无效扩展文件。也就是说,没有下载任何东西!
  6. 我删除了无效文件,即obb文件夹现在是空的,但仍然没有开始下载,下载程序库说是NO_DOWNLOAD_REQUIRED。(我检查了它的内部实现:当它查询SQLite数据库以获得下载信息时,它在查询后获得null。)

我刚刚在某个地方读到,上传到Google的APK扩展文件需要几个小时才能生效。在我的例子中,我在上传后立即测试了我的实现。但它一定注意到了谷歌播放的文件,因为它给出了不同的信息(“下载完成”),而不是“找不到资源”。遗憾的是,它实际上没有下载任何东西;从那以后,它甚至没有尝试(它一直返回NO_DOWNLOAD_REQUIRED)。

我遗漏了什么?

如果APK扩展文件被删除,Downloader不应该注意吗?它的实现似乎可以处理这个问题,但只有当SQLite数据库查询返回可下载文件的非空时才能实现。

Google Play Downloader内部实现的相关部分(最后一个评论是我的):

代码语言:javascript
运行
复制
    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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 23:28:59

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22674348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档