远程异地adb调试并配置Android为kiosk霸屏
0x0B 更新 2023年07月16日23:13:58
- 后发现
LADB可以在安卓设备中进行本地调试adb,自己adb自己。也是需要WiFi模块的。 - 我用的版本
LADB_v2.2.1_Mod_Armeabi_v7a_Dlpure.com,可去Github搜索下载。
还有termux也是可以完成本地环境adb。
termux-app_v0.118.0+github-debug_universal.apktermux其实就是安卓设备的本地终端,需要找个教程利用这个终端按照安卓设备本地的adb环境。再通过如下操作链接:- 安卓设备开启
USB调试 adb tcpip 5555adb connect 192.168.0.168:5555192.168.0.168是本地设备内网IP- 这时候安卓新设备那边会提示授权弹窗,点击同意授权。
adb devices连接好后可查看设备状态。是device状态就可以操作其他的一些列adb流程命令。
- 安卓设备开启
- 说明: 可以研究下
scrcpy这个进行远程显示安卓设备到本地的电脑。- 其实也可以进行废旧手机利用。如果手机屏幕碎屏了,黑屏无法使用屏幕了。 也是可以使用
scrcpy实时展示手机画面的。
- 其实也可以进行废旧手机利用。如果手机屏幕碎屏了,黑屏无法使用屏幕了。 也是可以使用
常用命名:
复制安装包到设备
adb shell cp /storage/emulated/0/app.apk /data/local/tmp/
安装
adb shell pm install -r -t -d -g /data/local/tmp/app.apk
设置管理者
adb shell dpm set-device-owner com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin
移除管理者
adb shell dpm remove-active-admin com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin
卸载
adb shell pm uninstall com.shidai.app.runway
启动
adb shell am start -n com.shidai.app.runway/.MainActivity
0x00 背景
- 公司有多个公园大屏的项目在其他外省城市,各大屏均采用
Android系统。 - 这种室外大屏就必须达到霸屏的效果。整个设备开机启动只能霸屏显示我们的App。用户无法退出当前App,也不能进行其他操作。
- 同时还要满足,开机自启动App。断电重启设备后自启动App。凌晨定时重新启动App。远程控制启动App。
- 设备要常亮屏
- 霸屏效果,采用
Android的kiosk。达到这效果踩了不少坑,后期开一篇文章讲解如何完美kiosk霸屏。
0x01 远程搭建区域网组网

下载 Mac 和 Android 端各自安装好后。都进入同一个局域网。操作期间,都必须保持各自端的 zerotier 客户端保持打开,并是连接状态是OK的
如下图就是 安卓端进如内网后配置好获取到的 内网 IP 地址 192.168.192.59,Mac端的内网地址是192.168.192.128

- 可以测试下,ping 安卓的内网IP。可以成功就进行后面流程。
0x02 安卓端配置
前置条件:
- 需要安卓设备能进行
WiFi联网。(没WiFi模组,就无法开启远程无线调试) - 需要安卓设备现场有人,开一个
WiFi热点出来提供给安卓设备使用 - 安卓端的
zerotier加入局域网,保持App保活。 - 安卓进入开发者调试模式。开启
USB调试,开启USB调试(安全设置)等等。
安卓端开发者模式中无线网络调试:

0x03 终端配置

连接说明:
- 没有配对的设备先要进行两端配对
adb pair 192.168.192.59:33251- IP 是内网 IP,不是安卓设备显示的IP。但是端口是安卓设备进行6位数对码出现的端口。
- 如下是配对成后:

- 配对好后,进行
adb connect 192.168.192.59:46281- 此时 IP 是还是内网IP,但是端口是安卓设备无线调试页面中,
IP地址和端口那一栏目显示出现的端口。
- 此时 IP 是还是内网IP,但是端口是安卓设备无线调试页面中,
- 连接成功后。本地的电脑
Android Studio就可以显示连接的安卓设备了。 -
设置设备管理者:
adb shell dpm set-device-owner com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin - 霸屏配置:
Block apps,Start Kiosk,Allow installing applications- 后面单独开文,如果详细霸屏。
实测发现安卓热点和iPhone热点连接方式不一样:
- 如下是安卓开的热点:
- 安卓手机开的热点,在对码配对这里显示的是
192.168的IP地址,苹果是172.20地址。
-
此时配对连接用
zerotier分发的内网IP-192.168.192.59无法连接,提示如下mingo@192 ~ % adb pair 192.168.192.59:36705 Enter pairing code: 943400 Failed: Unable to start pairing client. mingo@192 ~ % adb pair 192.168.192.59:36705 Enter pairing code: 943400 Failed: Unable to start pairing client. mingo@192 ~ % adb pair 192.168.10.107:36705 Enter pairing code: 943400 Successfully paired to 192.168.10.107:36705 [guid=adb-eeedefbd7c2441d0-bRW0iu] mingo@192 ~ % adb connect 192.168.10.107:45617 connected to 192.168.10.107:45617后尝试使用当前手机显示的
192.168.10.107进行配对和连接都成功了。
- 安卓手机开的热点,在对码配对这里显示的是
其他注意:
adb push /Users/mingo/Desktop/app-release.apk /data/local/tmp/这里先把 apk 推送到 安卓设备指定文件夹。- 后采用
adb shell pm install -r -t /data/local/tmp/app-release.apk进行adb安装apk。- 这里是无法直接手动点击安装的,因为打包的
apk中有android:testOnly="true"标签。 - 设置
testOnly这个标签的目的是后期可以进行adb shell dpm remove-active-admin命令移除设备管理者,退出霸屏模式方便维护调试,否则只能刷机才能退出霸屏。不要搞得达到霸屏效果,结果自己都不能维护了。。
- 这里是无法直接手动点击安装的,因为打包的
- 需要自己开发隐藏的调试工具,在
App中某个隐藏的入口,触发调试工具进行开启和关闭kiosk霸屏,
详细操作记录:
mingo@macdembp-2 ~ % adb pair 192.168.192.59:33251
Enter pairing code: 469301
Successfully paired to 192.168.192.59:33251 [guid=adb-eeedefbd7c2441d0-bRW0iu]
mingo@macdembp-2 ~ % adb connect 192.168.192.59:33251
failed to connect to '192.168.192.59:33251': Connection refused
mingo@macdembp-2 ~ % adb connect 192.168.192.59:46281
connected to 192.168.192.59:46281
mingo@macdembp-2 ~ % adb shell
rk3568_mids:/ $ su
su: setgid failed: Operation not permitted
1|rk3568_mids:/ $ sudo su
/system/bin/sh: sudo: inaccessible or not found
127|rk3568_mids:/ $ adb root
/system/bin/sh: adb: inaccessible or not found
127|rk3568_mids:/ $ adb install -r /Users/mingo/Desktop/app-release.apk
/system/bin/sh: adb: inaccessible or not found
127|rk3568_mids:/ $ % mingo@macdembp-2 ~ % adb push /Users/mingo/Desktop/app-release.apk /data/local/tmp/
/Users/mingo/Desktop/app-release.apk: 1 file pushed, 0 skipped. 0.6 MB/s (56891298 bytes in 85.867s)
mingo@macdembp-2 ~ % adb shell pm install /data/local/tmp/app-release.apk
Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
mingo@macdembp-2 ~ % adb shell -r -t /data/local/tmp/app-release.apk
adb shell: illegal option -- r
mingo@macdembp-2 ~ % adb shell --r -t /data/local/tmp/app-release.apk
adb shell: illegal option -- -
mingo@macdembp-2 ~ % adb shell pm install -r -t /data/local/tmp/app-release.apk
Success
mingo@macdembp-2 ~ % adb shell dpm set-device-owner com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin
Success: Device owner set to package ComponentInfo{com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin}
Active admin set to component {com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin}
mingo@macdembp-2 ~ %