返回> 网站首页
windows下scrcpy的server编译
yoours2025-07-22 18:57:11
简介一边听听音乐,一边写写文章。
一、linux下编译使用
build_without_gradle.sh
二、windows下编译
@echo off
:: Configuration
set ANDROID_HOME=D:\Java\Android\android-sdk-windows
set SCRCPY_DEBUG=false
set SCRCPY_VERSION_NAME=3.3.1
:: Default values if environment variables not set
if "%ANDROID_PLATFORM%"=="" set ANDROID_PLATFORM=35
if "%ANDROID_BUILD_TOOLS%"=="" set ANDROID_BUILD_TOOLS=35.0.0
if "%BUILD_DIR%"=="" set BUILD_DIR=build_manual
set PLATFORM_TOOLS=%ANDROID_HOME%\platforms\android-%ANDROID_PLATFORM%
set BUILD_TOOLS_DIR=%ANDROID_HOME%\build-tools\%ANDROID_BUILD_TOOLS%
:: Resolve absolute path for BUILD_DIR
for %%I in ("%BUILD_DIR%") do set BUILD_DIR=%%~fI
set CLASSES_DIR=%BUILD_DIR%\classes
set GEN_DIR=%BUILD_DIR%\gen
:: Get server directory (where this script is located)
set SERVER_DIR=%~dp0
set SERVER_BINARY=scrcpy-server
set ANDROID_JAR=%PLATFORM_TOOLS%\android.jar
set ANDROID_AIDL=%PLATFORM_TOOLS%\framework.aidl
set LAMBDA_JAR=%BUILD_TOOLS_DIR%\core-lambda-stubs.jar
echo Platform: android-%ANDROID_PLATFORM%
echo Build-tools: %ANDROID_BUILD_TOOLS%
echo Build dir: %BUILD_DIR%
:: Clean previous build
if exist "%CLASSES_DIR%" rmdir /s /q "%CLASSES_DIR%"
if exist "%GEN_DIR%" rmdir /s /q "%GEN_DIR%"
if exist "%BUILD_DIR%\%SERVER_BINARY%" del "%BUILD_DIR%\%SERVER_BINARY%"
if exist classes.dex del classes.dex
mkdir "%CLASSES_DIR%"
mkdir "%GEN_DIR%\com\genymobile\scrcpy"
:: Generate BuildConfig.java
echo package com.genymobile.scrcpy;> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo.>> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo public final class BuildConfig {>> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo public static final boolean DEBUG = %SCRCPY_DEBUG%;>> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo public static final String VERSION_NAME = "%SCRCPY_VERSION_NAME%";>> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo }>> "%GEN_DIR%\com\genymobile\scrcpy\BuildConfig.java"
echo Generating java from aidl...
::cd "%SERVER_DIR%src\main\aidl"
:: 修正AIDL编译命令,添加正确的导入路径
set AIDL_IMPORT_PATHS=-I %SERVER_DIR%src\main\aidl
"%BUILD_TOOLS_DIR%\aidl" %AIDL_IMPORT_PATHS% -o"%GEN_DIR%" %SERVER_DIR%src\main\aidl\android\content\IOnPrimaryClipChangedListener.aidl
"%BUILD_TOOLS_DIR%\aidl" %AIDL_IMPORT_PATHS% -o"%GEN_DIR%" -p"%ANDROID_AIDL%" %SERVER_DIR%src\main\aidl\android\view\IDisplayWindowListener.aidl
:: Fake sources to expose hidden Android types to the project
set FAKE_SRC=%SERVER_DIR%src\android\content\*.java
echo %FAKE_SRC%
:: Main source files
set SRC=E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\audio\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\control\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\device\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\opengl\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\util\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\video\*.java ^
E:\test\scrcpy-master\server\src\main\java\com\genymobile\scrcpy\wrappers\*.java ^
E:\test\scrcpy-master\server\src\main\java\android\content\*.java
echo Compiling java sources...
cd "%SERVER_DIR%\src\main\java"
"%JAVA_HOME%\bin\javac" -encoding UTF-8 -bootclasspath %ANDROID_JAR% ^
-cp "%LAMBDA_JAR%;%GEN_DIR%" ^
-d %CLASSES_DIR% ^
-source 1.8 -target 1.8 ^
%FAKE_SRC% ^
%SRC%
echo Dexing...
cd "%CLASSES_DIR%"
if %ANDROID_PLATFORM% LSS 31 (
:: use dx
"%BUILD_TOOLS_DIR%\dx" --dex --output "%BUILD_DIR%\classes.dex" ^
android\view\*.class ^
android\content\*.class ^
com\genymobile\scrcpy\*.class ^
com\genymobile\scrcpy\audio\*.class ^
com\genymobile\scrcpy\control\*.class ^
com\genymobile\scrcpy\device\*.class ^
com\genymobile\scrcpy\opengl\*.class ^
com\genymobile\scrcpy\util\*.class ^
com\genymobile\scrcpy\video\*.class ^
com\genymobile\scrcpy\wrappers\*.class
echo Archiving...
cd "%BUILD_DIR%"
"%JAVA_HOME%\bin\jar" cvf "%SERVER_BINARY%" classes.dex
del classes.dex
) else (
:: use d8
"%BUILD_TOOLS_DIR%\d8" --classpath "%ANDROID_JAR%" ^
--output "%BUILD_DIR%\classes.zip" ^
android\view\*.class ^
android\content\*.class ^
com\genymobile\scrcpy\*.class ^
com\genymobile\scrcpy\audio\*.class ^
com\genymobile\scrcpy\control\*.class ^
com\genymobile\scrcpy\device\*.class ^
com\genymobile\scrcpy\opengl\*.class ^
com\genymobile\scrcpy\util\*.class ^
com\genymobile\scrcpy\video\*.class ^
com\genymobile\scrcpy\wrappers\*.class
cd "%BUILD_DIR%"
ren classes.zip "%SERVER_BINARY%"
)
rmdir /s /q "%GEN_DIR%"
rmdir /s /q "%CLASSES_DIR%"
echo Server generated in %BUILD_DIR%\%SERVER_BINARY%
endlocal