我们将部署数百部现成的android手机到遥远的现场进行无人值守操作。他们将运行一款我们开发的应用程序,用于接收、处理和中继来自附近蓝牙传感器的数据,并将其转发到中央服务器,作为科学研究项目的一部分。这些设备将可以访问互联网;我们可以与电话/应用程序进行双向通信。
我们需要随着时间的推移更新我们的应用程序,如果不是为了修复bug,那么就是为了新的功能。如果能够在没有用户交互的情况下远程强制重新启动(或-reboot)更新,这将非常有用--非常必要--;访问每个工作站并手动完成更新在时间、精力和金钱上都非常昂贵。
哪些编程方法或第三方应用程序或技术可以实现这一点?理想情况下,我们希望避免对电话进行寻根,但如果这是唯一的方法,那么我们肯定会这样做。
多年来,从许多帖子中(例如,https://stackoverflow.com/a/22134318)看来,开箱即用、无根的安卓系统是不可能(或没有)的--这(仍然)是真的吗?我们正在寻找代码、产品或how- to的指针,以使这成为可能--越简单越好,但欢迎所有建议!
发布于 2015-09-21 10:25:45
据我所知,在现成的android设备上进行完全无人值守的应用程序更新(仍然)是不可能的,所以我研究了一下在根基设备上可以做什么。一天的搜索、阅读和实验已经产生了一种可行的方法,它为我们提供了所需的所有遥控器,甚至更多。粗略地概述所涉及的步骤和设置可能会对其他有类似需求的人有所帮助:
$ ssh 192.168.1.217 -p 34567 # e.g., a local network IP address
$ su
$ setprop service.adb.tcp.port 5555
$ stop adbd
$ start adbd
$ exit
Note that the first time you issue the su command, the device
will prompt for an on-screen tap to permit the SSH Server
app to run with elevated privileges -- this is a one-time
configuration that you must perform before you deploy to the field!
Note also that you specify which port adb will use -- you could
use something other than the default 5555.
$ adb connect 93.184.216.34 # a public IP address
# or, if you aren't set up yet for public access, a local address
$ adb connect 192.168.1.217 # a local network IP address
Note that you will get another on-screen prompt, this time
to permit this computer to connect unless one of the
following is true:
a) you have previously connected to this device at this IP
address from this computer and you check the option to
permanently allow this connection, or
b) you created an adb_keys file containing the key for the
computer you are currently connecting from
If you get the prompt, you must confirm it on-screen with
a finger tap; if you select the option to permanently allow
this connection, the /data/misc/adb/adb_keys file will be
created and/or updated with the key for this connection
由于目标是配置电话,使其永远不需要任何屏幕上的用户交互,因此您需要确保使用包含密钥的adb_keys文件将电话部署到现场,当您远程连接到电话时,它将看到密钥。要做到这一点,最简单的方法是手动连接一次您将用于远程管理的计算机中的设备,并使用电话在部署时所拥有的IP地址,因为通过本地网络时的关键不同于通过互联网时的关键(我希望有比我更了解这一切的人--我只是报告我今天所看到/学到的将所有这些放在一起)。
如果您希望从多台计算机管理电话,则应提前确定所有此类计算机的密钥,并将它们放入在安装过程中安装到/data/misc/adb/adb_keys的文件中。这将对来自其密钥与文件中的一个匹配的所有计算机的adb连接进行“预授权”。
这就是设置。要使用此设置来实际管理应用程序更新非常简单,只需要adb。以下是可用于管理远程设备的adb命令的最小列表--键入adb --help或在web上搜索有关您可以使用adb执行的许多操作的更多信息(请注意,对于活动管理器('adb shell am')或包管理器('adb shell pm‘),大多数但并非所有命令都是'adb shell’命令):
# terminate your currently-running app
$ adb shell am force-stop com.example.appname
# uninstall your app completely
$ adb shell pm uninstall com.example.appname
# or, to keep the app's data and cache use the -k option
$ adb shell pm uninstall -k com.example.appname
# install your app from your local computer to the remote device
$ adb install /local/path/to/the/app.apk
# start your app by invoking it's main/startup activity
$ adb shell am start -n com.example.appname.Main
我只为一部手机这样做了;我将在未来几天为更多的手机重复这一点,如果需要的话,我会修改这个答案。虽然每部手机的设置都有些复杂,而且需要几分钟的时间,但一旦配置完成,我们数百部手机的更新看起来就像一个简单的adb命令脚本一样可以完全自动化。
https://stackoverflow.com/questions/32672821
复制相似问题