当前位置: 首页 > 知识库问答 >
问题:

扩展文件已下载但不在那里

周作人
2023-03-14

所以我复制了Android的扩展包示例,并根据谷歌提供的指南运行。我成功地通过存储一个本地。obb文件,但我无法设法让它与下载。obb文件。状态更改为IDownloaderClient。状态_已完成,但找不到文件。

我经历过的步骤:

  1. 使示例运行(更新为BASE64_PUBLIC_KEY新包名版本号
  2. 使用本地. obb文件成功测试。
  3. 制作apk并上传到与扩展文件一起玩。
  4. 安装签名apk并运行app。

请帮助下载扩展文件。

编辑:在第4步,我现在下载失败,因为找不到资源。

编辑2:所以在调试后,我看到状态变为无需下载,但由于文件丢失,它无法验证文件。所以出于某种原因,它认为该文件已被下载。

编辑3:所以在DownloaderService.class我们有一个run()方法,它生成一个返回0的getExpansionURLCount()。文档说:如果当前会话中没有LVL读取,这将返回0。经过更多的挖掘,我看到我从谷歌在过程服务器响应()中得到的响应代码为256,没有带FILE_URL的键。那么这是什么原因呢?

共有3个答案

井修雅
2023-03-14

经过几天的搜索解决方案,我找到了我的情况下的错误。

使用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);
        }

    });

错误代码3ERROR_NOT_MARKET_MANAGED,你可以在这里看到完整的错误列表https://developer.android.com/google/play/licensing/licensing-reference.html#server-response-codes,在这里我可以得到关于该错误的信息平均你如何处理LicenseCheckerCallback。ERROR_NOT_MARKET_MANAGED错误代码?

总结,发生这种情况是因为我的本地版本不是谷歌控制台上的相同版本,发生在我身上是因为我的versionCode是由这样的脚本生成的:

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()
}

所以每次我编译的时候,我都会得到一个新版本,显然这个版本不在谷歌html" target="_blank">控制台上。

我将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 
}

这救了我的命,我希望这个答案对任何人都有用...

谭骏
2023-03-14

很可能是因为完成后做检查时发现文件“不完整”,然后被删除了。

一种可能是下载文件的长度与您提供给android的不同。自动售货/扩展/下载。帮手。deosFileExist(Context、String、long、boolean),因此首先检查提供的值是否与实际值匹配。

如果这不能解决这个问题,那么考虑将断点添加到所有文件删除调用中,看看是否有任何一个被触发。

胥英奕
2023-03-14

我知道这个答案并没有解决根本的问题,但我认为这个解释可能会帮助像我这样被下载程序库的回答搞糊涂的人:

当谷歌授权服务器通知它没有与应用程序关联的扩展文件时,下载服务将(有点不直观地)将状态_COMPLETED传递到onDownloadStateChanged()。因为它必须对服务器进行异步调用才能找到答案,所以它不能直接从startDownloadServiceIfRequired()返回NO\u DOWNLOAD\u REQUIRED。它必须启动服务才能咨询服务器

但它似乎只会在你安装应用程序后第一次调用下载服务时才这样做——之后,它会将授权服务器的响应缓存在本地数据库中,未来对startDownloadServiceIfRequired()的调用将立即返回无需下载

响应代码256对应于策略。许可,这意味着软件包名称和公钥是有效的,但缺少任何文件_URL表明Google Play认为应用程序没有扩展文件。

在我的例子中,我的扩展文件在应用程序处于草稿状态时起作用,但一旦发布,它实际上就从商店中消失了。我无法确定原因。

 类似资料:
  • 问题内容: 我正在创建一个扩展程序,它将从网站上下载mp3文件。我正在尝试通过创建带有指向mp3文件的链接的新标签来实现此目的,但是chrome会继续在播放器中打开它而不是下载它。有什么方法可以创建一个弹出窗口,要求用户“另存为”文件? 问题答案: 快进了3年,现在GoogleChrome提供了API(自Chrome31起)。 在清单中声明许可后,可以通过以下调用启动下载: 如果要在脚本中生成文件

  • 我正在使用从SDk下载的示例apk扩展文件。我的主扩展文件大小约为5MB,格式为。 我将我的应用程序作为草稿应用程序和扩展文件一起上传到play store。但问题是,当扩展文件下载进度时,会在“Android/obb/mypack”下创建一个包名称的文件夹。但是该文件夹中没有这样的文件。 有时下载开始时,我从playstore收到消息。 这应该是什么原因呢?文件名格式有问题吗?谁能帮帮我吗。

  • 我的Android扩展文件下载器无法工作。我发现,问题发生在原来的downloadthread.java中,我已经验证了该外部媒体已经挂载。 我完全卡住了,无法继续下去。我能做什么?

  • 我刚刚通过Brew在Mac OSX 10.10.1上执行了PHP 5.5(.19)的新安装,并将Brew安装中的符号链接到。 使用通过Apache启动脚本,告诉我加载的文件位于。 我已经将其添加到: 我应该提到这些模块也安装在Brew中。当使用PHP作为Apache模块时,它们加载没有问题。但是,当从终端使用php时,我收到以下输出: 跑步时: 我收到输出: 所以我可以看到,加载的配置文件与作为A

  • 问题内容: 我正在为某些目录编写一些脚本,但是这些目录包含各种文件类型。 我想只是和现在,但也许其他几个人的未来。 到目前为止,我有: 谁能告诉我我现在如何只添加特定的文件扩展名? 问题答案: 只需使用参数,如下所示: 那应该做你想要的。 从下面的HoldOffHunger答案中获取解释: :命令 :递归地 :忽略大小写 :所有* .cpp:C ++文件(如果文件名中带有星号的目录,请使用\进行转

  • 下面是我的表格: 截取方法如下: 我添加了以下bean: