【发布时间】:2014-03-26 22:26:40
【问题描述】:
[更新]
我在测试设备上卸载并重新安装了该应用程序,它开始正常工作。
我正在实现 APK 扩展文件支持(但不支持 XAPK ZIP 库)。
文档暗示如果缺少所需的 APK 扩展文件(例如,它已从 obb 文件夹中删除),我的应用程序将重新下载它。这不会发生在我身上;我的应用一直说 NO_DOWNLOAD_REQUIRED。似乎 Google Play 下载器库的 SQLite 数据库中的下载信息为空。请注意,我没有在 Google Play 上更新 APK 和扩展文件草稿 - 它们仍然是第一个版本。而且上传到Google Play的APK的versionCode也和测试机上的一致。
详细说明:
- 在正确的文件夹 (obb) 中有一个 APK 扩展文件。在我真正开始实现下载器功能之前,我将它用于测试目的。
- 下载器实现(基于 Google Play 下载器库)完成后,我更改了上述 obb 文件的大小,使其对我的应用程序无效。因此,这会使我的应用调用 startDownloadIfNeeded() 方法。
- 首先,我在没有任何文件的情况下在 Google Play 上运行了我的实现。正如我所料,响应是:“下载失败,因为找不到资源”
- 然后我将我的 40MB APK 和一个 4MB 扩展文件上传到 Google Play(用于测试目的)。请注意,这个 4 MB 的扩展文件不是留在 obb 文件夹中的无效文件。当我运行我的实现时,1.5 秒后出现响应:“下载完成”。
- 这很奇怪,因为我的互联网连接下载 4 MB 的速度并不快。实际上,obb 文件夹(APK 扩展文件的文件夹)仍然包含我最初手动放置的无效扩展文件。也就是说,没有下载任何内容!
- 我删除了无效文件,即 obb 文件夹现在是空的,但仍然没有开始下载,并且下载程序库显示 NO_DOWNLOAD_REQUIRED。 (我检查了它的内部实现:当它查询 SQLite 数据库以获取下载信息时,它在查询后变为空。)
我刚刚在某处读到,上传到 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;
}
【问题讨论】:
-
这并没有发生在我身上。这段代码的文档和编写都很差,好像没有人会使用它。仍然无法下载文件。我的意思是,来吧!这是从 Internet 下载的 1 个 zip 文件!真的?!我需要编写 500-1000 行代码来下载 1 个文件?!我自己托管会更好。
标签: java android google-play android-lvl apk-expansion-files