【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.pswp.cn/news/896965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896965.shtml
英文地址,請注明出處:http://en.pswp.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;當車主靠近車輛時…