我需要使用新的 google-play(或市场)扩展库,但我很难使用它。
我想知道是否有其他人在使用它并注意到我所看到的相同问题,所以如果您能帮助解决这些问题,我将非常高兴:
1.有时我没有将重要事件(例如错误)返回到下载程序活动。
2.它在某些设备上根本不起作用,例如xoom。我想我已经修好了:在平板电脑上下载扩展文件 https://stackoverflow.com/questions/9807048/download-expansion-files-on-tablet/9873671#9873671
3.即使对于相同的设备,一个可以下载文件,另一个也总是会出现连接错误。对于某些设备,它永远无法下载(即使是具有 google-play 应用程序的非 root 设备)。
4.下载完成后,文件可能已损坏,因此我需要使用CRC检查并重新下载所有内容。
5.通知有时会在按下通知后打开下载器活动的多个实例。另外,我不明白为什么他们让通知保留,以防活动仍然显示。
6.当发生错误并稍后处理时,它不会等待用户告诉它恢复。我不确定它是在什么情况下发生的,但这确实很奇怪且不可预测。
7.离开下载器活动后,我收到泄漏服务的异常。
8.对应用程序进行混淆后,它会因通过库完成的 SQL 操作而崩溃。为什么会这样?
编辑:这是因为谷歌决定对 SQL 部分(在文件“DownloadsDB.java”中)进行一些反射操作。为了修复它,我尝试设置 proguard 来忽略整个库(无论如何它是开源的),但它不起作用,所以我所做的是自己提供它想要的类,所以我已经将“DownloadsDB.class.getDeclaredClasses()”替换为“new Class[] {MetadataColumns.class, DownloadColumns.class};” 。
我只是不明白为什么谷歌不能发布一个简单的API来向市场发送一个意图来下载文件并检查它是否正常,或者提供一个不太复杂的库。由于其复杂性,很难找到并修复它们的错误。
我的问题是:有没有其他人尝试过这个库,并且其他人是否成功地使用它而没有任何问题?如果是的话,请发布解决方案...
编辑:谷歌似乎已经更新了它的库(到版本2)。
他们声称接下来的变化:
- 项目清单
- 补丁文件现已下载。
- 蜂窝设备现在支持类似 ICS 的通知
- CRC 检查(来自示例)现在支持压缩的 Zip 文件
- 删除反射的使用以方便混淆
- 服务泄漏已修复
- 从 ZipResourceFile 中删除了不可打印的字符
- 细微的格式更改
- 对此文件的附加评论和编辑
我现在已经测试过了,看来它们已经差不多了。
我发现的唯一错误是,如果我更新扩展文件(以及 APK&filesize&CRC),下载就会开始,但不会删除旧的扩展文件。
此外,通知显示当前时间,而不是任何其他可能与下载相关的内容。
目前,由于我只有一个扩展,因此每次从服务获取 STATE_COMPLETED 状态时,我都会进行下一次检查。我希望它没有任何其他问题:
private void deleteOldExpansionFile()
{
int fileVersion = 0;
final int versionCode = App.getAppVersionCode(DownloaderActivity.this);
fileVersion = versionCode;
final String fileName = Helpers.getExpansionAPKFileName(this, true, fileVersion); //get the expansion file name based on the build version of the app.
final File newFile = new File(Helpers.generateSaveFileName(this, fileName));
final File[] listFiles = newFile.getParentFile().listFiles();
for (final File file:listFiles)
{
final String name = file.getName();
if (name.startsWith(fileName))
continue;
file.delete();
}
}