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

标签 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的versionCode也与测试设备上的一致。

详细信息:

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

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

我错过了什么?

如果 APK 扩展文件被删除,下载器库不应该通知吗?它的实现似乎可以解决这个问题,但前提是 SQLite 数据库查询为可下载文件返回非空值。

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

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

最佳答案

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

关于java - 已删除的 APK 扩展文件仍然提供 NO_DOWNLOAD_REQUIRED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22674348/

相关文章:

java - 启动 TOMCAT 时出错

javascript - 无法在禁用和启用状态下断言双操作按钮

java - JButton() 仅在鼠标悬停时起作用

android - 由于网络政策存在问题,我的应用被 Google Play 拒绝了?

Android - 跟踪发布构建崩溃/异常/ANR'

java - char 列中的 Spring Boot 存储库日期

android - 处理自定义 ImageView 时出现类转换异常

java - 创建一个 gradle 依赖项以从 git 导入

Android基础教程添加Action Bar,报错: R cannot be resolved to a variable

flutter - 使用 Flutter in_app_purchase 包指定 Google Play 商店订阅优惠