Android 已下载扩展文件,但不在那里
因此,我复制了Android的扩展包示例,并使其基于。通过存储本地.obb文件,我成功地使其工作,但我无法设法使其在下载.obb文件时工作。状态更改为Android 已下载扩展文件,但不在那里,android,apk-expansion-files,Android,Apk Expansion Files,因此,我复制了Android的扩展包示例,并使其基于。通过存储本地.obb文件,我成功地使其工作,但我无法设法使其在下载.obb文件时工作。状态更改为IDownloaderClient。状态\u已完成,但找不到文件 我所经历的步骤: 运行示例(使用BASE64\u公钥更新,新程序包名称,版本号) 已成功使用本地.obb文件进行测试 制作apk并上传与扩展文件一起播放 安装已签名的apk并运行应用程序 这可能是因为在完成后进行检查时发现文件“不完整”,然后被删除 一种可能是下载文件的长度与您提供给
IDownloaderClient。状态\u已完成
,但找不到文件
我所经历的步骤:
BASE64\u公钥更新,新程序包名称
,版本号
)
如果这不能解决这个问题,那么考虑将断点添加到所有文件删除调用中,看看是否有任何一个被触发。
我知道这个答案没有解决潜在的问题,但是我认为这个解释可能会帮助像我这样的人,他们被下载库的响应弄糊涂了: 当谷歌授权服务器通知下载服务没有与应用程序相关的扩展文件时,下载服务将(有点不直观地)将STATE_COMPLETED
传递给onDownloadStateChanged()
。因为它必须对服务器进行异步调用才能找到这个问题,所以它不能直接从startDownloadServiceIfRequired()
返回NO\u DOWNLOAD\u REQUIRED
。它必须启动服务才能咨询服务器
但它似乎只会在安装应用程序后第一次调用下载服务时执行此操作-之后,它会将授权服务器的响应缓存在本地数据库中,将来调用startDownloadServiceIfRequired()
将立即返回无需下载
响应代码256对应于策略。许可
,这意味着软件包名称和公钥有效,但缺少任何文件\u URL
表明Google Play认为应用程序没有扩展文件
在我的例子中,我的扩展文件在应用程序处于草稿状态时起作用,但一旦发布,它实际上就从商店中消失了。我无法确定原因。经过几天的解决方案搜索,我发现了我案例的错误
使用LicenseChecker,我看到侦听器回调一个applicationError,代码为3。此处代码:
aep = new APKExpansionPolicy(this,
new AESObfuscator(ContentDownloaderService.SALT, getPackageName(), deviceId));
aep.resetPolicy();
checker = new LicenseChecker(this, aep,
BASE64_PUBLIC_KEY // Your public licensing key.
);
checker.checkAccess(new LicenseCheckerCallback() {
@Override
public void allow(int reason) {
System.out.println("Allow Reason "+reason);
}
@Override
public void dontAllow(int reason) {
System.out.println("Don't Allow Reason "+reason);
try {
switch (reason) {
case Policy.NOT_LICENSED:
System.out.println("Not licensed");
break;
case Policy.RETRY:
System.out.println("Retry");
break;
}
} finally {
}
}
@Override
public void applicationError(int errorCode) {
System.out.println("aplication error "+errorCode);
}
});
错误代码3是错误管理的,您可以在这里看到完整的错误列表,在这里我可以得到关于该错误的信息
总结,这是因为我的本地版本与google console上的版本不同,而我的版本代码是由以下脚本生成的:
def getBuildVersionCode() {
def date = new Date()
def formattedDate = date.format('yyMMddHHmm')
return (formattedDate as int) + 221066279;
}
def getBuildVersionName() {
return getBuildVersionCode().toString();
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.test.testing"
minSdkVersion 15
targetSdkVersion 21
versionCode getBuildVersionCode()
versionName getBuildVersionName()
}
所以每次编译时,我都会得到一个新版本,很明显,这个版本不在谷歌控制台上
我将gradle脚本更改为:
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.test.testing"
minSdkVersion 15
targetSdkVersion 21
versionCode 1731227595 // My actual version number of apk in google developer console.
versionName 1731227595
}
这救了我的命,我希望这个答案对任何人都有用。你能通过sampleDownloaderActivity下载文件吗?@TarunDroid这就是我正在使用的,我能验证我自己的本地文件,但不能从Play下载。我已经被同样的问题困扰了好几天了,你是如何解决的?@Amanni我没有。但我建议制作一个新的测试应用程序并发布它,然后尝试版本2添加扩展文件示例,看看是否有效。请报告这是怎么回事。@Dalinaum我最终用服务器解决了这个问题。google api确实可以工作,但使用起来非常令人沮丧;)但是我本来打算回去让它工作的。但是它对本地的工作有效,那么为什么本地和上传的文件在大小上会不同,当我使用同一个文件时=/没有意义。或者是这个文件没有下载,这从你的描述来看是不可能的。检查上传的文件以确保其版本号/大小/内容与本地文件的版本号/大小/内容相匹配也没有什么坏处。当然,我多次尝试重新上传该文件,结果都是一样的:出现了某种错误。呵呵,现在你的情况听起来更糟了。你已经测试过了,然后你被搞砸了:)但是谢谢你的解释。这个问题是通过重新上传APK(版本号增加)然后重新上传扩展文件解决的。有趣的是,控制台显示没有现有的扩展文件,但当我重新上传时,它给出了版本号2。我的结论是,Google Play开发者控制台在处理扩展文件时存在缺陷。这是我的解决方案。我看到了与OP相同的问题,之前发布的应用程序没有OBB。一个更新的版本上传了一个OBB到beta版,返回状态_完成约两个小时,直到谷歌服务器更新版本。