通过 aws 服务更新 android 设备(或事物)应用程序代码

update android device (or thing) application code by aws services


我在我的 aws IoT 项目中有一个要求,我需要更新 aws IoT 连接设备的应用程序代码或其中的一部分,比方说,应用程序版本或应用程序计划更新等。
我应该如何实现这一目标?到目前为止,我发现云前端或代码部署很有用,但没有直接用于此类目的。还有其他服务可以帮助我实现 aws 中可用的所需解决方案吗?
谢谢

如果您使用的是 android 设备,那么您可以使用 AsyncTask 从 S3 存储桶中获取最新版本并调用 post 下载方法来安装 apk 参考答案@link

所有设备的固件升级

一个合理的模式是使用 AWS IoT 中的 Device Shadow 报告状态 中存储您设备的当前固件信息。

{
  "reported": {
    "firmware": {
      "version": "1.0.0",
      "name": "linux-3.8.0-armeabi"
    }
  }
}

当您想要在您的设备上触发固件升级时,您可以引用新版本,并在所需状态[=37=中引用指向它的指针(例如指向 S3 存储桶) ].

{
  "reported": {
    "firmware": {
      "version": "1.0.0",
      "name": "linux-3.8.0-armeabi"
    }
  },
  "desired": {
    "firmware": {
      "version": "1.1.0",
      "name": "linux-4.0.0-armeabi",
      "url": "https://s3-<region>.amazonaws.com/<bucket>/<file>"
    }
  }
}

当此更改发生时,设备将收到一个 delta 事件,指示其影子文档中的更改,并在他注意到后开始下载新固件在所需状态下描述了一个新的固件条目。

Note: One advantage of this method is that it will work even if the devices are offline, when they'll get back online, they will sync with the shadow.

选择性固件升级

有时,制造商希望控制固件在其设备群上的部署方式,例如,他们可能希望:

  • 针对全球不同地区部署不同的固件。
  • 为硬件略有不同的设备部署不同的固件。
  • 为他们出售给不同制造商 (B2B2C) 的设备部署不同的固件。
  • 在不同区域逐步部署固件,而不是同时部署。

如果你想细化你的部署,要考虑到这些限制,你可以使用上面的方法结合使用设备注册表中的 Things Attributes,这样当你要更新时所需的状态,您只需选择与预定义属性匹配的设备即可。