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

文章目录

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

现象

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

原因分析与解决

由于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-v8a,Android 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再重连手机,就发现成功显示手机屏幕。
在这里插入图片描述

最后问题-如何支持Android SDK 32+

目前您必须使用minicap-debug.apk方法。从Android 12及更高版本开始,团队不再提供minicap.so方法。
需要自己编译啦
https://github.com/DeviceFarmer/minicap/pull/58
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端跨域】CORS:跨域资源共享的机制与实现

在现代Web开发中,跨域资源共享(Cross-Origin Resource Sharing,简称CORS)是一种非常重要的技术,用于解决浏览器跨域请求的限制 CORS允许服务器明确指定哪些外部源可以访问其资源,从而在保证安全的前提下实…

【设计模式】单例模式|饿汉模式|懒汉模式|指令重排序

目录 1.什么是单例模式? 2.如何保证单例? 3.两种写法 (1)饿汉模式(早创建) (2)懒汉模式(缓执行,可能不执行) 4.应用场景 🔥5.多…

RocketMQ顺序消费机制

RocketMQ的顺序消费机制通过生产端和消费端的协同设计实现,其核心在于局部顺序性,即保证同一队列(MessageQueue)内的消息严格按发送顺序消费。以下是详细机制解析及关键源码实现: 一、顺序消费的核心机制 1. 生产端路…

【JavaEE】-- 多线程(初阶)4

文章目录 8.多线程案例8.1 单例模式8.1.1 饿汉模式8.1.2 懒汉模式 8.2 阻塞队列8.2.1 什么是阻塞队列8.2.2 生产者消费者模型8.2.3 标准库中的阻塞队列8.2.4 阻塞队列的应用场景8.2.4.1 消息队列 8.2.5 异步操作8.2.5 自定义实现阻塞队列8.2.6 阻塞队列--生产者消费者模型 8.3 …

【C++设计模式】第四篇:建造者模式(Builder)

注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 分步骤构造复杂对象,实现灵活装配 1. 模式定义与用途 核心目标:将复杂对象的构建过程分离,使得同样的构建步骤可以创建不同的表示形式。 常见场景&am…

vuex中的state是响应式的吗?

在 Vue.js 中,Vuex 的 state 是响应式的。这意味着当你更改 state 中的数据时,依赖于这些数据的 Vue 组件会自动更新。这是通过 Vue 的响应式系统实现的,该系统使用了 ES6 的 Proxy 对象来监听数据的变化。 当你在 Vuex 中定义了一个 state …

若依框架中的岗位与角色详解

若依框架中的岗位与角色详解 一、核心概念与定位 岗位(Post) 业务职能导向:岗位是用户在组织架构中的职务标识(如“开发人员”“项目经理”),用于描述工作职责而非直接控制权限。岗位与部门关联&#xff…

SQL经典常用查询语句

1. 基础查询语句 1.1 查询表中所有数据 在SQL中,查询表中所有数据是最基本的操作之一。通过使用SELECT * FROM table_name;语句,可以获取指定表中的所有记录和列。例如,假设有一个名为employees的表,包含员工的基本信息&#xf…

EP 架构:未来主流方向还是特定场景最优解?

DeepSeek MoE架构采用跨节点专家并行(EP)架构,在提升推理系统性能方面展现出巨大潜力。这一架构在发展进程中也面临诸多挑战,其未来究竟是会成为行业的主流方向,还是仅适用于特定场景,成为特定领域的最优解…

[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践

一、代码运行结果 二、国密算法与密钥协商背景 2.1 什么是国密算法? 国密算法是由中国国家密码管理局制定的商用密码标准,包括: SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码…

动漫短剧开发公司,短剧小程序搭建快速上线

在当今快节奏的生活里,人们的娱乐方式愈发多元,而动漫短剧作为新兴娱乐形式,正以独特魅力迅速崛起,成为娱乐市场的耀眼新星。近年来,动漫短剧市场呈爆发式增长,吸引众多创作者与观众目光。 从市场规模来看…

第四十五:创建一个vue 的程序

html <div id"app">{{ msg }}<h2>{{ web.title }}</h2><h3>{{ web.url }}</h3> </div> js /*<div id"app"></div> 指定一个 id 为 app 的 div 元素{{ }} 插值表达式, 可以将 Vue 实例中定义的数据在视图…

docer swarm集群部署springboot项目

1.准备两台服务器&#xff0c;安装好docker、docker-compose 因为用到了docker仓库&#xff0c;安装harbor,可以从github下载离线安装包 2. 我这边用到了gitlab-ci,整体流程也都差不多 1&#xff09;打包mvn clean install 2&#xff09;打镜像 docker-compose -f docker-compo…

Python测试框架Pytest的参数化

上篇博文介绍过&#xff0c;Pytest是目前比较成熟功能齐全的测试框架&#xff0c;使用率肯定也不断攀升。 在实际工作中&#xff0c;许多测试用例都是类似的重复&#xff0c;一个个写最后代码会显得很冗余。这里&#xff0c;我们来了解一下pytest.mark.parametrize装饰器&…

开发博客系统

前言 准备工作 数据库表分为实体表和关系表 第一&#xff0c;建数据库表 然后导入前端页面 创建公共模块 就是统一返回值&#xff0c;异常那些东西 自己造一个自定义异常 普通类 mapper 获取全部博客 我们只需要返回id&#xff0c;title&#xff0c;content&#xff0c;us…

【Spring Boot 应用开发】-05 命令行参数

Spring Boot 常用命令行参数 Spring Boot 支持多种命令行参数&#xff0c;这些参数可以在启动应用时通过命令行直接传递。以下是一些常用的命令行参数及其详细说明&#xff1a; 1. 基本配置参数 --server.port端口号 指定应用程序运行的HTTP端口&#xff0c;默认为8080。 jav…

20250304学习记录

第一部分&#xff0c;先来了解一下各种论文期刊吧&#xff0c;毕竟也是这把岁数了&#xff0c;还什么都不懂呢 国际期刊&#xff1a; EI收集的主要有两种&#xff0c; JA&#xff1a;EI源刊 CA&#xff1a;EI会议 CPCI也叫 ISTP 常说的SCI分区是指&#xff0c;JCR的一区、…

2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)

首先到官网上下载安装包&#xff1a;http://www.mysql.com 点击下载&#xff0c;拉到最下面&#xff0c;点击社区版下载 windows用户点击下面适用于windows的安装程序 点击下载&#xff0c;网络条件好可以点第一个&#xff0c;怕下着下着断了点第二个离线下载 双击下载好的安装…

网络安全检查漏洞内容回复 网络安全的漏洞

网络安全的核心目标是保障业务系统的可持续性和数据的安全性&#xff0c;而这两点的主要威胁来自于蠕虫的暴发、黑客的攻击、拒绝服务攻击、木马。蠕虫、黑客攻击问题都和漏洞紧密联系在一起&#xff0c;一旦有重大安全漏洞出现&#xff0c;整个互联网就会面临一次重大挑战。虽…

汽车智能钥匙中PKE低频天线的作用

PKE&#xff08;Passive Keyless Entry&#xff09;即被动式无钥匙进入系统&#xff0c;汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用&#xff0c;以下是其具体作用&#xff1a; 信号交互与身份认证 低频信号接收&#xff1a;当车主靠近车辆时…