我可以不吃啊 发表于 2024-8-13 02:27:21

scrcpy源码 windows10编译傻瓜式教程

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: ,
                  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 " Downloading prebuilt server..."
wget "$PREBUILT_SERVER_URL" -O scrcpy-server
echo " Verifying prebuilt server..."
echo "$PREBUILT_SERVER_SHA256scrcpy-server" | sha256sum --check

echo " Building client..."
rm -rf "$BUILDDIR"
meson setup "$BUILDDIR" --buildtype=release --strip -Db_lto=true \
    -Dprebuilt_server=scrcpy-server
cd "$BUILDDIR"
ninja

echo " 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

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 -s192.168.63.13:5558 --no-audio

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: scrcpy源码 windows10编译傻瓜式教程