首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无人值守现场部署的android手机的远程应用程序更新和重启?

无人值守现场部署的android手机的远程应用程序更新和重启?
EN

Stack Overflow用户
提问于 2015-09-20 04:21:25
回答 1查看 1.4K关注 0票数 2

我们将部署数百部现成的android手机到遥远的现场进行无人值守操作。他们将运行一款我们开发的应用程序,用于接收、处理和中继来自附近蓝牙传感器的数据,并将其转发到中央服务器,作为科学研究项目的一部分。这些设备将可以访问互联网;我们可以与电话/应用程序进行双向通信。

我们需要随着时间的推移更新我们的应用程序,如果不是为了修复bug,那么就是为了新的功能。如果能够在没有用户交互的情况下远程强制重新启动(或-reboot)更新,这将非常有用--非常必要--;访问每个工作站并手动完成更新在时间、精力和金钱上都非常昂贵。

哪些编程方法或第三方应用程序或技术可以实现这一点?理想情况下,我们希望避免对电话进行寻根,但如果这是唯一的方法,那么我们肯定会这样做。

多年来,从许多帖子中(例如,https://stackoverflow.com/a/22134318)看来,开箱即用、无根的安卓系统是不可能(或没有)的--这(仍然)是真的吗?我们正在寻找代码、产品或how- to的指针,以使这成为可能--越简单越好,但欢迎所有建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-21 10:25:45

据我所知,在现成的android设备上进行完全无人值守的应用程序更新(仍然)是不可能的,所以我研究了一下在根基设备上可以做什么。一天的搜索、阅读和实验已经产生了一种可行的方法,它为我们提供了所需的所有遥控器,甚至更多。粗略地概述所涉及的步骤和设置可能会对其他有类似需求的人有所帮助:

  • 对设备进行根操作(具体细节因设备而异,因此您必须搜索如何针对您的特定设备执行此操作)
  • 配置(或重新配置,取决于根过程的效果)设备设置(例如wifi)以使其具有最低限度的功能
  • 进入谷歌设置>安全并取消选中“改善有害应用程序检测”和“扫描设备是否存在安全威胁”选项(否则,手机在远程安装应用程序时将需要屏幕确认)
  • 确保启用了开发人员选项;我读到,位置可能不同的安卓版本或设备制造商,但一个常见的位置是设置>手机>(滚动到底部)内部版本号--点击7次的内部版本号项目,以启用开发人员选项
  • 启用USB调试在设置>开发人员选项(即使我们永远不会建立一个USB连接到手机,并将通过TCP做我们所有的调试;这个选项似乎更像是“启用adb调试”,无论是通过USB或TCP)
  • 安装一个超文本服务器或sshd应用程序(有许多;我现在选择了SSH Server并对其进行了配置(为该服务器添加了1个服务器和1个用户)
  • 在计算机或其他设备上的终端窗口中,使用您在ssh server中设置的任何服务器端口通过SSH连接到电话:

代码语言:javascript
复制
   $ ssh 192.168.1.217 -p 34567     # e.g., a local network IP address

  • 通过发出以下命令为adb over TCP配置设备(这样做,不需要首先通过USB连接):

代码语言:javascript
复制
   $ 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授权密钥的文本文件放到设备上(/data/misc/ adb / adb _
  • --需要su),以便对您希望能够连接和管理远程设备的一台或多台计算机进行预授权--请参阅下面的
  • ,从Android Studio的终端选项卡(或从任何安装了adb的终端),使用adb连接到设备,最好使用设备的公共IP地址(以下详细介绍):

代码语言:javascript
复制
   $ 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’命令):

代码语言:javascript
复制
 # 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命令脚本一样可以完全自动化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32672821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档