2

我正在尝试开发一个通常被认为是恶意软件的应用程序,但客户的需求非常具体和合乎逻辑。我们有大约 50-100 部廉价的 Android 手机,它们被固定、插入,应用程序应该通过 tcp 将一些传感器数据发送到远程服务器。听起来很简单,但有两个功能让我很苦恼(因为我不是经验丰富的 Android 开发人员,也从未植根过手机):

#1 该应用程序应始终开启。如果它崩溃,服务器应该得到错误报告(堆栈跟踪),并且应用程序应该在 10 分钟后重新启动一次,然后放弃。此外,操作系统理论上可以杀死该应用程序(尽管我已尽力减少内存使用量)。我也想以某种方式处理它。

#2 如果应用程序可以远程更新或自动更新,而无需任何用户交互(因为没有常规用户),那就太好了。

要实现#1,除了root 电话之外,我没有看到其他解决方案(AlarmsManager 似乎没有按我预期的那样工作,并且添加另一个应用程序来处理第一个应用程序感觉不对)。有什么我想念的吗?

我根本不知道如何实现功能 #2。如果我将应用程序投放市场并在安装时选中“使此应用程序始终保持最新”复选框,这会起作用吗?我担心在服务运行时不会发生自动更新,即使发生了,操作系统在安装更新后也不会重新启动服务(除非实现了功能 #1)。如果我以编程方式下载最新的 .apk 并打开它,我仍然需要用户单击“安装”按钮。我什至正在考虑用某种脚本语言实现可更新部分。

在 Android API 的范围内是否有解决这些问题的方法?

编辑:谢谢大家的回答,你们非常有帮助。似乎使 Android 表现为非用户硬件的唯一方法是对其进行 root。这是进行静默自动更新的唯一方法。然后可以通过启用 cron 来实现始终开启(AlarmManager 显然不会在服务因崩溃而终止的情况下触发事件,但它可以被另一个微不足道的、不可崩溃的服务用来保持第一个运行)。

4

2 回答 2

1

对于#1,您可以使用前台服务。我不知道您需要多久获取一次传感器数据,但是 AlarmManager 有什么问题?我不明白生根如何帮助#1。如果不生根或构建固件,您就无法真正做到#2。如果您将您的应用程序安装为系统应用程序(在 中/system/app),您可以使用 hiddenPackageManager来静默安装新版本。使用 Market/Play 自动更新应该也可以,但您无法控制更新计划。而且,是的,它不会重新启动您的服务,但如果您使用 AlaramManager,这应该不是问题。

总而言之,现有的 Android 并不完全是一个可以让您完全控制的嵌入式系统,因此根据您愿意花费多少时间/精力,您可能需要对其进行一些自定义(或找到一个接近您的自定义 ROM要求)。

于 2012-06-18T14:10:19.273 回答
0

回复:问题 #2,有一些open-source(根据 Apache 软件许可证 2.0 获得许可)选项您可以检查并查看它是如何工作的。

  1. http://code.google.com/p/auto-update-apk-client/是自动更新服务的android客户端(我隶属于),它体积小,易于实现,并且支持rooted静默更新设备。

  2. https://github.com/commonsguy/cwac-updater由 Mark Murphy 编写,但它可能需要您运行自己的更新服务器,我不确定静默更新。

于 2012-06-19T00:58:37.840 回答