【ATXServer2】Android无法正确显示手机屏幕

server/2025/3/4 9:41:51/

文章目录

  • 现象
  • 原因分析与解决
    • 排查手机内部minicap
  • 解决minicap问题
    • 查看移动端Android SDK版本
    • 查看minicap支持版本
    • 单次方案
    • 多次方案

现象

在这里插入图片描述
在这里插入图片描述

原因分析与解决

由于atxserver2在与Android动终端的链接过程中使用了agent:atxserver2-android-provider,按照项目中使用方法成功连接。当运行这个项目后,手机连接入电脑将自动安装minicap、minitouch、atx-agent、whatsinput.apk、app-uiautomator-test.apk。
而负责手机界面传输的则是minicap这一个程序,因此主要的问题肯定存在于minicap中。

排查手机内部minicap

minicap这一程序能够运行的条件需要同时安装minicap和minicap.so两个文件,在手机的/data/local/tmp文件夹下。
使用以下命令可以进入文件夹中查看:(键入exit以退出)

adb shell
cd data/local/tmp
ls

如果文件夹中不存在minicap和minicap.so,表示安装失败;
如果存在,可以运行以下adb命令,测试minicap是否可以运行:

adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/minicap -P 2800x1840@2800x1840/0 -t

屏幕大小部分理论上应该填写设备的实际情况,/0表示设备旋转角度,-t表示测试

minicap正常运行,会有如下图显示;未出现如下图,都可认定为无效minicap,可能是版本/机型不匹配等原因导致的。
在这里插入图片描述
如果minicap测试结果正,常还是无法在网页端正确显示,建议重启docker或重新插入移动端。

解决minicap问题

如果是minicap安装,但是测试不通过,需要先删除不匹配的minicap和minicap.so,如下:

adb shell
cd data/local/tmp
rm minicap
rm minicap.so
exit

现象中的第二截图,其实已经提示了出现minicap安装错误的原因:

ATX 此应用SDK版本太低,无法正常运行,请及时更新或联系开发者

安装的应用(minicap)Android SDK版本太低,而移动端系统Android SDK版本太高。
minicap版本太低,是因为官方给出的程序没有进行更新。

查看移动端Android SDK版本

首先,查看移动端Android SDK版本;
移动终端的CPU架构是arm64-v8aAndroid SDK的版本31
在这里插入图片描述

查看minicap支持版本

通过对于项目源码的分析,项目所指向的minicap下载源openatx/stf-binaries(截止文章时间,master分支对应的tag0.3.2),最新版本只更新到Android SDK 30,如果使用的移动设备Android SDK高于30,则不会安装正确的版本或者直接安装失败。
在这里插入图片描述
经过我长时间的研究发现,这一切的原因是uiautomator2这一个库没有实时更新所导致的,那么下面我将会给出两个解决方案。

单次方案

既然能找到对应版本的minicap.so,可以直接将版本匹配的minicapminicap.so(移动端Android SDK 31)下载,然后推送到移动端,即可解决。
在这里插入图片描述

然后通过adb命令推送到移动端:

adb push /home/data/minicap /data/local/tmp
adb push /home/data/minicap.so /data/local/tmp

再次测试minicap是否正常运行;

多次方案

如果有很多移动端需要连接,且版本都不匹配,单个一一推送太麻烦。上文中也提到了错误是因为uiautomator2库没有更新,因此我们就需要自行修改模块中的代码,从而让以后每一台移动端都可以下载版本匹配的minicap.so。

首先先找到自己uiautomator2库安装的位置,本人使用的是pip安装,路径为:

pip3 show uiautomator2

在这里插入图片描述

在其中我们需要修改的文件是init.py,有三个地方。我将使用vim界面进行截图,各位可以打开自己的编译器进行修改。
在这里插入图片描述

在这里插入图片描述

1.文件中211行(minicap)、220行(minitouch),需要修改代码为如图所示的路径:
/0.3.0/node_modules/@devicefarmer替换为/0.3.2/node_modules,因为原路径下版本不匹配;

220可以不修改,minitouch版本没有影响
后续仓库升级,需要修改为最新的tag

2.最后是代码的第378行,需要修改>号后的数字为32(因为当前最高版本为31)
在这里插入图片描述
修改完成后,保存退出,然后打开终端运行下面的代码:

python -m uiautomator2 init

执行此命令即将文初提到的五个文件安装到移动端,下载文件会比较慢,耐心等待;
如果出现download error,是因为文件会默认从一个镜像中下载,在镜像中没有Android SDK 32及以后版本的文件,所以会失败,镜像下载失败后,再从github中下载。
如果因为超时失败,就再次运行代码。
最终输出Successfully init AdbDevice就表示安装完成,可以测试minicap是否可用。
在这里插入图片描述

测试通过后,重启docker再重连手机,就发现成功显示手机屏幕。
在这里插入图片描述


http://www.ppmy.cn/server/172299.html

相关文章

11.字符函数和字符串函数

字符函数 11.1求字符串长度strlenstrlen模拟 11.2长度不受限制的字符串函数strcpy 11.1求字符串长度 strlen Get the length of a string. size_t strlen( const char *string );typedef unsigned int size_t; strlen 返回值为 unsigned int strlen返回字符串中 \0 前面出现的…

IDEA入门及常用快捷键

IDEA是java常用的IDE。当run一个.java文件时,其实是经历了先编译为.class,再运行的过程。 在project文件夹中,out文件夹存储编译的.class文件,src文件夹存储.java代码文件。 设置自动导包 快捷键: 格式化快捷键&…

Unity插件-Mirror使用方法(三)组件介绍(Network Manager)

目录 一、插件介绍 二、主要组件 三、Network Manager 1、组件介绍 2、核心功能 1)传输层(Transports) 2)游戏状态管理 3)生成管理(Spawn Management) 玩家预制件 预制件注册 出生点…

mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)

目录 mysql服务层 介绍 服务管理和公共组件 备份 NOSQL,SQL接口 介绍 nosql Parser模块(语法分析器) 介绍 词法分析 语法分析 示例 预处理器 引入 介绍 优化器 介绍 优化的必要性 基于成本的优化器 缓存 介绍 弊端 mysql服务层 介绍 数据库服务层是整个…

linux下自旋锁(spin_lock)

文章目录 Linux自旋锁:单核与多核环境下的实现差异与核心原理 🖥️🔒一、自旋锁的核心特性 ⚙️🎯 适用场景: 二、单核环境下的自旋锁实现 🛑1. **实现原理** 🔄2. **关键代码解析** &#x1f4…

探索未来金融世界的钥匙——代币开发

在数字经济飞速发展的今天,区块链技术与加密货币的结合催生了一个崭新的领域——代币开发。这一领域不仅重新定义了资金流动的方式,更为全球金融体系带来了前所未有的透明度和效率,成为探索未来金融世界的钥匙。 一、代币开发的定义与意义 代…

Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序

文章目录 引言I 示例对象II List 按时间字段倒序排序: 使用 `Stream` 和 `Comparator` 排序方法 1:使用 `Comparator.comparing`方法 2:使用 `Comparator.reversed`方法 3:自定义 `Comparator`输出结果III 注意事项**时间字段类型**:**空值处理**:IV 总结引言 案例:在线用…

【计算机网络——概述】

1.计算机网络在信息时代中的作用 1.1三网融合 “三网融合”的三网——电信网络、有线电视网络、计算机网络,是将前两个融入到了计算机网络。 1.2互联网两个重要基本特点 1.连通性:就是互联网使上网用户之间,不管相聚多远,都可以交…