scrcpy源码 windows10编译傻瓜式教程

9 篇文章 0 订阅
1 篇文章 0 订阅

scrcpy源码 windows10编译(全量编译)

概述

  • 简介:Scrcpy是一款小巧的Android投屏软件,能够跨平台其支持Windows、Mac、Linux系统。右PC充当客户端,Android板子作为服务端。
  • 原理:Android将录屏发送给PC,PC接收到数据后进行展示。PC上鼠标点击录屏上对应的坐标,把坐标通过Socket通信传递给Android端,实现对Android的控制

前置

scrcpy编译所需项

  1. scrcpy源码
  2. msys64-github,msys64-aliyun
  3. jdk-21
  4. android Studio: android studio下载api 35,android 12以上API都可以

android版本API对照表

Android版本EnLinux KernelAPI Level
15Vanilla Ice Cream..
14UpsideDownCake6.1.2334
13Tiramisu5.15.4133
12LSv25. 10.6632
12S5.4,5.1031
11R4.14-stable,4.19-stable30
10Q4.9-q,4.14-q,4.19-q29
9Pie4.4.107, 4.9.84, and 4.14.4228
8.1Oreo4.1027
8.0Oreo4.1026
7.1.1Nougat4.4.125
7.0Nougat4.4.124
6.0Marshmallow3.18.1023
5.1Lollipop3.16.122
5.0Lollipop3.16.121
4.4wKitKat Wear3.1020
4.4KitKat3.1019

编译环境准备

资源下载

从上述下载链接下载scrcpy编译所需项,国内上不了github的可以下载我已经准备好的的压缩包,android SDK略大,可通过安装android studio方式下载sdk

  1. 前三项下载

安装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里面提供了两种编译方式,对应了不同的编译指令

  1. 从源码编译
meson setup x --buildtype=release --strip -Db_lto=true
ninja -Cx  # DO NOT RUN AS ROOT
  1. 使用预编译编译
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值