plain-app

plainhubAGPL-3.0活跃维护

在电脑浏览器里安全管理和访问手机上的文件、媒体、联系人、短信与通话记录,无需数据线或云同步。

🔥 PlainApp is an open-source app that lets you securely manage your phone from a web browser. Access files, media, contacts, SMS, calls, and more through a simple, easy-to-use interface on your desktop.

v3.3.25发布于 2026-09-11 14:10 UTC7,170star +14 / 7 天447fork同步于 2026-11-10 11:33 UTC

怎么上手

由 README 提炼,执行前请确认
从 Google Play、F-Droid 或 GitHub Releases 安装 APK;自建需在 app 目录生成 release.jks 并在根目录配置 keystore.properties 后执行 ./gradlew :app:assembleDebug
硬件要求按 README 说明

需要 Android 9.0 或更高版本的安卓手机;电脑端只需同网络下支持浏览器的设备,无需安装客户端。README 未提及 GPU 或显存要求。

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

项目说明

由 README 自动翻译提炼

开源安卓应用,把手机变成局域网自托管的文件与消息管理面板,浏览器直连

在电脑浏览器里安全管理和访问手机上的文件、媒体、联系人、短信与通话记录,无需数据线或云同步。

核心能力

  • 浏览器访问手机文件、媒体、联系人、短信与通话记录
  • TLS 加 XChaCha20-Poly1305 加密手机与浏览器间流量
  • 实时镜像手机通知并支持带音频与远程控制的投屏
  • 内置 Markdown 笔记、RSS 阅读器与 DLNA/Chromecast 投屏
  • 支持 PWA,可像原生应用一样固定到桌面

容易踩的坑

手机与电脑必须处于同一 Wi-Fi 局域网,跨网段无法访问;自行编译前需先生成 release.jks 并填写 keystore.properties;构建依赖同级的 plain-core 仓库,需先用 ./scripts/core local 关联

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v3.3.25
  1. v3.3.25Release 3.3.25最新正式版2026-09-11 · 2026-09-11 14:10 UTC

    What's Changed

    Improvements

    • Starts even when the port is taken — if another app already occupies the configured port, PlainApp now picks a free one automatically instead of failing to start
    • Clearer certificate warning help — the in-app FAQ for the browser certificate warning now includes a step-by-step animated demo

    Fixes

    • Fixed the web login button taking several seconds to appear on some networks
    • Fixed Stay Online mode: the screen no longer locks, a new "Go dark now" button blacks it out instantly, and there is no grey border on some phones (e.g. Samsung)

    Security

    VirusTotal Scan

    FileStatusScan Report
    PlainApp-3.3.25-64bit-Recommended.apk✅ 0/65 CleanView Report
    PlainApp-3.3.25-Old-32bit.apk✅ 0/63 CleanView Report
    PlainApp-3.3.25-Google-Play.aab✅ 0/56 CleanView Report

    SLSA Provenance (Level 3)

    The .intoto.jsonl file is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:

    slsa-verifier verify-artifact PlainApp-3.3.25-64bit-Recommended.apk \
      --provenance-path multiple.intoto.jsonl \
      --source-uri github.com/plainhub/plain-app
    
  2. v3.3.24Release 3.3.242026-09-10 · 2026-09-10 21:15 UTC
    查看更新说明

    What's Changed

    New Features

    • QR code pairing — pair with your desktop by scanning the QR code shown in its Nearby panel
    • Feed sync retry banner — failed feeds show up in one banner with per-feed retry, no more pop-up dialogs
    • Bulk move media (#360) — move multiple photos and videos into a folder from the web client in one go

    Improvements

    • More reliable large uploads — uploaded parts are assembled in the background, no more upload timeouts
    • Fresh look for alert banners — Material You style across the app

    Fixes

    • Fixed a crash when stopping screen mirroring
    • Fixed the version number reported to the desktop client

    Security

    VirusTotal Scan

    FileStatusScan Report
    PlainApp-3.3.24-64bit-Recommended.apk✅ 0/50 CleanView Report
    PlainApp-3.3.24-Old-32bit.apk✅ 0/50 CleanView Report
    PlainApp-3.3.24-Google-Play.aab✅ 0/38 CleanView Report

    SLSA Provenance (Level 3)

    The .intoto.jsonl file is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:

    slsa-verifier verify-artifact PlainApp-3.3.24-64bit-Recommended.apk \
      --provenance-path multiple.intoto.jsonl \
      --source-uri github.com/plainhub/plain-app
    
  3. v3.3.22Release 3.3.222026-09-09 · 2026-09-09 15:17 UTC
    查看更新说明

    What's Changed

    Service & Permissions

    • First-run permission wizard for starting the service: step-by-step guidance for notification and storage permissions, with clearer wording and no silent auto-start when required permissions are missing

    Feeds

    • New first-run discovery mode: browse the built-in feed catalog right on the Feeds page and subscribe with a per-feed button — no page switching, then tap "Start reading" when ready. Deleting your last feed returns to discovery mode
    • Fixed the top bar getting stuck (unable to expand) after swiping to another article in the pager
    • "Load full content" button now only appears for feeds that serve summaries

    Web Client

    • Fixed chunked upload file ID collisions that could corrupt uploaded files; the app now also verifies total chunk size before merging

    Security

    • File responses now include Content-Security-Policy: sandbox and X-Content-Type-Options: nosniff, blocking stored XSS via SVG/HTML files in /fs and guest shares
    • Removed trust in client-supplied Forwarded headers: the /shutdown loopback guard, login rate limiting, and the DLNA allowlist now key on the real socket IP and cannot be spoofed

    Security

    VirusTotal Scan

    FileStatusScan Report
    PlainApp-3.3.22-64bit-Recommended.apk✅ 0/0 CleanView Report
    PlainApp-3.3.22-Old-32bit.apk✅ 0/66 CleanView Report
    PlainApp-3.3.22-Google-Play.aab✅ 0/61 CleanView Report

    SLSA Provenance (Level 3)

    The .intoto.jsonl file is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:

    slsa-verifier verify-artifact PlainApp-3.3.22-64bit-Recommended.apk \
      --provenance-path multiple.intoto.jsonl \
      --source-uri github.com/plainhub/plain-app
    
  4. v3.3.21Release 3.3.212026-09-08 · 2026-09-08 02:42 UTC
    查看更新说明

    What's Changed

    • MP4 videos now play correctly in Chromium-based browsers when served from the web client (remuxed with mebx metadata track)
    • Markdown editor toolbar strings are now localized across all languages
    • XML reader now merges adjacent text and CDATA sections into a single text node

    Security

    VirusTotal Scan

    FileStatusScan Report
    PlainApp-3.3.21-64bit-Recommended.apk✅ 0/65 CleanView Report
    PlainApp-3.3.21-Old-32bit.apk✅ 0/64 CleanView Report
    PlainApp-3.3.21-Google-Play.aab✅ 0/61 CleanView Report

    SLSA Provenance (Level 3)

    The .intoto.jsonl file is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:

    slsa-verifier verify-artifact PlainApp-3.3.21-64bit-Recommended.apk \
      --provenance-path multiple.intoto.jsonl \
      --source-uri github.com/plainhub/plain-app
    
  5. v3.3.20Release 3.3.202026-09-07 · 2026-09-07 02:50 UTC
    查看更新说明

    What's Changed

    New

    • One-tap quick note card on ToolsPage, with undo toast

    Fixed

    • Migrated to Room 3 (bundled driver) to fix raw queries occasionally reading stale data; NotesViewModel is now a singleton shared with GraphQL
    • Moved all Room entity state into primary constructors so data-class equals covers every column, with a guard test
    • Pinned GraphQL ID/Instant scalar names to prevent R8 obfuscation breakage

    Security

    VirusTotal Scan

    FileStatusScan Report
    PlainApp-3.3.20-64bit-Recommended.apk✅ 0/65 CleanView Report
    PlainApp-3.3.20-Old-32bit.apk✅ 0/65 CleanView Report
    PlainApp-3.3.20-Google-Play.aab✅ 0/60 CleanView Report

    SLSA Provenance (Level 3)

    The .intoto.jsonl file is a signed SLSA provenance document covering all release artifacts (APKs + AAB). Verify with slsa-verifier:

    slsa-verifier verify-artifact PlainApp-3.3.20-64bit-Recommended.apk \
      --provenance-path multiple.intoto.jsonl \
      --source-uri github.com/plainhub/plain-app
    

用户点评

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

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

    README 原文

    未翻译

    PlainApp

    PlainApp is a free, open-source Android app that turns your phone into a self-hosted management hub you can access from any web browser on the same network — no accounts, no cloud, no subscriptions. Whether you need to transfer files, read SMS, browse photos, or mirror your screen, PlainApp puts full control back in your hands.

    Why PlainApp?

    Most phone-management tools either route your data through their own servers, lock features behind subscriptions, or plague you with ads. PlainApp is different:

    • 100% local — your data never leaves your network
    • End-to-end encrypted — every connection is secured with TLS + XChaCha20-Poly1305
    • Completely free and ad-free — no purchases, no upsells, ever
    • Fully open-source — audit the code, build your own binary, or contribute

    Features

    🌐 Web-Based Phone Management

    Open a browser on any desktop or laptop connected to the same Wi-Fi network and get a full dashboard to manage your Android device — no app installation required on the computer side. Supports PWA so you can pin it to your desktop like a native app.

    CategoryWhat you can do
    FilesBrowse internal storage, SD card, and USB drives; upload, download, rename, delete
    MediaView and manage photos, videos, and audio; stream them directly in the browser
    ContactsView, search, and manage your contacts
    SMS & CallsRead messages and call logs; send SMS from your desktop
    AppsList installed apps and export APKs
    NotificationsMirror phone notifications to the browser in real time
    Screen MirrorLive-stream the phone screen to the browser with audio and remote control support
    Device InfoCheck battery, storage, network, and system details

    📱 Built-in Android Tools

    PlainApp is also a capable standalone app — not just a server:

    • Markdown Notes — write and organize notes with a clean editor
    • RSS Reader — follow your favorite websites with a distraction-free reader
    • Video & Audio Player — full-featured media player with playlist support
    • TV Cast — cast media to any DLNA/Chromecast-compatible TV
    • Peer-to-Peer Chat & File Sharing — share files and messages directly between devices without a server
    • Pomodoro Timer — stay focused with a built-in work timer
    • Sound Meter — measure ambient noise levels in real time

    🔒 Privacy & Security

    • Zero data sent to any third-party server
    • All traffic between phone and browser is encrypted (TLS + XChaCha20-Poly1305)
    • No account registration required

    Video: https://www.youtube.com/watch?v=TjRhC8pSQ6Q

    Reddit: https://www.reddit.com/r/plainapp

    Discord: https://discord.gg/RQWcS6DEEe

    QQ Group: 812409393

    How PlainApp Compares

    FeaturePlainAppAirDroidKDE ConnectAnExplorerPushbullet
    Open source✅❌✅✅❌
    100% local / no cloud required✅⚠️ partial✅✅❌
    End-to-end encrypted (local)✅⚠️ paid❌❌❌
    Ad-free✅⚠️ paid✅⚠️ paid⚠️ paid
    Free all features✅⚠️ freemium✅⚠️ freemium⚠️ freemium
    Web browser access (no desktop app needed)✅✅❌❌✅
    File manager (browser UI)✅✅⚠️ limited✅❌
    SMS from desktop✅✅✅❌✅
    Screen mirroring✅✅✅❌❌
    Media streaming in browser✅⚠️ limited❌❌❌
    Notification mirroring✅✅✅❌✅
    Built-in RSS reader✅❌❌❌❌
    Markdown notes✅❌❌❌❌
    P2P chat & file sharing✅⚠️ paid❌❌⚠️ limited
    TV casting (DLNA/Chromecast)✅✅❌❌❌
    PWA support✅❌❌❌❌
    No account required✅❌✅✅❌

    ✅ Fully supported   ⚠️ Partially supported or requires paid plan   ❌ Not supported

    Donations :heart:

    This project needs you! If you would like to support this project's further development, the creator of this project or the continuous maintenance of this project, feel free to donate.

    Your donation is highly appreciated. Thank you!

    Screenshots

    Android App

    Web Dashboard

    Compatibility

    PlainApp requires Android 9.0 or higher.

    FAQ

    https://plainapp.app/docs

    Support

    PlainApp is fully open-source.
    If you have any doubts, you're free to review the code, build your own version, or simply choose not to use it.

    If you run into issues, feel free to open a GitHub issue — I'm always happy to help.

    Please don’t leave a one-star review without giving it a fair try.

    Work on plain-core

    Keep plain-core next to this repository. Run from this repository root.

    ./scripts/core local        # Use local plain-core
    ./scripts/core local --off  # Stop using local paths
    ./scripts/core update       # Lock this project to the latest remote commit
    

    Before publishing Rust consumer changes, publish Core first, run ./scripts/core update, and commit the resulting plain-rs/Cargo.lock with the consumer source. Verify with local overrides disabled:

    bash scripts/check-ui.sh
    ./gradlew :plain-common:testAndroidHostTest :shared:testAndroidHostTest
    ./gradlew :app:assembleDebug
    

    Build

    1. Generate release.jks file under $rootProject/app folder.
    keytool -genkeypair -v -keystore ./app/release.jks -alias release -keyalg RSA  -keysize 4096 -validity 36500
    
    1. Create keystore.properties file with following content under $rootProject folder.
    storePassword=
    keyPassword=
    keyAlias=release
    storeFile=release.jks