scrcpy源码 windows10编译(全量编译)
概述
- 简介:Scrcpy是一款小巧的Android投屏软件,能够跨平台其支持Windows、Mac、Linux体系。右PC充当客户端,Android板子作为服务端。
- 原理:Android将录屏发送给PC,PC吸取到数据后举行展示。PC上鼠标点击录屏上对应的坐标,把坐标通过Socket通信传递给Android端,实现对Android的控制
前置
scrcpy编译所需项
- scrcpy源码
- msys64-github,msys64-aliyun
- jdk-21
- android Studio: android studio下载api 35,android 12以上API都可以
android版本API对照表
Android版本EnLinux KernelAPI Level15Vanilla Ice Cream..14UpsideDownCake6.1.233413Tiramisu5.15.413312LSv25. 10.663212S5.4,5.103111R4.14-stable,4.19-stable3010Q4.9-q,4.14-q,4.19-q299Pie4.4.107, 4.9.84, and 4.14.42288.1Oreo4.10278.0Oreo4.10267.1.1Nougat4.4.1257.0Nougat4.4.1246.0Marshmallow3.18.10235.1Lollipop3.16.1225.0Lollipop3.16.1214.4wKitKat Wear3.10204.4KitKat3.1019 编译情况预备
资源下载
从上述下载链接下载scrcpy编译所需项,国内上不了github的可以下载我已经预备好的的压缩包,android SDK略大,可通过安装android studio方式下载sdk
安装msys64
msys64安装极其简单,直接运行exe步伐不停默认下一步即可,需要注意的是默认安装路径,最好截图保存留作后用
安装jdk-21
jdk21安装极其简单,直接运行exe步伐不停默认下一步即可,需要注意安装jdk的路径,最好截图保存留作后用
安装完需要配置JAVA_HOME情况变量,详细操纵流程可参考安装JDK部门内容
安装android SDK
因为本机已经安装Android Studio Koala | 2024.1 版本,该版本可从前置章节下载链接下载,通过android studio安装api 35 SDK
如不想安装Android Studio Koala | 2024.1 版本,可对照android版本API对照表,使用android 11版本以上SDK代替或在编译时使用预编译命令,预编译需要去github下载资源
安装完需要配置ANDROID_HOME情况变量,详细操纵流程参照配置JAVA_HOME情况变量,流程都一样的,需要注意的是android studio默认下载的SDK存放在 C:\Users\Administrator\AppData\Local\Android\Sdk路径下
假如只是为了编译scrcpy源码,则只需要配置ANDROID_HOME情况变量即可
开始编译
scrcpy工程目录简介
Scrcpy工程是基于Meson编译体系举行构建Meson编译体系
Meson就比如GCC,在配置文件中举行一系列配置,比如依赖头文件、库等,编译出一个可执行文件
Meson工程最紧张的就是它的构建描述文件,即meson.build,雷同Gradle工程中的build.gradle。在工程根目录和子模块目录下都有各自的meson.build文件。我们可以看到在工程中根目录中有一个meson.build文件:
- project('scrcpy', 'c',
- version: '2.6.1',
- meson_version: '>= 0.48',
- default_options: [
- 'c_std=c11',
- 'warning_level=2',
- 'b_ndebug=if-release',
- ])
- add_project_arguments('-Wmissing-prototypes', language: 'c')
- if get_option('compile_app')
- subdir('app')
- endif
- if get_option('compile_server')
- subdir('server')
- endif
复制代码 可以看到工程编译两个项目,app和server。既然Scrcpy是一个投屏软件,那么可以明白是一个C/S软件。Client端运行在我们的电脑上,用于展示。Server端运行在Android手机,用于提供数据。
以是上面的工程目录中,app目录就是Client端,即电脑端的代码。server目录就是Server端,即手机上的代码
校验情况变量
在windows左下角搜刮栏搜刮 msys2,打开名为 MSYS2 MINGW64的应用步伐
在命令行工具中输入
- # echo $JAVA_HOME
- C:\Program Files\Java\jdk-21
- # echo $ANDROID_HOME
- C:\Users\Administrator\AppData\Local\Android\Sdk
复制代码 如上表示已经成功配置JAVA_HOME跟ANDROID_HOME
安装编译情况
- #运行环境需要的库
- pacman -S mingw-w64-x86_64-SDL2 \
- mingw-w64-x86_64-ffmpeg \
- mingw-w64-x86_64-libusb
- #客户端编译需要用到的库
- pacman -S mingw-w64-x86_64-make \
- mingw-w64-x86_64-gcc \
- mingw-w64-x86_64-pkg-config \
- mingw-w64-x86_64-meson
复制代码 预备编译
假如是一路默认安装msys2,则msys2的根目录在 C:\msys64下,该目录为msys2安装的默认路径,将scrcpy的源代码拷贝到 C:\msys64\home目录
- # cd /home/scrcpy-master/
- #直接复制如下三行编译命令粘贴到命令行
- meson setup out --buildtype=release --strip -Db_lto=true \
- -Dprebuilt_server=
- ninja -Cout
复制代码 上述编译命令表示将meson结果生成到 scrcpy-master/out目录下,并使用ninja执行out目录下的编译脚本
多种编译方式选择
scrcpy源码附带的doc/build.md里面提供了两种编译方式,对应了差别的编译指令
- meson setup x --buildtype=release --strip -Db_lto=true
- ninja -Cx # DO NOT RUN AS ROOT
复制代码- meson setup x --buildtype=release --strip -Db_lto=true \
- -Dprebuilt_server=/path/to/scrcpy-server
- ninja -Cx # DO NOT RUN AS ROOT
复制代码 可以发现本文使用的编译方式与文档提供的编译方式差别,这三种方式均可成功编译,因源码中/server/meson.build编译语句如下
- prebuilt_server = get_option('prebuilt_server')
- if prebuilt_server == ''
- custom_target('scrcpy-server',
- # gradle is responsible for tracking source changes
- build_by_default: true,
- build_always_stale: true,
- output: 'scrcpy-server',
- command: [find_program('./scripts/build-wrapper.sh'), meson.current_source_dir(), '@OUTPUT@', get_option('buildtype')],
- console: true,
- install: true,
- install_dir: 'share/scrcpy')
- else
- if not prebuilt_server.startswith('/')
- # prebuilt server path is relative to the root scrcpy directory
- prebuilt_server = '../' + prebuilt_server
- endif
- custom_target('scrcpy-server-prebuilt',
- input: prebuilt_server,
- output: 'scrcpy-server',
- command: ['cp', '@INPUT@', '@OUTPUT@'],
- install: true,
- install_dir: 'share/scrcpy')
- endif
复制代码 -Dprebuilt_server不为空,则执行预编译文件,使用预编译文件是为了方便没有Android SDK情况的电脑;假如为空则不使用预编译文件,转而使用当地代码编译出一个apk
那么预编译文件又是从哪来的呢? 项目源码 scrcpy-master/install_release.sh
- #!/usr/bin/env bash
- set -e
- BUILDDIR=build-auto
- PREBUILT_SERVER_URL=https://github.com/Genymobile/scrcpy/releases/download/v2.6.1/scrcpy-server-v2.6.1
- PREBUILT_SERVER_SHA256=ca7ab50b2e25a0e5af7599c30383e365983fa5b808e65ce2e1c1bba5bfe8dc3b
- echo "[scrcpy] Downloading prebuilt server..."
- wget "$PREBUILT_SERVER_URL" -O scrcpy-server
- echo "[scrcpy] Verifying prebuilt server..."
- echo "$PREBUILT_SERVER_SHA256 scrcpy-server" | sha256sum --check
- echo "[scrcpy] Building client..."
- rm -rf "$BUILDDIR"
- meson setup "$BUILDDIR" --buildtype=release --strip -Db_lto=true \
- -Dprebuilt_server=scrcpy-server
- cd "$BUILDDIR"
- ninja
- echo "[scrcpy] Installing (sudo)..."
- sudo ninja install
复制代码 预编译的文件是从github上下载的,同时在meson编译时设置了prebuilt_server属性。同样,预编译文件会被拷贝成BUILDDIR/server/scrcpy-server,然后在安装时,会被安装至/usr/local/share/scrcpy/scrcpy-server
获取编译文件
编译成功后,编译产出的文件生成在 C:\msys64\home\scrcpy-master\out目录
该目录下的app文件夹存放的是scrcpy客户端步伐scrcpy.exe
该目录下的server文件夹存放的是scrcpy服务端步伐scrcpy-server
安装scrcpy
进入out目录 /home/scrcpy-master/out
执行 ninja install
- # ninja install
- BUILD SUCCESSFUL in 4s
- 43 actionable tasks: 1 executed, 42 up-to-date
- [1/2] Installing files.Installing app/scrcpy.exe to C:/msys64/mingw64/bin
- Stripping target 'app/scrcpy.exe'.
- Installing server/scrcpy-server to C:/msys64/mingw64/share/scrcpy
- Installing C:/msys64/home/scrcpy-master/app/scrcpy.1 to C:/msys64/mingw64/share/man/man1
- Installing C:/msys64/home/scrcpy-master/app/data/icon.png to C:/msys64/mingw64/share/icons/hicolor/256x256/apps
- Installing C:/msys64/home/scrcpy-master/app/data/zsh-completion/_scrcpy to C:/msys64/mingw64/share/zsh/site-functions
- Installing C:/msys64/home/scrcpy-master/app/data/bash-completion/scrcpy to C:/msys64/mingw64/share/bash-completion/completions
复制代码 如上表示安装成功(将scrcpy放入情况变量路径文件夹,可在任意路径使用scrcpy),可在命令行输入scrcpy -h 验证scrcpy运行
以后要使用scrcpy即可通过MSYS2 执行 scrcpy命令运行
运行scrcpy
当然了MSYS2本身是一个基于Cygwin的POSIX兼容层,它并不直接支持Windows的原生GUI应用步伐。MSYS2主要设计用于编译和运行没有图形用户界面的命令行步伐,大概可以通过静态链接UCRT(Universal C Runtime)来运行带有简单图形用户界面的步伐;为了更好的使用编译出来的scrcpy,这里有一份打包好的运行情况,将你的scrcpy.exe跟scrcpy-server拷贝进去即可通过指令运行界面步伐scrcpy
- adb connect 192.168.63.3:5558
- scrcpy.exe -s 192.168.63.13:5558 --no-audio
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |