Skip to content
 
 

Latest commit

 

History

3,635 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Moonlight icon

Moonlight for Android

面向远程桌面、原生触控板输入和跨设备协作的 Moonlight 独立分支

Release License Android

特色功能 · 界面预览 · 安装与迁移 · 构建与质量门禁 · 架构文档 · 变更记录

Moonlight for Android 是一个独立维护的 Moonlight Android 分支。项目保留 GameStream/Sunshine 串流链路,并围绕 Android 手机、平板和大屏设备重新整理界面、输入、 文件协作和运行时架构。当前产品名称为 Moonlight,普通 Release 包名为 com.silverpoetry.moonlight

特色功能

  • 基于 Jetpack Compose 和 Material 3 的现代界面,支持深浅色主题、动态取色,以及手机、 平板和大屏设备的自适应布局。
  • 现代设计的串流快捷菜单,支持快捷控制和即时设置。
  • 原生触控板、多指手势、本地光标、气压计重按,以及可自定义的虚拟手柄和虚拟按键。
  • 统一同步文字、图片、文件和文件夹,支持按需文件传输和向主机桌面分享文件。
  • 支持串流麦克风、性能面板、画中画、自由窗口、横竖屏和 HDR。
  • 支持配置 ZIP 导入导出,可选择迁移应用设置、主机连接信息和客户端身份。

界面预览

主界面 设置
Moonlight 中文主界面 Moonlight 中文设置界面
触控与鼠标模式 手动添加电脑
Moonlight 中文触控与鼠标模式设置 Moonlight 中文手动添加电脑界面

项目架构

项目采用“平台无关核心 + Android 适配层 + 原生协议层”的分层结构。Compose 只负责 非实时展示,输入、音频、视频和协议回调使用有界、可取消、可验证的实时路径。

Android entry points and Compose UI
             │
             ▼
feature controllers and immutable UI state
             │
             ▼
core:hosts   core:settings   core:transfer   core:virtual-controls
             │
             ▼
Android/protocol adapters and native stream pipeline
             │
             ▼
moonlight-common-c / JNI  <──>  Sunshine
模块 职责
app Android Activity、Compose UI、生命周期组合、SAF/URI、数据库、mDNS、NvHTTP、JNI、串流和发布打包
core:hosts 不可变主机模型、发现/配对/可达性契约、主机操作用例
core:settings 类型化设置键、默认值、校验、迁移、快照和运行态设置模型
core:transfer 文件清单协议、校验、编码和传输生命周期
core:virtual-controls 虚拟手柄/按键布局值对象、文档编码和仓库契约
core:shield-controller-extensions NVIDIA SHIELD 外设兼容库
build-logic 依赖边界、质量门禁、发布安全策略和 SBOM 任务

关键约束:每个可变状态只有一个所有者;UI 通过不可变状态和语义事件工作;实时路径 不访问磁盘、不等待远端、不创建无界队列;文件清单、能力协商和真正的数据读取分开; 销毁后的回调不能写入新的会话或页面。完整设计依据见 ARCHITECTURE.md

兼容性

  • 最低系统:Android 6.0(API 23)。
  • 编译和目标 API:37。
  • 推荐产品:nonRootRelease,包名 com.silverpoetry.moonlight
  • Root 产品:rootRelease,包名 com.silverpoetry.moonlight.root,面向确实需要 root 变体能力的设备;该变体有单独的最高系统版本限制。
  • Android 设备需要与兼容的 Sunshine/Moonlight 主机端配套,触控板、麦克风和新版文件 传输能力以双方协商结果为准。

Android 客户端、Moonlight Qt、Sunshine 和共享 moonlight-common-c 应尽量使用同一 发布批次。当前仓库固定的 common-c 修订为 ac7f234。配套项目如下:

项目 职责 仓库
Moonlight Android Android 客户端、移动端输入、剪贴板、文件、麦克风和 UI 当前仓库
Sunshine Windows 主机、原生触控板注入、剪贴板和麦克风接收 silverpoetry/Sunshine
Moonlight Qt Windows 客户端、桌面输入和对称文件剪贴板 silverpoetry/moonlight-qt

安装与迁移

GitHub Releases 下载 对应设备的 APK 和校验文件。普通设备安装 nonRootRelease;诊断问题时使用带有 .debug 后缀的 Debug 包,不把诊断日志带入正式包。

Release 使用完整 R8 代码优化、混淆和资源收缩。发布时应同时归档 APK、R8 mapping、 SHA-256、版本信息和签名证书摘要。普通 Release 可以覆盖安装同包名的旧版本并保留 设置、主机和客户端身份;包名不同的历史测试包需要先按迁移说明导出或迁移数据,再安装 正式包。

构建与质量门禁

需要 JDK 21、Android SDK、Android NDK 27.0.12077973 和 Git 子模块:

git submodule update --init --recursive
.\gradlew.bat nonRootRelease

日常开发只构建普通 non-root Release。提交前运行单变体门禁:

.\gradlew.bat verifyNonRootRelease --no-daemon

该门禁包含核心模块测试、应用 Release 单元测试、Release Lint、架构与安全检查、依赖 和原生依赖校验以及 APK 构建。完整本地门禁为:

.\gradlew.bat verifyLocal --no-daemon

设备验证、升级覆盖安装、回滚演练、跨客户端剪贴板/麦克风矩阵和发布证据要求见 TESTING.mdRelease Runbook

隐私与安全

  • 剪贴板、文件和麦克风能力只在串流会话中、双方协商后启用。
  • 文件复制不会在用户按下复制键时读取或上传整个目录;真实内容只在远端明确请求后 进入传输队列。
  • 主机数据库、固定主机证书、客户端证书和私钥保存在应用私有目录,并排除 Android 自动备份。显式配置导出由用户主动发起,ZIP 内含私钥时应妥善保存。
  • Release 日志不记录剪贴板正文、文件路径、证书、私钥、麦克风采样或逐事件实时轨迹。
  • 依赖来源、许可证文本和 SBOM 规则见 DEPENDENCIES.mdapp/src/main/assets/third_party_licenses

文档索引

贡献与许可

提交问题或补丁时,请说明设备、Android 版本、产品变体、主机端版本和可复现步骤;涉及 输入、传输、协议、权限或串流生命周期的变更应同时提供对应的契约测试或验证记录。 开发规则见 CONTRIBUTING.md。请勿上传个人设备地址、证书、私钥、 剪贴板内容、文件路径或麦克风录音。

本项目是 Moonlight Android 的独立分支,相关上游作者、历史来源、外部移植和许可证 记录见 CONTRIBUTORS.mdTHIRD_PARTY_NOTICES.md。项目整体许可为 GPL-3.0,第三方依赖的许可证随源码和安装包提供。Moonlight、Sunshine 以及设备和厂商名称归各自权利人所有;项目与相关品牌不存在官方隶属或背书关系。

About

Moonlight Android client with native touchpad input, lazy clipboard file transfer, microphone uplink, and a restructured settings system.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages