- 概述
- 网路拓扑图">网路拓扑图
- 创建边缘实例">创建边缘实例
- 获取三元组">获取三元组
- 环境准备">环境准备
- 安装边缘计算软件包">安装边缘计算软件包
- 远程登录/远程文件管理">远程登录/远程文件管理
- 远程ADB">远程ADB
- FAQ">FAQ
概述
通常情况下,我们只能通过USB或者在局域网中使用Android设备的ADB服务进行调试。现在我们借助阿里云物联网平台的边缘计算远程运维能力,来实现跨公网访问ADB服务。举例来说,即使Android设备使用4G蜂窝通讯,PC电脑使用有线网路连接,我们仍然可以访问ADB服务。
本位以普通Android Nexus 5手机(Arm v7)为例,讲述如何在Android设备上集成远程运维服务并演示如何远程运维。本文受众为具备一定Android/Linux开发经验的开发者,需要了解比如ADB用法,了解常见的linux命令等。
网路拓扑图
创建边缘实例
登录阿里云物联网平台,选择 边缘计算 -> 边缘实例。
选择 新增实例 ,输入实例名称后,可以选择已存在的网关产品或者新建网关产品。
如果是新建网关产品,则如下图显示,输入产品名称,选择分类为边缘计算->边缘网关。
创建完成后,新增实例页会默认选择已创建的网关产品。
接下来,可以选择已存在的网关设备或新建网关设备。
创建完成后,点击确定,就可能看到刚才已创建的实例。
在操作栏里,选择查看,进入实例信息查看页。这个页面无需关闭,稍后会在本页面完成远程访问。
获取三元组
如上图所示,创建边缘实例后,在页面下面网关里的操作栏点击查看。
获取三元组,即为: ProductKey, DeviceName, DeviceSecret。这三个值唯一标示了这个设备,在运行时,需要用户指定。
环境准备
以下演示基于Nexus 5,主要为了使Android设备获取Root权限,安装SSH服务以支持网络访问,安装BusyBox以支持grep等命令,安装Termux以支持Bash脚本的执行。如果您的设备已经具备这些前置条件,可以直接跳过本章节。
刷入官方Rom包
请注意,此操作将会清空设备数据,请谨慎模仿。
详细步骤请参考LG Nexus 5刷android 5.0教程
操作成功后,可以看到以下输出:
注意以下几个事项:
- 必须参考文档,更新设备管理器里Android驱动。
- 务必先打开
flash-all.bat
后,再同时按住手机音量下键和电源键重启进入刷机模式后接入到PC电脑上。- 刷机完成后,务必使设备连入WiFi,保证设备能够访问公网。
Root Android
必须使 Android 手机获取Root权限,才能继续使用本功能。
我们使用Root精灵,软件使用方法,请参考Root精灵使用方法
Root成功后,将看到以下界面:
注意以下几个事项:
- 打开
开发者选项
的方法: 设置 -> 关于手机 -> 连续点击5次版本号。- 开启
USB调试
的方法: 设置 -> 开发者选项 -> USB调试。
安装必备软件
我们使用ADB完成软件安装,ADB下载及使用方法,请参考: ADB使用手册
用途 | 下载链接 | 是否必须 | |
---|---|---|---|
BusyBox | 用来安装一些必备的linux命令。 | 下载链接 | 是 |
Termux | 模拟终端,用来安装一些必备的linux软件,比如curl/ssh/vim/tar等。 | 下载链接 | 是 |
SSHDroid | SSH Server,用来实现远程访问 | 下载链接 | 是 |
注意以下几个事项:
- 运行安装未知来源的应用: 设置 -> 安全 -> 未知来源。
- 弹窗提示”允许Google定期检查设备….” 时,请选择 “接受”。
- 可以选择通过adb进行安装:
adb install xxx.apk
。
安装BusyBox
通过USB线连接到PC上,执行以下命令完成BusyBox的安装:
进入到APK所在的目录后,执行下面的命令
$adb install Busybox.apk
安装完成后,打开软件,安装所有支持的指令到系统目录。
安装SSHDroid
通过USB线连接到PC上,执行以下命令完成SSHDroid的安装:
进入到APK所在的目录后,执行下面的命令
$adb install SSHDroid.apk
在手机上打开软件,可以看到以下界面:
这样我们就能在局域网中通过SSH协议登录到Android设备上了,SSH协议相比ADB来说,对开发者更友好些。我们如果想在浏览器上跨公网登录到设备上,也是需要Android开启SSH服务的。如果使用ADB的话,我们需要借助谷歌的adb tools。
安装Termux
通过USB线连接到PC上,执行以下命令完成SSHDroid的安装:
进入到APK所在的目录后,执行下面的命令
$adb install Termux.apk
在手机上打开软件,可以看到以下界面:
对于Linux开发者来说,这种界面可能比较熟悉亲切些。有了这个虚拟终端后,我们可以使用pkg install
命令安装我们所需要的工具,比如vim/openssh/telnet之类的。
修改系统配置
以下命令的执行均为通过SSH远程登录到设备上操作的,所以需要PC机和Android设备在同一个局域网中。
如下图所示,我们在windows系统上,借助ModaXterm,远程执行命令:
注意以下事项:
- SSH默认用户名为root,密码为admin。
- 所有命令的执行均需要root权限,登录成功后,手动输入
su
命令切换成root权限。- 不建议使用ADB来完成下面的修改,有些环境变量可能不一致导致命令执行失败。
- 以下所有操作均具有一定的安全风险,生产环境下,启动完RemoteTerminalDaemon后,切忌关闭root权限。
修改环境变量
修改环境变量以支持bash脚本和常见的linux命令。$ export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets:/system/bin/
$ export LD_LIBRARY_PATH=/data/data/com.termux/files/usr/lib
切换到宽容模式
款容模式的详细介绍,请参考链接$ setenforce 0
重新挂载系统分区
因为我们的软件需要安装到根目录,所以需要修改文件系统的读写权限。注意在实际生产过程中,安装完本软件包后,需要禁止对系统目录的读写。$ mount -o rw,remount /
安装边缘计算软件包
注意接下来的操作,请确保以上准备工作均已完成,否则可能会出现命令无法执行的情况。
拷贝软件包到Android设备上
可以通过ModaXterm或WinSCP,将最新的软件包iot-edge-lite-armv7-hf.tar.gz拷贝到设备上。
软件解压到根目录/
$ tar zxvf iot-edge-lite-armv7-hf.tar.gz -C /
运行软件
进入软件包所在的目录:
$cd /linkedge/gateway/build/script
赋予可执行权限:
$chmod 777 *
启动Link IoT Edge Lite版:
$ bash ./iot_gateway_start_lite.sh {创建边缘实例中的网关ProductKey} {创建边缘实例中的网关DeviceName} {创建边缘实例中的网关DeviceSecret}
注意,后面的ProductKey DeviceName DeviceSecret 需要换成实际在阿里云物联网平台上生成的网关三元组。
查看是否启动成功:
$ bash ./iot_gateway_status_lite.sh
远程登录/远程文件管理
刷新阿里云物联网平台的边缘实例详情页(即为开头创建边缘实例的最后页面),此时会发现远程控制台和远程文件管理已经是可用的状态了。
点击 远程控制台,输入Android SSH服务的登录用户名和密码(root/admin)后,即可在云端访问PC电脑。
用户密码输入正确,即可进入终端页面:
点击 远程文件管理,键入系统的用户名和密码,即可进入远程文件管理页面。
在远程文件管理页面里,用户可以自由上传/下载文件。
远程ADB
跨公网访问Android设备的ADB服务,需要借助远程访问助手,开发者可以在github上根据PC机的类型选择下载安装到电脑上。
修改ADB配置
我们可以通过SSH登录到Android设备上,执行以下命令:
修改ADB服务监听端口
$ setprop service.adb.tcp.port 5555
停止ADB服务
$ stop adbd
启动ADB服务
$ start adbd
修改LinkEdge配置
当前版本,Link IoT Edge Lite版本默认只支持远程访问本地的某一个端口,所以用户需要手动修改配置文件,以远程访问ADB服务
进入软件包目录:
$ cd /linkedge/gateway/build/bin/
修改配置文件中的`listen_port`为 5555,即为ADB服务的监听端口。
$ vi remote_terminal.json
查看内容是否修改完成:
$ cat remote_terminal.json
{
"cloud_ip": "backend-iotx-remote-debug.aliyun.com",
"cloud_port": "443",
"cert_path": "root.pem",
"is_tls_on": 1,
"is_debug_on": 0,
"listen_port": 5555,
"listen_ip": "127.0.0.1"
}
重启Link IoT Edge服务:
$ bash ./iot_gateway_start_lite.sh {创建边缘实例中的网关ProductKey} {创建边缘实例中的网关DeviceName} {创建边缘实例中的网关DeviceSecret}
注意,后面的ProductKey DeviceName DeviceSecret 需要换成实际在阿里云物联网平台上生成的网关三元组。
查看是否启动成功:
$ bash ./iot_gateway_status_lite.sh
打开远程访问助手
访问访问助手的详细使用方法,请参考: 远程访问助手使用手册
输入AccessKey和AccessSecret后,可以看到设备列表如下:
- 双击待调试设备,选择远程ADB访问,端口号修改为5555:
- 确认本地服务开启成功:
如下图,开启成功后,我们可以访问127.0.0.1的3333端口,以访问设备的ADB服务。
打开ADB工具
此时拔掉设备与PC之间的USB线,确保不再使用有线方式使用设备的ADB服务:
- 使用命令行,
adb connect 127.0.0.1:3333
即可。
- 连接成功后,我们可以执行各种我们所需要的命令:
FAQ
- 运行命令提示
Permission denied
请确保按照步骤开启了宽容模式
。
- 运行命令提示
No Such File
请确保使用准备工作中建议的SSH工具,并正确配置了系统环境变量。
- Link Edge Lite 网络连接失败
cannot resove url
请确保正确配置了/etc/resolv.conf:
nameserver 8.8.4.4
nameserver 8.8.8.8
- 如何开机自启动
用户修改 /etc/init.d/99SuperSUDaemon 文件,添加一行: bash /linkedge/gateway/build/script/iot_gateway_start_lite.sh {YourProductKey} {YourDeviceName} {YourDeviceSecret}
即可。
注意,这个修改需要制作image时完成,开机启动后,该文件会被默认置为readonly状态。