Android扩展apk问题

时间:2012-04-05 19:03:21

标签: android apk expansion

我们最近开始使用新的Google扩展APK机制。总体而言,它运作良好,但对我们来说似乎有点不稳定。一些问题:

  1. 有些用户会随应用程序一起下载扩展应用,而其他用户则无法下载,我们的应用必须自行下载。有没有人知道什么时候它会自动起作用?什么时候不起作用?

  2. 有时,当我们需要自己下载扩展文件时,Google Play会为文件大小返回-1,为URL返回null,表示扩展文件不存在。如果我再次运行应用程序,第二次它通常会返回有效的大小和URL。还有其他人看到这种瑕疵吗?

  3. 以下是代码的基础知识:

    这就是我们如何通过回调设置调用验证许可的方式

        policy = new APKExpansionPolicy( context, new AESObfuscator( SALT, context.getPackageName(), deviceId ) );
        mChecker = new LicenseChecker( context, policy, BASE64_PUBLIC_KEY );
        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
        mChecker.checkAccess( mLicenseCheckerCallback );
    

    然后在回调中我们将这个用于allow()方法(当许可证有效时)。

        public void allow( int reason )
        {
            String expansionFileName = policy.getExpansionFileName( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
            String expansionURL = policy.getExpansionURL( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
            long expansionFileSize = policy.getExpansionFileSize( APKExpansionPolicy.MAIN_FILE_URL_INDEX );
        }
    

    我们刚刚使用这个新代码发布了应用程序,但是大量用户获得-1作为expandFileSize返回,并返回null作为url。这会导致用户无法安装扩展文件。通常,如果他们再次运行应用程序,它将在第二(或第三)时间工作。

    任何人都对可能发生的事情有任何想法?

3 个答案:

答案 0 :(得分:1)

blog post on Android Developers地址#1:

  

在大多数较新的设备上,当用户从Android电子市场下载您的应用时,将自动下载扩展文件,并且在下载扩展文件之前不会开始退款。在较旧的设备上,您的应用会在首次运行时下载扩展文件

答案 1 :(得分:1)

您获得-1,因为如果您尝试再次联系许可服务器,则APKExpansionPolicy将使用本地缓存结果进行响应 - 但URL,filesize和filename不会被缓存,并在第一次真实响应后丢失。 APKExpansionPolicy不会缓存这些结果,这里是来自APKExpansionPolicy源代码的注释,它解释了它:

  

扩展URL未提交给首选项,而是在前端处理许可证响应时存储。

因此,您需要在获得第一个成功响应后立即将这些值存储在首选项中(在 allow 回调方法中);

答案 2 :(得分:0)

要添加到Daniel Novak's answer,如果在调用checkAccess()之前重置策略,这将强制它发出新的许可请求,从而检索URL:

policy.resetPolicy();

如果你确定需要这个网址(例如,如果你已经检查过扩展文件丢失了),你可能只想这样做。