QPlayer

Verified safeOpen sourceExclusive
—
No reviews reviews
23
downloads
8.0
android

AI summary

Cross-platform music player for local libraries, with playlists, playback controls, and synchronized lyrics. Optional source plugins add online music features; version 1.9.3-rc.2 fixes plugin installation and desktop stability issues.

Generated by AI. May contain inaccuracies.

Screenshots

About this app

An extensible cross-platform music player with a QML-rendered UI Powered by qml4j

The UI uses no native Views. Every control is described in QML and rendered by qml4j, except the lyric-page body (per-syllable scrolling, fluid backdrop), which the host draws directly through Skija. qml4j is itself a QML runtime written in pure Java.

Android and desktop load the same QML and the same player-core logic: one UI running in two host shells.

🎶 Structure QPlayer is a player shell plus a plugin system.

QPlayer itself contains no online music source and distributes no source code for one. Installing a JavaScript source plugin adds recommendations, aggregate search, playlists, login, likes, recent plays and heart mode; pages appear according to the capabilities a plugin declares, and match the native pages. Without a plugin, it is a local player.

That boundary shapes the rest of the design. Plugins run in an isolated Rhino realm; only permissions declared in the manifest and confirmed by the user take effect; every field a plugin returns is validated before it reaches the UI; and a plugin contributes no QML, only a description of a dialog's contents, which QPlayer renders with its own components.

🎶Features ・Playback A local library, a shared queue, and three play modes (list loop, shuffle, repeat one). Online entities use collision-free provider:kind:id identifiers. A foreground MediaSession service drives the lockscreen, notification and bluetooth transport, with auto-advance, position sync, pause-on-call and ducking on transient focus loss.

・Lyric page Drawn by the host directly through Skija rather than QML: per-syllable scrolling, a fluid backdrop tinted from the cover, romanization and translation, and a Material wavy progress bar. Lyrics come from the active source plugin or from local files. On Android they are also published natively to Lyricon for the status bar.

・Interface The whole UI is QML (md3.Core) running on the qml4j engine. The theme can be reseeded from the current cover (Monet dynamic color, optional), with dark, light and follow-system modes, in Simplified Chinese or English. Layout is width-driven (MD3 breakpoints 600 / 840): a bottom bar when narrow, a left NavigationRail when wide, and a playlist grid whose column count follows the width, so Android landscape and tablets require no separate work.

・Desktop The same QML and player-core on LWJGL3 + GLFW, rendered with Skija. The OpenGL and Vulkan backends are switchable at startup. A taskbar icon and a system tray whose menu mirrors the transport are provided, and minimizing to the tray destroys the render thread and GPU resources and rebuilds them on restore, while playback and UI state are preserved.

・Plugin safety Signed .qplug packages, built-in source repositories pinned to a publisher key, a permission sheet at install time, one isolated Rhino realm per plugin, network-domain grants and a namespaced credential vault. Plugin dialogs are declared by the plugin and rendered by QPlayer, so they follow the app's theme and cannot imitate host chrome they were not given.

🎶Credential storage and the security boundary ・QPlayer encrypts each plugin's login credentials with authenticated AES-GCM in a plugin-specific namespace, and protects the random data key with Android Keystore, macOS Keychain, Windows DPAPI or Linux Secret Service/KWallet whenever one is available. If the system store is unavailable, the user may explicitly fall back to a local key readable only by the current user.

・This feature provides data-at-rest protection, not protection against malware already running locally. It reduces the risk of restoring a login from copied credential files, configuration directories, backups or old drives, and prevents other unprivileged operating-system accounts from reading the credentials directly.

▶ Interface languages: Chinese, English

📄 License Apache License 2.0.

What's new

v1.9.3-rc.2Oct 29, 2026
  • 此预发布修复 1.9.3-rc.1 桌面原生版首次安装音源插件时退出的问题,建议 RC1 用户升级。最新正式版仍为 1.9.2。
  • ✨新功能 ・桌面端使用 GraalVM Native Image,提供 Linux AppImage、Windows ZIP / 安装程序与 macOS Apple Silicon DMG,不再随包携带 JRE。 ・Android 与桌面端的内置 QML 组件在构建时编译,启动时直接加载预编译组件。
  • 💼 优化 ・文件选择器使用系统原生接口,不再依赖 Swing。 ・WebView 保留原有 WebView2 / WKWebView / WebKitGTK 引擎,通过独立原生窗口承载,移除 Swing 宿主。 ・原生反射元数据自动覆盖 Gson TypeToken 声明的 JSON 模型与容器构造器;三个桌面平台统一使用已验证的 GraalVM 25 Innovation 4 编译器。
  • 🚑 修复 ・修复 安装音源插件时,校验包内哈希表所需的 LinkedHashMap 构造器缺少反射注册,导致应用退出的问题。 ・修复 WebView 查询 Cookie 期间关闭窗口可能崩溃的问题。 ・修复 渲染线程尚未退出就销毁窗口的生命周期问题。
  • 💡 版本更新后,请跟随新版本内推送,更新兜底音源插件。
  • Full Changelog: https://github.com/TIMER-err/qplayer/compare/v1.9.2...v1.9.3-rc.2

About this version

Version
1.9.3-rc.2 (97)
Size
47.64 MB
Requires Android
8.0
Target SDK
26
Architecture
arm64-v8a
Downloads
23
Updated
Oct 29, 2026
Package
dev.t1m3.qplayer
Languages1
English

Similar apps

Ratings & reviews

—
0 ratings
  • 5
    0
  • 4
    0
  • 3
    0
  • 2
    0
  • 1
    0

Write a review

Tap a star to rate this app