5

使用 Lollipop,我有一个设备所有者应用程序,它在配置时安装了 NFC。
我现在需要的是处理我的应用程序的自动更新,从 Google Play 到依赖标准的 Android 应用程序更新系统......

到目前为止,我可以想象两种方法来完成这项工作,但不知道如何处理其中任何一种:

  1. 在我的 NFC 中安装常量EXTRA PROVISIONING DEVICE ADMIN PACKAGE DOWNLOAD LOCATION直接从 Play 商店安装应用程序,而不是在我自己的开发服务器上安装 url。
    但是,这个常量需要处理 apk 文件的 url,我没有找到任何官方方法可以直接从 Play Store 获取 apk 安装?(因为它将来会是一个生产应用程序我对黑客不感兴趣)
  2. 继续从开发服务器安装 apk,但随后允许应用程序使用位于 Play 商店的具有相同包名的小兄弟进行自我更新。
    换一种说法:这是否可以从自定义位置安装 v1 apk,然后在 PlayStore 上放置 v2 ......让魔法成真?

我很高兴听到是否有人可以分享有关此类程序的经验。谢谢阅读!


在@Stephan Branczyk 建议后进行编辑,我可以进行更多测试,这是我所做的和结果

1 - 在 NFC 配置中,我用 snep://my.app.packagename 替换了 apk url,没有运气;它只是给出了一个错误,没有太多解释。

2 - 我用这样的 PlayStore 链接替换了这个 url:https: //play.google.com/store/apps/details? id=my.app.packagename但无论我使用本地计算的校验和,它都会给出校验和错误,或者GooglePlay apk 详细信息中给出的校验和。它看起来离目标不远,但我无法让它发挥作用。

3 - 最后我回到了我的第一个解决方案,一个版本为 1 的自托管 apk ......但这次我尝试在 PlayStore 上放置一个具有完全相同包名的更新版本 2 的应用程序......这让我奇怪的东西:

  • 起初我的应用程序并没有出现在本地 PlayStore 应用程序的任何地方,但是当我在 Google Play 中搜索它时,它出现了绿色的“已安装”徽章,并建议我进行更新......我也是。
  • 然后,在第一次手动更新之后,该应用程序是 v2,很好,而且更好:它在我的 PlayStore 中列出得很好。
  • 乐观地,我上传了一个 v3 的应用程序......只是为了看看我的 PlayStore 是否会自动更新我的应用程序(就像所有其他应用程序一样),但遗憾的是没有运气:即使我的应用程序仍然列在 Playstore 中,并提出“更新”按钮......它永远不会自行更新;我仍然需要手动单击它。

这不是一种奇怪的行为吗?如果有人对此有想法,我真的需要能够依赖 Play 商店的功能,但到目前为止还没有运气,而且我不敢相信 Device-Owner 应用程序分发与 PlayStore 不兼容?


以防万一,仅供参考,这是我正在使用的那种配置代码:

try {
            Properties p = new Properties();

            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
                    "my.app.packagename");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION,
                    "http://www.example.com/myDeviceOwnerApp.apk");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM,
                    "U55o3fO0cXQtUoQCbQEO9c_gKrs");

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            OutputStream out = new ObjectOutputStream(bos);
            p.store(out, "");
            final byte[] bytes = bos.toByteArray();

            NdefMessage msg = new NdefMessage(NdefRecord.createMime(
                    DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC, bytes));
            return msg;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
4

2 回答 2

0

将您的包名称写为标签中的AAR 记录

要确认此功能有效,请使用此应用程序编写标签。

于 2015-02-28T04:07:00.580 回答
0

您需要在

EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM

通过 NFC 配置时字段,否则配置的设备将不接受 URL 进行下载。

另请参阅此答案以正确编码校验和。

于 2016-09-13T15:25:07.570 回答