远程异地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.apk
termux
其实就是安卓设备的本地终端,需要找个教程利用这个终端按照安卓设备本地的adb
环境。再通过如下操作链接:- 安卓设备开启
USB调试
adb tcpip 5555
adb connect 192.168.0.168:5555
192.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 ~ %