We encounter some problems with SDL2_image on MSYS2 (Windows), so implement our own XPM parsing which does not depend on SDL_image. The input XPM is considered safe (it's in our source repo), so do not check XPM format errors. This implies that read_xpm() is not safe to call on any unsafe input. Although less straightforward, use SDL_CreateRGBSurfaceFrom() instead of SDL_CreateRGBSurfaceWithFormatFrom() because it is available with SDL versions older than 2.0.5.
141 lines
2.8 KiB
Markdown
141 lines
2.8 KiB
Markdown
# ScrCpy
|
|
|
|
This project displays screens of Android devices plugged on USB in live.
|
|
|
|
|
|
## Run
|
|
|
|
### Runtime requirements
|
|
|
|
This projects requires _FFmpeg_, _LibSDL2_ and _LibSDL2-net_.
|
|
|
|
#### Linux
|
|
|
|
Install the packages from your package manager. For example, on Debian:
|
|
|
|
sudo apt install ffmpeg libsdl2-2.0.0 libsdl2-net-2.0.0
|
|
|
|
|
|
#### Windows
|
|
|
|
From [MSYS2]:
|
|
|
|
pacman -S mingw-w64-x86_64-SDL2
|
|
pacman -S mingw-w64-x86_64-SDL2_net
|
|
pacman -S mingw-w64-x86_64-ffmpeg
|
|
|
|
[MSYS2]: http://www.msys2.org/
|
|
|
|
|
|
#### MacOS
|
|
|
|
TODO
|
|
|
|
|
|
## Build
|
|
|
|
The project is divided into two parts:
|
|
- the server, running on the device (in `server/`);
|
|
- the client, running on the computer (in `app/`).
|
|
|
|
The server is a raw Java project requiring Android SDK. It not an Android
|
|
project: the target file is a `.jar`, and a `main()` method is executed with
|
|
_shell_ rights.
|
|
|
|
The client is a C project using [SDL] and [FFmpeg], built with [Meson]/[Ninja].
|
|
|
|
The root directory contains a `Makefile` to build both parts.
|
|
|
|
[sdl]: https://www.libsdl.org/
|
|
[ffmpeg]: https://www.ffmpeg.org/
|
|
[meson]: http://mesonbuild.com/
|
|
[ninja]: https://ninja-build.org/
|
|
|
|
|
|
### Build requirements
|
|
|
|
Install the [Android SDK], the JDK 8 (`openjdk-8-jdk`), and the packages
|
|
described below.
|
|
|
|
[Android SDK]: https://developer.android.com/studio/index.html
|
|
|
|
|
|
#### Linux
|
|
|
|
sudo apt install make gcc openjdk-8-jdk pkg-config meson zip \
|
|
libavcodec-dev libavformat-dev libavutil-dev \
|
|
libsdl2-dev libsdl2-net-dev
|
|
|
|
|
|
#### Windows
|
|
|
|
Install these packages:
|
|
|
|
pacman -S mingw-w64-x86_64-make
|
|
pacman -S mingw-w64-x86_64-gcc
|
|
pacman -S mingw-w64-x86_64-pkg-config
|
|
pacman -S mingw-w64-x86_64-meson
|
|
pacman -S zip
|
|
|
|
Java 8 is not available in MSYS2, so install it manually and make it available
|
|
from the `PATH`:
|
|
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
|
|
|
|
### Build
|
|
|
|
Make sure your `ANDROID_HOME` variable is set to your Android SDK directory:
|
|
|
|
export ANDROID_HOME=~/android/sdk
|
|
|
|
From the project root directory, execute:
|
|
|
|
make build
|
|
|
|
To run the build:
|
|
|
|
make run
|
|
|
|
It is also pass arguments to `scrcpy` via `make`:
|
|
|
|
make run ARGS="-p 1234"
|
|
|
|
The purpose of this command is to execute `scrcpy` during the development.
|
|
|
|
|
|
### Test
|
|
|
|
To execute unit tests:
|
|
|
|
make test
|
|
|
|
The server-side tests require JUnit 4:
|
|
|
|
sudo apt install junit4
|
|
|
|
|
|
### Generate a release
|
|
|
|
From the project root directory, execute:
|
|
|
|
make release
|
|
|
|
This will generate the application in `dist/scrcpy/`.
|
|
|
|
|
|
## Run
|
|
|
|
Plug a device, and from `dist/scrcpy/`, execute:
|
|
|
|
./scrcpy
|
|
|
|
If several devices are listed in `adb devices`, you must specify the _serial_:
|
|
|
|
./scrcpy 0123456789abcdef
|
|
|
|
To change the default port (useful to launch several `scrcpy` simultaneously):
|
|
|
|
./scrcpy -p 1234
|
|
|
|
Other options are available, check `scrcpy --help`.
|