qrserv

uintdevMIT活跃维护

在局域网里跑一个 HTTP 服务器,手机扫码就能传文件,不用数据线也不用云盘。

Transfer files with ease over a network.

v4.4.0发布于 2026-11-04 00:57 UTC220star +1 / 7 天14fork同步于 2026-11-10 06:06 UTC

怎么上手

README 里没有找到可直接复制的安装命令

README 里没有找到可直接复制的安装命令,请到 README 或官方文档查看安装方式。

硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

5 个版本v4.4.0
  1. v4.4.0最新正式版2026-11-04 · 2026-11-04 00:57 UTC
    • Downloads can now be over twice as fast on fast connections
    • Idle stop now stops on time, even when asleep
    • Multi-file imports are now much faster
    • Imports from slow sources no longer stall with the screen off
    • Imports can now be canceled, and end by themselves if data stops
    • Failed imports now show a notification if the app isn't open
    • Added a ZIP compression setting for multi-file selections (off by default)
    • Added an app language setting (Android 13+)
    • Private hotspot files stay off the normal network
    • Private hotspot no longer mistakes a joined network's address for its own
    • Private hotspot now works alongside another app's hotspot
    • Switching to the private hotspot is refused during a download
    • Over-long file names are now shortened, keeping the extension
    • Files that end before their reported size now show a message instead of being shared cut off
    • Fixed import progress hiding errors or filling up early
    • Stalled downloads now end after several minutes, so the device can sleep
    • The app now says so when a download finds the shared file missing
    • Requests for a previous file no longer stop the current share
    • Sharing ending during an import no longer deletes the file being imported
    • The ZIP's file list now shows actual sizes
    • Duplicate names in a ZIP are now shortened to fit the length limit
    • Restore defaults no longer forgets which permissions were asked for
    • Media files shared from other apps now need that app's permission
    • Failed imports during a share now say the share is still running
    • Fixed a possible crash from malformed shares on older Android versions
    • Fixed a rare stuck "Preparing" notification
  2. v4.3.22026-10-29 · 2026-10-29 23:25 UTC
    查看更新说明
    • Android 17 or later now asks for the Nearby devices permission before sharing, as other devices can't connect without it
    • Updated dependencies
  3. v4.3.12026-10-28 · 2026-10-28 20:11 UTC
    查看更新说明
    • Direct Access Mode is now shown as unsupported on devices without an "All files access" screen, instead of quietly using the system file picker
    • Direct Access Mode no longer stays on in the Google Play version on Android 11 or later, such as after restoring a backup
    • Fixed actions and messages being lost when Android recreated or restarted the app, such as after granting All files access
    • The private hotspot's permission dialog now says when settings can't be opened, instead of doing nothing
    • Fixed rare cases where the file picker could interfere with a file being shared from another app
    • Files from a file picker now get the same safety check as files shared from other apps
    • Fixed the Hebrew wording of the "no file picker" message
  4. v4.3.02026-10-20 · 2026-10-20 21:38 UTC
    查看更新说明
    • Added launcher shortcuts for sharing a file and, where supported, sharing via private hotspot
    • Going back from the main screen now always keeps sharing in the background, including when opened from the share sheet or on Android 11 and earlier
    • Added a manual update check in settings (GitHub version)
    • Minimum Android version is now 8.0
    • Download finished now waits for every connection of a multi-connection download, including Chrome's parallel downloads
    • Fixed a rare case where switching IP address could stop sharing or let idle stop end a download early
    • Fixed a crash on devices without an "All files access" screen -- Direct Access Mode falls back to the system file picker there
    • Fixed a crash at launch on Android 13 or later devices without Wi-Fi
    • Fixed a crash on devices without a file picker
    • Private hotspot no longer mistakes a VPN or mobile data address for its own
    • The hotspot band setting is now hidden where the private hotspot can't be used
    • Clients are now shown by IP address, without a reverse DNS lookup slowing down each request
    • Fixed a file being left open when a request is canceled
    • Faster listing and search in the Direct Access Mode Browser for large folders
    • General internal clean up
  5. v4.2.12026-09-28 · 2026-09-28 17:46 UTC
    查看更新说明
    • System theme changes are now automatically detected and applied accordingly
    • General internal clean up

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    QRServ

    Banner with app icon, app name 'QRServ' followed by 'transfer files with ease'

    About

    QRServ is a file sharing application that utilizes its own HTTP server to serve files while having a clean & functional user interface.

    The app is a native Android app written in Kotlin with Jetpack Compose. Prior to v4.0.0, it was built with Flutter/Dart.

    Features

    • QR Code
      • Tap to show the URL in a tooltip
      • Press and hold to copy the URL to the clipboard
    • Share sheet
      • Share the download URL via the system share sheet
      • Import files via the system share sheet from other apps
      • Sharing text with the app creates a text file to share
    • Shows live import progress, whether for a single file or multiple
    • Multi-file selection
      • Bundled into a ZIP archive
      • Press and hold the archive's filename to see the originally selected files in a tooltip
    • Direct Access Mode -- serves the file directly from storage instead of copying it into app cache first, ideal for large files
    • Detects if the selected file is removed while being served, or modified (Direct Access Mode only)
    • Show or hide the filename in the download URL
    • Notifies when a client requests or finishes downloading the file, including their IP address
    • Resumes interrupted downloads in supported software
    • Choose which network interface's IP address to serve from -- the server only listens on that address unless listening on all interfaces is enabled in settings
    • Switches to another IP address if the selected one disappears, and suggests better ones as they appear
    • Private hotspot (Android 13 or later) -- shares over a Wi-Fi network the app creates, reachable only by devices you let join
      • Scan a Wi-Fi QR code to join, or enter the network name and password by hand
      • Switch an ongoing share to or from the private hotspot without selecting the file again
      • Chooses 5 GHz for faster transfers on Android 16 or later, or 2.4 and 5 GHz at once on devices that can run both; the preferred band can be changed in settings
      • If a device can't find the network, the hotspot screen can restart it on 2.4 GHz, which every device supports
      • On Android 13 to 15 the band can't be chosen, so the device's default is used (usually 2.4 GHz). Some devices can't host a 5 GHz hotspot at all
    • Launcher shortcuts (press and hold the app icon) to share a file, or share via private hotspot where supported
    • Keeps sharing while the app is in the background, with a notification to stop sharing
    • Stops sharing after a set time without downloads (10 minutes by default, or off), with a notification saying why
    • HTTP server binds to a random free port by default, or a user-configured one
    • In-app theme selection
    • Check for updates in settings (GitHub version)
    • Supports various languages: English, French, German, Hungarian, Italian, Polish, Portuguese, Spanish, Russian, Turkish, Persian, Hebrew

    System Requirements

    • System: Android
    • Minimum version: 8.0
    • Private hotspot: Android 13 or later (choosing the band, including 5 GHz: Android 16 or later, on supported devices)

    Releases

    Releases can be found in the releases section of this repository.

    Note: Android builds on GitHub will have a different certificate than builds on the Play Store. In other words, you cannot upgrade a build from installation source A via source B, and vice versa.

    Play Store and GitHub version differences

    As you may be aware, there are two different Android builds of this application. This section will cover the differences.

    Play Store
    • Direct Access Mode is not available for Android 11 or later due to the MANAGE_EXTERNAL_STORAGE runtime permission requirement (see issue #20).
      • In short, Google Play became far stricter about the usage of such sensitive permissions in June 2024.
      • The MediaStore API has its own limitations for this use case that would require a substantial amount of custom implementation to work around.
    GitHub
    • IzzyOnDroid distributes the same APK as the GitHub releases.
    • Direct Access Mode is available for all supported Android versions, as MANAGE_EXTERNAL_STORAGE can be used to allow support for Android 11 or later. The exception is the odd device without an "All files access" screen, where that permission can't be granted.
    • "Check for updates" in settings asks GitHub for its latest release when tapped; the app never checks on its own.
    Changing build types

    By default, the source code builds the GitHub version. The version used for the Play Store uses the build command ./gradlew bundleRelease -PNO_MES=true so that the MANAGE_EXTERNAL_STORAGE permission gets patched out and the build would be accepted.

    Desktop

    The last desktop builds (Windows, Linux) can be found in the releases section under v1.1.1. These predate the Kotlin rewrite and can no longer be built from the current source, which targets Android only.

    Contributing

    If you are considering contributing to QRServ or reporting issues, more information can be found here.

    Building

    Ensure you have the Android NDK installed to build a release variant. You may need to specify ndk.dir in the local.properties file. The NDK is used by the no-build-id plugin (see noBuildId.ndkDirectory in the app Gradle build file) to strip .note.gnu.build-id from native libraries for reproducible builds. If you do not need this, you can remove that plugin block.

    Licenses

    Google Play and the Google Play logo are trademarks of Google LLC.

    Nunito (the font) is licensed under OFL-1.1.

    QRServ is licensed under the MIT license.

    Translations and translators

    New and existing translations are very welcome via issue, pull request, or even email. Credit will be given unless opted out.

    Thanks to the following users for helping with language translation:

    UserLanguage(s)
    miklosakosHungarian
    MrRocketFXPolish
    utf-4096French
    SimoneG97Italian
    guidov2006Spanish
    SapphicMoeRussian
    metezdTurkish
    princessmortixPortuguese
    alr86Persian
    vhhhlGerman
    elid34Hebrew