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
106 changes: 106 additions & 0 deletions .github/scripts/winget-manifests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/usr/bin/env bash
# Writes the winget manifests of a release: version, installer, and the English and
# Arabic descriptions. The zip is a portable app; winget unpacks it and puts its folder
# on PATH (ArchiveBinariesDependOnPath), since FastbootStudio.exe needs the adb and
# fastboot next to it.
#
# Usage: winget-manifests.sh v2.2.0 path/to/FastbootStudio-v2.2.0-win-x64.zip OUTDIR [YYYY-MM-DD]
set -euo pipefail

tag="$1"
zip="$2"
out="$3"
date="${4:-$(date -u +%Y-%m-%d)}"
version="${tag#v}"
id="IFOKNR.FastbootStudio"
repo="https://github.com/ifoknr/FastbootStudio"
sha=$(sha256sum "$zip" | cut -d' ' -f1 | tr 'a-f' 'A-F')
url="$repo/releases/download/$tag/$(basename "$zip")"
dir="$out/manifests/i/IFOKNR/FastbootStudio/$version"
mkdir -p "$dir"

cat > "$dir/$id.yaml" <<YAML
# yaml-language-server: \$schema=https://aka.ms/winget-manifest.version.1.6.0.schema.json
PackageIdentifier: $id
PackageVersion: $version
DefaultLocale: en-US
ManifestType: version
ManifestVersion: 1.6.0
YAML

cat > "$dir/$id.installer.yaml" <<YAML
# yaml-language-server: \$schema=https://aka.ms/winget-manifest.installer.1.6.0.schema.json
PackageIdentifier: $id
PackageVersion: $version
InstallerType: zip
NestedInstallerType: portable
NestedInstallerFiles:
- RelativeFilePath: FastbootStudio.exe
PortableCommandAlias: fastbootstudio
ArchiveBinariesDependOnPath: true
MinimumOSVersion: 10.0.17763.0
ReleaseDate: $date
Installers:
- Architecture: x64
InstallerUrl: $url
InstallerSha256: $sha
ManifestType: installer
ManifestVersion: 1.6.0
YAML

cat > "$dir/$id.locale.en-US.yaml" <<YAML
# yaml-language-server: \$schema=https://aka.ms/winget-manifest.defaultLocale.1.6.0.schema.json
PackageIdentifier: $id
PackageVersion: $version
PackageLocale: en-US
Publisher: IFOKNR
PublisherUrl: https://github.com/ifoknr
PublisherSupportUrl: $repo/issues
Author: IFOKNR
PackageName: Fastboot Studio
PackageUrl: $repo
License: MIT
LicenseUrl: $repo/blob/master/LICENSE
Copyright: Copyright (c) 2021 LibXZR, (c) 2026 IFOKNR
ShortDescription: The Android toolbox for Windows - fastboot, OTA flashing, payload dumper, super images and backups.
Description: |-
Fastboot Studio is a modern rewrite of Fastboot Enhance. It flashes full OTAs with every
image checked before anything is written, dumps payload.bin, converts and unpacks sparse
and super images, builds super images like lpmake, backs up partitions and files over adb,
and guards risky actions: slot switches, critical partitions and room in super.
adb and fastboot are included; nothing else to install.
Moniker: fastbootstudio
Tags:
- android
- adb
- fastboot
- flashing
- payload-dumper
- super-image
- rom
- backup
ReleaseNotesUrl: $repo/releases/tag/$tag
ManifestType: defaultLocale
ManifestVersion: 1.6.0
YAML

cat > "$dir/$id.locale.ar-SA.yaml" <<YAML
# yaml-language-server: \$schema=https://aka.ms/winget-manifest.locale.1.6.0.schema.json
PackageIdentifier: $id
PackageVersion: $version
PackageLocale: ar-SA
Publisher: IFOKNR
PackageName: Fastboot Studio
License: MIT
ShortDescription: أدوات أندرويد لويندوز - فاست بوت، تفليش التحديثات، مستخرج Payload، صور super والنسخ الاحتياطي.
Description: |-
نسخة جديدة من Fastboot Enhance. يفلّش التحديثات الكاملة بعد التحقق من كل صورة، ويستخرج
payload.bin، ويحوّل ويفك صور sparse و super، ويبني super مثل lpmake، وينسخ الأقسام والملفات
احتياطياً عبر adb، ويحمي من الأخطاء الخطرة. adb و fastboot مدمجة، بدون تثبيت أي شيء ثاني.
ReleaseNotesUrl: $repo/releases/tag/$tag
ManifestType: locale
ManifestVersion: 1.6.0
YAML

echo "$dir"
ls "$dir"
31 changes: 31 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,34 @@ jobs:
AUTO_UPDATE: "false"
VERSION: ${{ inputs.version || github.ref_name }}
run: bash .github/scripts/telegram-release.sh

# The winget manifests of this release (packaging/winget/README.md), as an artifact.
- name: Write winget manifests
if: env.PRE != 'true'
run: bash .github/scripts/winget-manifests.sh "$RELEASE_VERSION" "$FILE" winget

- uses: actions/upload-artifact@v4
if: env.PRE != 'true'
with:
name: winget-manifests
path: winget/

# Once Fastboot Studio is in winget, each release is sent there by itself. That needs a
# classic token with the public_repo scope in the WINGET_TOKEN secret; without it this
# is skipped.
- name: Check for a winget token
id: winget
if: env.PRE != 'true'
env:
WINGET_TOKEN: ${{ secrets.WINGET_TOKEN }}
run: echo "enabled=$([ -n "$WINGET_TOKEN" ] && echo true || echo false)" >> "$GITHUB_OUTPUT"

- name: Submit to winget
if: steps.winget.outputs.enabled == 'true'
continue-on-error: true
uses: vedantmgoyal9/winget-releaser@v2
with:
identifier: IFOKNR.FastbootStudio
release-tag: ${{ env.RELEASE_VERSION }}
installers-regex: 'win-x64\.zip$'
token: ${{ secrets.WINGET_TOKEN }}
22 changes: 22 additions & 0 deletions packaging/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Packaging · النشر

## winget

`.github/scripts/winget-manifests.sh` writes the manifests of a release (version, installer,
English and Arabic descriptions). The Release workflow runs it for every release and attaches
the result as the `winget-manifests` artifact of the run. They follow schema 1.6.0: a portable
zip whose folder goes on PATH (`ArchiveBinariesDependOnPath`), because FastbootStudio.exe needs
the adb and fastboot next to it.

**First submission** (once): copy `manifests/i/IFOKNR/FastbootStudio/<version>/` into a fork of
[microsoft/winget-pkgs](https://github.com/microsoft/winget-pkgs) at the same path and open a
pull request; agree to the Microsoft CLA when the bot asks. Or, on Windows:
`wingetcreate submit <folder>`.

**Later releases**: add a classic GitHub token with the `public_repo` scope as the
`WINGET_TOKEN` secret; the Release workflow then submits each new version by itself.

## XDA

`xda/thread.bbcode` is the thread for XDA Developers (BBCode, paste it in the editor's BBCode
mode). The images come straight from `docs/` on GitHub, so they stay current.
104 changes: 104 additions & 0 deletions packaging/xda/thread.bbcode
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
[CENTER][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/banner.png[/IMG]

[SIZE=6][B]Fastboot Studio[/B][/SIZE]
[SIZE=4]fastboot, OTA flashing, payload dumper, super images and backups — in one Windows app[/SIZE]

[URL='https://github.com/ifoknr/FastbootStudio/releases/latest'][B]⬇ Download[/B][/URL] · [URL='https://github.com/ifoknr/FastbootStudio']Source (GitHub)[/URL] · [URL='https://github.com/ifoknr/FastbootStudio/blob/master/CHANGELOG.md']Changelog[/URL] · [URL='https://t.me/IFOKNR1']Telegram[/URL][/CENTER]

[SIZE=5][B]What is it?[/B][/SIZE]
Fastboot Studio is a free, open-source (MIT) rewrite of [URL='https://github.com/libxzr/FastbootEnhance']Fastboot Enhance[/URL] by LibXZR. It keeps everything the original did and adds what people who flash phones reach for every day: a safe OTA flasher, image tools that replace simg2img / lpunpack / lpmake, a super image builder, and backups of partitions and files over adb.

Everything runs inside the app: no Python, no Linux tools, nothing to install. adb and fastboot (platform-tools 37.0.1) are included. English and Arabic interface.

[SIZE=5][B]Features[/B][/SIZE]
[B]📱 Device[/B]
[LIST]
[*]Every getvar value, every partition with its size and whether it is logical, a filter by name
[*]Flash, erase, and for logical partitions create / resize / delete
[*]Pre-flash checks: bootloader lock state, bootloader or fastbootd, pending Virtual A/B update, leftover COW partitions, current slot
[*]Reboot to system / bootloader / fastbootd / recovery, switch slot, cancel a pending update
[*][B]Boot once[/B] (fastboot boot) — refuses init_boot and vendor_boot images, which cannot start on their own, and goes through the bootloader when you are in fastbootd
[*][B]Super space[/B] — what each slot and the COW partitions take in super, and how much is free
[*][B]USB check[/B] — phone plugged in but not listed? It tells you why: a missing or broken driver (with the steps to fix it), Qualcomm EDL (9008), MediaTek BROM/preloader, Unisoc or Samsung download mode, or a phone still in Android (and reboots it to the bootloader)
[/LIST]

[B]⚡ Flash[/B]
[LIST]
[*]Flashes a full OTA (payload.bin or the OTA zip) in fastbootd
[*][B]Every image is extracted first, in parallel, and checked against its SHA-256 before anything is written[/B] — a broken download never reaches the phone
[*]Logical partitions the OTA needs but the phone lacks are created first; the images are checked to fit in super before writing
[*]Per-partition progress and a live fastboot log
[/LIST]

[B]📦 Payload Dumper[/B]
[LIST]
[*]Opens payload.bin or the OTA zip directly (read in place, no unzipping)
[*]Full OTAs with every operation they use: REPLACE, ZERO, xz, bzip2, zstd…
[*]Extracts in parallel with hash checks
[/LIST]

[B]🧱 Image Tools[/B]
[LIST]
[*]Sparse ↔ raw (simg2img / img2simg), split sparse images
[*]Inspect and unpack super images (lpunpack), including split factory parts
[*]Combine Qualcomm super_1.img … super_N.img pieces using rawprogram XML
[/LIST]

[B]🧩 Build Super[/B]
[LIST]
[*]Builds super images byte-for-byte like AOSP lpmake (Virtual A/B, A/B, single slot)
[*]Import the layout from a phone's super, read the size from the phone
[/LIST]

[B]💾 Backup[/B]
[LIST]
[*]Partitions over adb (root, or from recovery) with SHA-256 for every image
[*]Copies files and folders from the phone (DCIM, Download…)
[*]Phone in fastboot? It reboots to recovery or boots a recovery image for you
[/LIST]

[SIZE=5][B]Safety[/B][/SIZE]
[LIST]
[*][B]Slot switch protection[/B] — warns when the other slot has not booted yet, asks in red when it is marked unbootable or out of retries, and refuses when its logical partitions are empty (as after flashing a factory super)
[*][B]Critical partitions[/B] (xbl, abl, tz, modem, persist, frp, preloader, nvdata…) can only be flashed or erased after typing the partition name
[*]vbmeta: offers --disable-verity --disable-verification and explains what it needs
[*]Asks before closing mid-flash
[/LIST]

[SIZE=5][B]Requirements[/B][/SIZE]
[LIST]
[*]Windows 10 / 11, 64-bit
[*]The phone's USB driver (e.g. Google USB Driver) — the USB check helps if it is missing
[/LIST]

[SIZE=5][B]Download & install[/B][/SIZE]
[LIST=1]
[*]Download [B]FastbootStudio-vX.Y.Z-win-x64.zip[/B] from [URL='https://github.com/ifoknr/FastbootStudio/releases/latest']GitHub Releases[/URL]
[*]Unzip it anywhere
[*]Run [B]FastbootStudio.exe[/B]
[/LIST]

[SIZE=5][B]Screenshots[/B][/SIZE]
[SPOILER="Device"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/device.png[/IMG]
[IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/device-partitions.png[/IMG][/SPOILER]
[SPOILER="Flash"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/flash.png[/IMG][/SPOILER]
[SPOILER="Payload Dumper"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/payload.png[/IMG][/SPOILER]
[SPOILER="Image Tools"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/image-tools.png[/IMG]
[IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/qualcomm-pieces.png[/IMG][/SPOILER]
[SPOILER="Build Super"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/build-super.png[/IMG][/SPOILER]
[SPOILER="Backup"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/backup-partitions.png[/IMG]
[IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/backup-fastboot.png[/IMG][/SPOILER]
[SPOILER="Arabic interface"][IMG]https://raw.githubusercontent.com/ifoknr/FastbootStudio/master/docs/images/ar-device.png[/IMG][/SPOILER]

[SIZE=5][B]Credits[/B][/SIZE]
[LIST]
[*][URL='https://github.com/libxzr/FastbootEnhance']Fastboot Enhance[/URL] by [B]LibXZR[/B] (MIT), the project this grew from
[*]AOSP libsparse and liblp (sparse and super formats), Android platform-tools (Apache 2.0)
[*]Roboto and Noto Kufi Arabic fonts (SIL OFL 1.1)
[/LIST]

[SIZE=5][B]Feedback[/B][/SIZE]
Bug reports and ideas are welcome — here, on [URL='https://github.com/ifoknr/FastbootStudio/issues/new/choose']GitHub Issues[/URL] (please include your phone model, the mode and a copy of the Logs page), or on Telegram [URL='https://t.me/IFOKNR1']@IFOKNR1[/URL]. Pull requests and translations too.

[B]Source code:[/B] [URL]https://github.com/ifoknr/FastbootStudio[/URL]
[B]License:[/B] MIT
Loading