手把手教你實現Android真機遠程截屏


先看效果演示

 接下來手把手教你實現這樣的效果。 

minicap簡介  

  minicap是一個可以遠程獲取android屏幕畫面的開源庫,它在低版本的Android系統上采用截屏的方式獲取畫面,在Android4.2以上系統上采用創建VirtualDisplay的方式來獲取畫面、性能大大提高。 minicap的核心功能都在minicap.so中實現,如果要進行二次開發直接引用即可。

1.mincap下載

1.1 clone代碼

git clone https://github.com/openstf/minicap.git
cd minicap
git submodule init       // 初始化jni/vendor/libjpeg-turbo子倉庫配置
git submodule update // 更新jni/vendor/libjpeg-turbo子倉庫代碼

1.2 minicap倉庫目錄結構

minicap
  |-example 簡單的示例客戶端,連接minicap服務端,轉換為web顯示 |-jni 源代碼,minicap為純c/c++ | |-minicap 簡單的示例服務端,實現將捕獲到的幀通過網絡傳輸的功能 | |-minicap-shared 核心功能庫,實現捕獲畫面、並通知listener的功能 | | |-aosp 實際實現 | | |-libs 已經編譯好的so庫 | | |-android-xx 對應API版本為xx的so庫,實現方法有所不同 | | |-src 源代碼 | | |-mock 空實現 | |-vendor 依賴的第三方庫 | | |-libs 編譯后的輸出目錄

2.mincap編譯

2.1 下載ndk-build

2.2 用ndk-build 編譯mincap安裝包

2.2.1 下載配置adb

adb(Android Debug Bridge),安卓平台調試橋,是連接Android手機與PC端的橋梁,通過adb可以管理、操作模擬器和設備,如安裝軟件、查看設備軟硬件參數、系統升級、運行shell命令等。

1) 下載安裝adb 

2) 在環境變量配置中添加adb路徑,按鍵Windows+R打開運行,輸入sysdm.cpl,回車,彈出系統屬性對話框  在高級==》環境變量==》系統變量==》path,添加adb可執行文件的文件夾路徑。

 

2.2.2 連接設備

需要手機打開調試者模式,打開  設置==>開發人員選項==>USB調試,打開即可。開發人員選項在Android4.2以下,可以直接看到。 在Android 4.2及以上版本中默認是隱藏的。打開開發人員選項的方法是:打開 設置==>關於手機,連續點擊版本號7次即可。

首次調試,手機會彈出是否允許某台電腦以USB方式調試該手機的問詢對話框,勾選允許使用這台計算機進行調試。

               

然后用adb devices命令,查看已連接的設備。如果設備列表為空,可以嘗試一下:1) 將充電模式切換到文件傳輸模式 ;2)重新開啟USB調試權限 ;3) 重啟手機 

adb devices

 2.2.3 查看手機CPU支持的ABI(CPU指令架構)

 不同的Android手機使用不同的CPU,而不同的 CPU支持不同的指令集,CPU與指令集的每種組合都有專屬的應用二進制接口,即 ABI(全稱:ApplicationBinary Interface)

adb shell getprop ro.product.cpu.abi

2.2.4  獲取手機設備的sdk

adb shell getprop ro.build.version.sdk

2.2.5 執行編譯

ndk-build可以通過APP_PLATFORM參數設置目標平台,默認是android-14,這里指定的是android-26(8.0),實際並沒有什么影響,因為只有minicap-shared的實現是平台相關的,但我們使用了編譯好的庫;通過APP_ABI可以指定指令平台,如果不指定默認將編譯全部的armeabi-v7a、arm64-v8a、x86、x86_64平台。

執行完畢后,在libs/armeabi-v7a下會生成minicap、minicap.so、minicap-nopie三個文件,實際用到的只有minicap,這里生成的minicap.so是一個空實現。

ndk-build.cmd APP_PLATFORM=android-26 APP_ABI=arm64-v8a

3. 運行minicap項目示例

3.1 運行minicap項目中的example內的服務端

3.1.1 將編譯好的兩個文件push到手機設備上

so文件一定用minicap-master\jni\minicap-shared\aosp\libs\android-26\arm64-v8a\minicap.so,cpu架構要匹配.否則會導致與系統不兼容,運行會報錯

adb push  libs/arm64-v8a/minicap data/local/tmp
adb push  jni/minicap-shared/aosp/libs/android-26/arm64-v8a/minicap.so data/local/tmp

3.1.2 設置文件執行權限

adb shell chmod 777 data/local/tmp/minicap
adb shell chmod 777 data/local/tmp/minicap.so

3.1.3 獲取android設備分辨率

adb shell wm size

3.1.4 啟動服務端

# 測試服務器是否可用
adb shell LD_LIBRARY_PATH=data/local/tmp data/local/tmp/minicap -P 1080x1920@1080x1920/0 -t # 啟動服務器 adb shell LD_LIBRARY_PATH=data/local/tmp data/local/tmp/minicap -P 1080x1920@1080x1920/0 

3.1.5 使用adb工具進行端口映射,將服務端的端口映射到1717,客戶端node讀取服務器傳送數據的端口是1717

adb forward tcp:1717 localabstract:minicap

3.2  運行minicap項目中的example內的客戶端

3.2.1 安裝依賴

yarn

3.2.2  啟動客戶端

node app.js

 

 參考文檔

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM