Minicap编译及简单使用

什么是MiniCap

官方说法:Minicap提供了一个套接字接口,用于从Android设备流式传输实时屏幕捕获数据。它旨在用作更大程序中的组件,因此仅凭其本身并不是非常有用。例如,它在STF中用于远程控制。

个人理解:Minicap是用C++以jni的方式运行在Android手机里的一个应用程序。至少在Android 10以下还是难逢对手的。

编译过程

1. 首先先下载minicap

openstf/minicap: Stream real-time screen capture data out of Android devices. (github.com)

git clone https://github.com/openstf/minicap.git

2. 下载jpeg-turbo库子模块

git submodule init 
git submodule update

如果下载失败的话,可以到openstf的仓库下手动下载,并且将目录下的jni/vendor/ligjpeg-turbo复制到minicap/jni/vendor下

openstf/android-libjpeg-turbo: Standalone Android.mk configuration for libjpeg-turbo. (github.com)

3. 获取基础参数

adb shell getprop ro.product.cpu.abi 
//arm64-v8a abi类型 
adb shell getprop ro.build.version.sdk 
//29 sdk版本 
adb shell getprop ro.build.version.preview_sdk 
//0 
adb shell getprop ro.build.version.release 
//10 android版本 
adb shell wm size 
//1080x1920

4. 使用系统自带的ndk进行编译

//根据上一步获取到的sdk版本来运行。 
ndk-build.cmd APP_PLATFORM=android-29 PLATFORM_SDK_VERSION=29 
//ndk-build.cmd具体指向了ndk文件夹里面防止该文件的路径

需要注意的是NDK的版本不能太低,比如使用NDK-R13,在编译arm64-v8a时就会出错

D:/minicap/jni/vendor/libjpeg-turbo/jni/vendor/libjpeg-turbo/libjpeg-turbo-1.4.1/simd/jsimd_arm64_neon.S:33:1: error: unknown directive .arch armv8-a+fp+simd ^ make: *** [obj/local/arm64-v8a/objs/jpeg-turbo/libjpeg-turbo-1.4.1/simd/jsimd_arm64_neon.o] Error 1

出现这个问题主要是因为旧版的NDK识别不出.arch的问题,这个问题只需要使用高版本的ndk就行。

5. 编译成功

编译成功后,在minicap/libs会出现几个目录arm64-v8a、armeabi-v7a、x86、x86_64,是与对应的系统相对应的。我们可以通过adb指令来获取需要操作的手机是哪一种

adb shell getprop ro.product.cpu.abi 
//根据结果将对应的minicap防止到手机的临时文件夹,比如 //这边如果说sdk的版本>=16的话,就Push minicap,否则push minicap-nopie 
//根据步骤3的abi版本把对应的minicap push到手机里 
adb push minicap/libs/arm64-v8a/minicap /data/local/tmp 
//这边的minicap需要minicap.so动态库,所以需要将minicap.so也一齐丢进去 
adb push minicap/jni/minicap-shared/aosp/libs/android-29/arm64-v8a/minicap.so /data/local/tmp 
//给minicap赋权 
adb shell chmod 777 /data/local/tmp/minicap*

6. 运行minicap

//根据之前wm size的结果获取到分辨率
//测试是否可运行
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
//其中,@前一个为真实窗口大小,后一个为希望映射的窗口大小

这时候,如果测试失败的话,可能是因为版本太高了,而官方的minicap只提供到abi 29,下面提供两个库可以直接替换掉minicap.so:

varundtsfi/Android12Support_withso: Android 12 support with minicap.so file. (github.com)

DeviceFarmer/minicap: Stream real-time screen capture data out of Android devices. (github.com)

结果展示 

 由于通过adb shell运行了minicap,这样minicap会在手机内部开启一个虚拟端口minicap,我们需要通过adb forward进行端口映射。

adb forward tcp:1717 localabstract:minicap
cd example
node app.js PORD=9002

打开浏览器localhost:9002就可以看到了手机

Minicap编译及简单使用_第1张图片

 

你可能感兴趣的:(ADB系列,scrcpy,android,adb,git,minicap)