我正在尝试开发一个通常被认为是恶意软件的应用程序,但客户的需求非常具体和合乎逻辑。我们有大约 50-100 部廉价的 Android 手机,它们被固定、插入,应用程序应该通过 tcp 将一些传感器数据发送到远程服务器。听起来很简单,但有两个功能让我很苦恼(因为我不是经验丰富的 Android 开发人员,也从未植根过手机):
#1 该应用程序应始终开启。如果它崩溃,服务器应该得到错误报告(堆栈跟踪),并且应用程序应该在 10 分钟后重新启动一次,然后放弃。此外,操作系统理论上可以杀死该应用程序(尽管我已尽力减少内存使用量)。我也想以某种方式处理它。
#2 如果应用程序可以远程更新或自动更新,而无需任何用户交互(因为没有常规用户),那就太好了。
要实现#1,除了root 电话之外,我没有看到其他解决方案(AlarmsManager 似乎没有按我预期的那样工作,并且添加另一个应用程序来处理第一个应用程序感觉不对)。有什么我想念的吗?
我根本不知道如何实现功能 #2。如果我将应用程序投放市场并在安装时选中“使此应用程序始终保持最新”复选框,这会起作用吗?我担心在服务运行时不会发生自动更新,即使发生了,操作系统在安装更新后也不会重新启动服务(除非实现了功能 #1)。如果我以编程方式下载最新的 .apk 并打开它,我仍然需要用户单击“安装”按钮。我什至正在考虑用某种脚本语言实现可更新部分。
在 Android API 的范围内是否有解决这些问题的方法?
编辑:谢谢大家的回答,你们非常有帮助。似乎使 Android 表现为非用户硬件的唯一方法是对其进行 root。这是进行静默自动更新的唯一方法。然后可以通过启用 cron 来实现始终开启(AlarmManager 显然不会在服务因崩溃而终止的情况下触发事件,但它可以被另一个微不足道的、不可崩溃的服务用来保持第一个运行)。