Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,27 @@ jobs:
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs

- name: Build Windows app
run: flutter build windows --release
- name: Install fastforge
run: dart pub global activate fastforge

- name: Create MSIX package
run: dart run msix:create
run: fastforge package --platform windows --targets msix

- name: Upload MSIX artifact
uses: actions/upload-artifact@v4
with:
name: scrcpy_buddy_msix
path: build\windows\x64\runner\Release\scrcpy_buddy.msix
path: dist\**\*.msix
if-no-files-found: error

- name: Create Inno Setup EXE
run: fastforge package --platform windows --targets exe

- name: Upload Inno Setup EXE artifact
uses: actions/upload-artifact@v4
with:
name: scrcpy_buddy_exe
path: dist\**\*.exe
if-no-files-found: error

build-macos:
Expand Down
118 changes: 58 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
![](/media/banner.png "banner")
<p align="center">
<a title="Made with Windows Design" href="https://github.com/bdlukaa/fluent_ui"><img alt="Made with Windows Design" src="https://img.shields.io/badge/fluent-design-blue?style=flat-square&color=gray&labelColor=0078D7"
/></a>
Expand All @@ -9,46 +10,41 @@
alt="scrcpy v3.3.4"/></a>
</p>

# scrcpy buddy 🤝

![](/media/banner.png "banner")

scrcpy buddy is a clean, minimalist Flutter-based desktop application that provides an intuitive graphical interface
for [scrcpy](https://github.com/Genymobile/scrcpy), the popular Android screen mirroring and control tool. Built with
Fluent UI design principles, it brings a polished, native desktop experience to managing your Android devices across
Windows, Linux, and macOS.

<!-- TOC -->
* [scrcpy buddy 🤝](#scrcpy-buddy-)
* [Requirements](#requirements)
* [Features](#features)
* [Coming next](#coming-next)
* [Supported languages](#supported-languages)
* [Screenshots](#screenshots)
* [Download & Installation](#download--installation)
* [Supported and tested platforms](#supported-and-tested-platforms)
* [Installation](#installation)
* [MacOS](#macos)
* [Opening the app on MacOS](#opening-the-app-on-macos)
* [Linux](#linux)
* [Windows](#windows)
* [Usage instructions](#usage-instructions)
* [Running scrcpy](#running-scrcpy)
* [Customizing scrcpy options](#customizing-scrcpy-options)
* [Profile management](#profile-management)
* [Configuring a default profile](#configuring-a-default-profile)
* [Troubleshooting](#troubleshooting)
* [ADB / scrcpy not found](#adb--scrcpy-not-found)
* [Setting executable path manually in settings](#setting-executable-path-manually-in-settings)
* [How it works](#how-it-works)
* [List of commands used by the app](#list-of-commands-used-by-the-app)
* [ADB Commands](#adb-commands)
* [scrcpy Commands](#scrcpy-commands)
* [License](#license)
* [Artworks credits](#artworks-credits)
* [Requirements](#requirements)
* [Features](#features)
* [Coming next](#coming-next)
* [Supported languages](#supported-languages)
* [Screenshots](#screenshots)
* [Download & Installation](#download--installation)
* [Supported and tested platforms](#supported-and-tested-platforms)
* [Installation](#installation)
* [MacOS](#macos)
* [Opening the app on MacOS](#opening-the-app-on-macos)
* [Linux](#linux)
* [Windows](#windows)
* [Usage instructions](#usage-instructions)
* [Running scrcpy](#running-scrcpy)
* [Customizing scrcpy options](#customizing-scrcpy-options)
* [Profile management](#profile-management)
* [Configuring a default profile](#configuring-a-default-profile)
* [Troubleshooting](#troubleshooting)
* [ADB / scrcpy not found](#adb--scrcpy-not-found)
* [Setting executable path manually in settings](#setting-executable-path-manually-in-settings)
* [How it works](#how-it-works)
* [List of commands used by the app](#list-of-commands-used-by-the-app)
* [ADB Commands](#adb-commands)
* [scrcpy Commands](#scrcpy-commands)
* [License](#license)
* [Artworks credits](#artworks-credits)
<!-- TOC -->

## Requirements
# Requirements

To use this app, you need the following:

Expand All @@ -57,7 +53,7 @@ To use this app, you need the following:
- Android device(s) with "Developer options" and USB / Network debugging
enabled: https://developer.android.com/tools/adb#Enabling

## Features
# Features

- Run scrcpy on multiple connected devices
- ADB Device management (Switch USB Device to network / disconnect device)
Expand All @@ -69,16 +65,17 @@ To use this app, you need the following:
from a connected device
- Close app to tray

### Coming next
## Coming next

See [milestones](https://github.com/Codertainment/scrcpy_buddy/milestones)

## Supported languages
# Supported languages

- Only English for now

But the app is built with i18n in mind. So, support for more languages can be added gradually.

## Screenshots
# Screenshots

(may not be up-to-date)

Expand All @@ -89,29 +86,29 @@ But the app is built with i18n in mind. So, support for more languages can be ad
| ![](/media/screenshots/windows/video.png "video options") | ![](/media/screenshots/windows/virtual_display.png "virtual display options") | ![](/media/screenshots/windows/window.png "window options") |
| ![](/media/screenshots/windows/profile_dropdown.png "profile dropdown") | ![](/media/screenshots/windows/profile_management.png "profile management") | ![](/media/screenshots/macos/settings.png "app settings") |

## Download & Installation
# Download & Installation

All downloads can be found on the [latest release](https://github.com/Codertainment/scrcpy_buddy/releases/latest) page

### Supported and tested platforms
## Supported and tested platforms

| OS | Minimum Supported | Tested ✅ |
|---------|-----------------------------|---------------|
| MacOS | 11 Big Sur | 26 Tahoe |
| Windows | 7 (?) | 11 |
| Linux | Should work on all versions | KUbuntu 25.10 |

### Installation
## Installation

#### MacOS
### MacOS

- Download and open the DMG File
- Make sure you have administrator privileges
- Drag and drop the app icon to "Applications" folder
- Open the app by searching for it (<kbd>⌘</kbd> <kbd>Space</kbd>)
- See [the next section](#opening-the-app-on-macos) to understand how to open the app

#### Opening the app on MacOS
### Opening the app on MacOS

For macOS apps to be verified, a developer account is required, which has a membership fee of $99/year. As this is my
personal project, I cannot afford this.
Expand All @@ -121,15 +118,15 @@ Hence, the app is unverified, and it requires **manual intervention to open it f
Follow the instructions from [Apple Support](https://support.apple.com/guide/mac-help/mchleab3a043) to manually override
the signing and check and open the app.

#### Linux
### Linux

Possible installation options:

- Install from Snap Store (coming soon)
- Download and install the snap manually (`$ sudo snap install <file_name>.snap --classic --dangerous`)
- Download and open the AppImage

#### Windows
### Windows

<p>
<a href="https://apps.microsoft.com/detail/9pk010v7h9fs?referrer=appbadge&cid=github-readme&mode=direct">
Expand All @@ -143,9 +140,9 @@ Possible installation options:
updates)
- Install via EXE Setup

## Usage instructions
# Usage instructions

### Running scrcpy
## Running scrcpy

Once you have everything setup, connected Android devices (through ADB) should show up in the homepage (known as "
Devices").
Expand All @@ -158,13 +155,13 @@ To run scrcpy on your device(s):
- Configure scrcpy options as you wish by navigating to the categories
- Click on "Start" at the top right corner

### Customizing scrcpy options
## Customizing scrcpy options

- Simply navigate to the desired category from the navigation drawer
- Change the options as you'd like
- All changes are saved automatically to the currently selected profile (visible in the dropdown button at top right)

### Profile management
## Profile management

A profile contains:

Expand All @@ -178,7 +175,7 @@ The dropdown button at the top indicates the currently active profile.
By clicking on the dropdown button, you can switch between profiles, create a new profile or navigate to the profile
management page.

### Configuring a default profile
## Configuring a default profile

You can choose a single profile to be the default one (everytime you open the app), or let the last used profile be the
default one.
Expand All @@ -192,20 +189,20 @@ To default to the last used profile:

- Go to settings, under the "Default profile" section, select "Last used" from the dropdown menu

## Troubleshooting
# Troubleshooting

### ADB / scrcpy not found
## ADB / scrcpy not found

If you have ADB and/or scrcpy setup and installed in your path:

- Depending on the platform, the app may not be able to find ADB / scrcpy in the path. You
can [set the executable in settings manually](#setting-executable-path-manually-in-settings).
- To find out the installation path, run this command in the terminal:
- e.g.
- For Windows: `where adb`
- For MacOS/Linux: `which adb`
- For Windows: `where adb`
- For MacOS/Linux: `which adb`

### Setting executable path manually in settings
## Setting executable path manually in settings

![](/media/screenshots/macos/settings.png "app settings")

Expand All @@ -215,17 +212,17 @@ Verify that the app is able to access the executables by clicking on "Check".

It should show the adb or scrcpy version.

## How it works
# How it works

scrcpy buddy functions as a graphical user interface (GUI) wrapper for command-line tools. The application does not
communicate directly with Android devices or access device data itself. Instead, it exclusively interacts with adb and
scrcpy.
All device communication and data processing occur through these external tools, which operate under their own
respective privacy policies and security models.

### List of commands used by the app
## List of commands used by the app

#### ADB Commands
### ADB Commands

- `adb --version` - Retrieves the installed adb version
- `adb devices -l` - Lists connected Android devices
Expand All @@ -235,19 +232,20 @@ respective privacy policies and security models.
- `adb shell ip route show` - Retrieves network routing information from connected devices
- `adb tcpip` - Switches device connection mode to TCP/IP

#### scrcpy Commands
### scrcpy Commands

- `scrcpy` - Launches screen mirroring with user-configured options from the application UI
- `scrcpy --version` - Retrieves the installed scrcpy version
- `scrcpy --list-apps` - Lists applications installed on connected devices

## License
# License

Apache-2.0: See [LICENSE](LICENSE)

## Artworks credits
# Artworks credits

> The Android robot is reproduced or modified from work created and shared by Google and used according to terms
> described in the Creative Commons 3.0 Attribution License (https://creativecommons.org/licenses/by/3.0/).

Thanks to my friend, [@SudipRajbanshi](https://github.com/SudipRajbanshi) for creating the beautiful logo, banner and tray icon ❤️
Thanks to my friend, [@SudipRajbanshi](https://github.com/SudipRajbanshi) for creating the beautiful logo, banner and
tray icon ❤️
9 changes: 0 additions & 9 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,3 @@ flutter_launcher_icons:
generate: true
macos:
generate: true

msix_config:
display_name: scrcpy buddy
publisher_display_name: Codertainment
publisher: CN=5EFFC3AA-14FC-4D47-AABD-2F91F482F2F7
identity_name: Codertainment.scrcpybuddy
store: true
logo_path: assets/icon_light_1024.png
capabilities: privateNetworkClientServer, usb
13 changes: 13 additions & 0 deletions windows/packaging/exe/make_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# The value of AppId uniquely identifies this application.
# Do not use the same AppId value in installers for other applications.
app_id: dev.codertainment.scrcpy_buddy
publisher: Codertainment
publisher_url: https://github.com/Codertainment/scrcpy_buddy
display_name: scrcpy buddy
create_desktop_icon: true
# See: https://jrsoftware.org/ishelp/index.php?topic=setup_defaultdirname
# install_dir_name: "D:\\HELLO-WORLD"
# This path is relative to the root directory of your project; The format of icon file must be ico, can not be png or others
setup_icon_file: windows\runner\resources\app_icon.ico
locales:
- en
7 changes: 7 additions & 0 deletions windows/packaging/msix/make_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
display_name: scrcpy buddy
publisher_display_name: Codertainment
publisher: CN=5EFFC3AA-14FC-4D47-AABD-2F91F482F2F7
identity_name: Codertainment.scrcpybuddy
store: 'true'
logo_path: assets/icon_light_1024.png
capabilities: privateNetworkClientServer, usb
2 changes: 1 addition & 1 deletion windows/runner/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
_In_ wchar_t *command_line, _In_ int show_command) {
HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"scrcpy_buddy");
HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"scrcpy buddy");
if (hwnd != NULL) {
::ShowWindow(hwnd, SW_NORMAL);
::SetForegroundWindow(hwnd);
Expand Down