安卓扩展apk的问题

3
我们最近开始使用新的Google扩展APK机制。总体来说,它运作良好,但对我们而言似乎有些不稳定。以下是一些问题:
1. 有些用户会与应用程序一起下载扩展应用程序,而其他用户则不会,因此我们的应用程序必须自行下载。是否有人知道何时会自动工作以及何时不会?
2. 有时当我们需要自己下载扩展文件时,Google Play会返回文件大小为-1,URL为空,表示扩展文件不存在。如果我再次运行应用程序,第二次通常会返回有效的大小和URL。是否还有其他人看到这种不稳定性?
以下是代码的基础内容:
这是我们设置回调验证许可证的方式:
    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 );
    }

我们刚刚发布了带有新代码的应用程序,但是很多用户在获取expansionFileSize时返回-1,在获取url时返回null。这将导致用户无法安装扩展文件。通常情况下,如果他们再次运行应用程序,第二(或第三)次就能正常运行。

有人知道可能出了什么问题吗?

3个回答

2
您得到-1是因为如果您尝试再次联系许可证服务器,APKExpansionPolicy会响应本地缓存结果,但URL、文件大小和文件名不会被缓存,并且在第一个真实响应之后丢失。APKExpansionPolicy不缓存这些结果,在APKExpansionPolicy源代码中有一条注释解释了这一点:
“扩展URL不会提交到首选项中,而是在前端处理许可证响应时存储。”
因此,在您获得第一个成功响应(在allow回调方法中)后,需要立即将这些值存储在首选项中。

1

Android开发者博客文章解决了以下问题:

在大多数新设备上,当用户从Android市场下载您的应用时,扩展文件将自动下载,并且退款期不会开始,直到扩展文件下载完成。在旧设备上,您的应用程序将在第一次运行时下载扩展文件。


这不是我们所看到的。我们收到了有关在Android 3.2和4.X上无法正常工作的报告。在一些2.2设备上可以正常工作。似乎没有规律可循。我很想在它不能自动下载时下载该文件,但它告诉我该文件不存在。 - btschumy
1
如果您可以检查Android Market/Google Play应用程序的版本,我认为这可能比操作系统的版本更相关。 - kabuko

1

补充Daniel Novak的答案,如果在调用checkAccess()之前重置了该策略,这将强制其发出新的许可证请求,因此检索URL:

policy.resetPolicy();

如果你已经检查到扩展文件丢失,那么你可能只想这样做,以确保你需要的URL。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接