scrcpy源码 windows10编译傻瓜式教程

打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

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文件:
  1. project('scrcpy', 'c',
  2.         version: '2.6.1',
  3.         meson_version: '>= 0.48',
  4.         default_options: [
  5.             'c_std=c11',
  6.             'warning_level=2',
  7.             'b_ndebug=if-release',
  8.         ])
  9. add_project_arguments('-Wmissing-prototypes', language: 'c')
  10. if get_option('compile_app')
  11.     subdir('app')
  12. endif
  13. if get_option('compile_server')
  14.     subdir('server')
  15. endif
复制代码
可以看到工程编译两个项目,app和server。既然Scrcpy是一个投屏软件,那么可以明白是一个C/S软件。Client端运行在我们的电脑上,用于展示。Server端运行在Android手机,用于提供数据。
以是上面的工程目录中,app目录就是Client端,即电脑端的代码。server目录就是Server端,即手机上的代码
校验情况变量

在windows左下角搜刮栏搜刮 msys2,打开名为 MSYS2 MINGW64的应用步伐
在命令行工具中输入
  1. # echo $JAVA_HOME
  2. C:\Program Files\Java\jdk-21
  3. # echo $ANDROID_HOME
  4. C:\Users\Administrator\AppData\Local\Android\Sdk
复制代码
如上表示已经成功配置JAVA_HOME跟ANDROID_HOME
安装编译情况

  1. #运行环境需要的库
  2. pacman -S mingw-w64-x86_64-SDL2 \
  3.         mingw-w64-x86_64-ffmpeg \
  4.         mingw-w64-x86_64-libusb
  5. #客户端编译需要用到的库
  6. pacman -S mingw-w64-x86_64-make \
  7.         mingw-w64-x86_64-gcc \
  8.         mingw-w64-x86_64-pkg-config \
  9.         mingw-w64-x86_64-meson
复制代码
预备编译

假如是一路默认安装msys2,则msys2的根目录在 C:\msys64下,该目录为msys2安装的默认路径,将scrcpy的源代码拷贝到 C:\msys64\home目录
  1. # cd /home/scrcpy-master/
  2. #直接复制如下三行编译命令粘贴到命令行
  3. meson setup out --buildtype=release --strip -Db_lto=true \
  4.     -Dprebuilt_server=
  5. ninja -Cout
复制代码
上述编译命令表示将meson结果生成到 scrcpy-master/out目录下,并使用ninja执行out目录下的编译脚本
多种编译方式选择

scrcpy源码附带的doc/build.md里面提供了两种编译方式,对应了差别的编译指令

  • 从源码编译
  1. meson setup x --buildtype=release --strip -Db_lto=true
  2. ninja -Cx  # DO NOT RUN AS ROOT
复制代码

  • 使用预编译编译
  1. meson setup x --buildtype=release --strip -Db_lto=true \
  2.     -Dprebuilt_server=/path/to/scrcpy-server
  3. ninja -Cx  # DO NOT RUN AS ROOT
复制代码
可以发现本文使用的编译方式与文档提供的编译方式差别,这三种方式均可成功编译,因源码中/server/meson.build编译语句如下
  1. prebuilt_server = get_option('prebuilt_server')
  2. if prebuilt_server == ''
  3.     custom_target('scrcpy-server',
  4.                   # gradle is responsible for tracking source changes
  5.                   build_by_default: true,
  6.                   build_always_stale: true,
  7.                   output: 'scrcpy-server',
  8.                   command: [find_program('./scripts/build-wrapper.sh'), meson.current_source_dir(), '@OUTPUT@', get_option('buildtype')],
  9.                   console: true,
  10.                   install: true,
  11.                   install_dir: 'share/scrcpy')
  12. else
  13.     if not prebuilt_server.startswith('/')
  14.         # prebuilt server path is relative to the root scrcpy directory
  15.         prebuilt_server = '../' + prebuilt_server
  16.     endif
  17.     custom_target('scrcpy-server-prebuilt',
  18.                   input: prebuilt_server,
  19.                   output: 'scrcpy-server',
  20.                   command: ['cp', '@INPUT@', '@OUTPUT@'],
  21.                   install: true,
  22.                   install_dir: 'share/scrcpy')
  23. endif
复制代码
-Dprebuilt_server不为空,则执行预编译文件,使用预编译文件是为了方便没有Android SDK情况的电脑;假如为空则不使用预编译文件,转而使用当地代码编译出一个apk
那么预编译文件又是从哪来的呢? 项目源码 scrcpy-master/install_release.sh
  1. #!/usr/bin/env bash
  2. set -e
  3. BUILDDIR=build-auto
  4. PREBUILT_SERVER_URL=https://github.com/Genymobile/scrcpy/releases/download/v2.6.1/scrcpy-server-v2.6.1
  5. PREBUILT_SERVER_SHA256=ca7ab50b2e25a0e5af7599c30383e365983fa5b808e65ce2e1c1bba5bfe8dc3b
  6. echo "[scrcpy] Downloading prebuilt server..."
  7. wget "$PREBUILT_SERVER_URL" -O scrcpy-server
  8. echo "[scrcpy] Verifying prebuilt server..."
  9. echo "$PREBUILT_SERVER_SHA256  scrcpy-server" | sha256sum --check
  10. echo "[scrcpy] Building client..."
  11. rm -rf "$BUILDDIR"
  12. meson setup "$BUILDDIR" --buildtype=release --strip -Db_lto=true \
  13.     -Dprebuilt_server=scrcpy-server
  14. cd "$BUILDDIR"
  15. ninja
  16. echo "[scrcpy] Installing (sudo)..."
  17. 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
  1. # ninja install
  2. BUILD SUCCESSFUL in 4s
  3. 43 actionable tasks: 1 executed, 42 up-to-date
  4. [1/2] Installing files.Installing app/scrcpy.exe to C:/msys64/mingw64/bin
  5. Stripping target 'app/scrcpy.exe'.
  6. Installing server/scrcpy-server to C:/msys64/mingw64/share/scrcpy
  7. Installing C:/msys64/home/scrcpy-master/app/scrcpy.1 to C:/msys64/mingw64/share/man/man1
  8. Installing C:/msys64/home/scrcpy-master/app/data/icon.png to C:/msys64/mingw64/share/icons/hicolor/256x256/apps
  9. Installing C:/msys64/home/scrcpy-master/app/data/zsh-completion/_scrcpy to C:/msys64/mingw64/share/zsh/site-functions
  10. 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
  1. adb connect 192.168.63.3:5558
  2. scrcpy.exe -s  192.168.63.13:5558 --no-audio
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表