袁凤鸣的博客 | Fleeming's Blog Front-end Dev Engineer

远程异地adb调试并配置Android为kiosk霸屏

2023-05-25
袁凤鸣
apk


远程异地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 远程搭建区域网组网

下载 MacAndroid 端各自安装好后。都进入同一个局域网。操作期间,都必须保持各自端的 zerotier 客户端保持打开,并是连接状态是OK的

如下图就是 安卓端进如内网后配置好获取到的 内网 IP 地址 192.168.192.59Mac端的内网地址是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地址和端口那一栏目显示出现的端口。
  • 连接成功后。本地的电脑Android Studio就可以显示连接的安卓设备了。
  • 设置设备管理者:

      adb shell dpm set-device-owner com.shidai.app.runway/com.kalemba128.flutter_kiosk_android.FlutterKioskAndroidPlugin
    
  • 霸屏配置:Block appsStart KioskAllow 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 ~ % 


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主

Music

Search

Content