[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-77832":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":12,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":28,"discoverSource":29},77832,"Ncrust","GuitaristRin\u002FNcrust","GuitaristRin","Ncrust - 一款基于 Jetpack Compose 与 Material 3 设计的网易云音乐第三方 Android 客户端，支持无损音频播放、歌词滚动、本地曲库管理、系统媒体控制及多模式播放队列。",null,"Kotlin",122,1,107,9,0,2,15,3,0.9,"MIT License",false,"master",true,[],"2026-06-12 02:03:45","# Ncrust - 网易云音乐 Android 第三方客户端\n\n\u003Cdiv align=\"center\">\n\n![Kotlin](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKotlin-1.9%2B-purple?style=flat-square&logo=kotlin)\n![Compose](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FJetpack%20Compose-1.5%2B-blue?style=flat-square&logo=jetpackcompose)\n![API](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAPI-24%2B-green?style=flat-square&logo=android)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow?style=flat-square)\n![Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FVersion-1.1.4-brightgreen?style=flat-square)\n\n**Metro Design · GPU 零重组动画 · 无缝播放 · 多语言 · 无损音质**\n\n纯 Kotlin\u002FJetpack Compose 构建 · Media3 播放引擎 · eapi 加密直连\n\n[后端 CLI 工具](https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002F163CMAnalyser) (Rust) · [问题反馈](https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002FNcrust\u002Fissues)\n\n\u003C\u002Fdiv>\n\n> **⚠️ 重要声明**\n>\n> 本项目仅供学习交流使用，请勿用于任何违法违规用途。\n>\n> 使用本工具产生的一切后果由用户自行承担。\n>\n> 请尊重版权，支持正版音乐。\n\n---\n\n## ✨ 功能特性\n\n### 🎵 核心功能\n\n- **🏠 首页发现**：新歌速递、推荐歌单、日推歌曲，懒加载分页\n- **🔍 多维度搜索**：单曲 \u002F 专辑 \u002F 艺人搜索，500ms 防抖，三标签 Tab 切换\n- **📚 本地曲库**：单曲封面墙（两列网格）、专辑自动派生（按 albumId 去重）\n- **🎧 无损播放**：eapi 加密获取 FLAC 无损流，完整音质降级链\n- **🎭 全屏播放器**：三层图层架构，拖拽手势（25% 阈值吸附），迷你栏\u002F全屏流畅切换\n- **🎼 歌词显示**：LRC 逐行解析，上黄金分割点自动定位，手动滚动 5 秒后恢复，上下渐变融入\n- **⏯️ 播放队列**：插播\u002F追加\u002F移除\u002F点击切歌，三种模式（列表循环\u002F单曲循环\u002F随机），持久化存储\n- **🔔 系统媒体控制**：MediaSessionService + MediaStyle 通知，锁屏\u002F控制中心控件，封面主色调提取，实时进度条\n- **🔤 音频焦点管理**：ExoPlayer 自动处理，多 App 互不干扰\n- **🔐 登录系统**：WebView 浏览器登录 + 手动粘贴 Cookie 降级方案，SharedPreferences 持久化\n- **💾 状态持久化**：进程被杀后自动恢复播放进度、歌曲信息、封面、歌词、播放队列\n- **📱 多屏幕适配**：21:9 基线，宽屏设备 360dp 居中限制，保持窄屏视觉比例\n- **🎨 关于页面**：内建 Markdown 渲染器，项目信息完整展示\n- **🖼️ 自定义图标**：绿色唱片风格 Adaptive Icon\n- **🎨 主题色系统**：6 种预设（云杉 \u002F 钴蓝 \u002F 绯红 \u002F 琥珀 \u002F 堇紫 \u002F 素白），运行时切换，持久化\n- **🌐 多语言**：13 种语言运行时切换，不依赖系统 locale——简中 \u002F 繁中 \u002F English \u002F British English \u002F 日本語 \u002F 조선어 \u002F Deutsch \u002F Русский \u002F Советский русский \u002F Ελληνικά \u002F Lingua Latina \u002F Ænglisc \u002F Middle English\n- **⚡ 无缝播放**：gapless 模式下提前预加载下一首 URL，切歌即播；TTL 5 分钟缓存，手动切歌命中缓存时零等待\n- **📶 分网络音质**：Wi-Fi \u002F 移动数据独立偏好，默认无损 \u002F 较好；全屏播放页实时显示当前音质标签\n\n### 🎼 支持音质\n\n| 参数 | 说明 | 要求 |\n|------|------|------|\n| `standard` | 标准音质 (128kbps) | 普通账号 |\n| `exhigh` | 极高音质 (320kbps) | 普通账号 |\n| `lossless` | 无损音质 (FLAC) | 黑胶 VIP |\n| `hires` | Hi-Res 音质 | 黑胶 VIP |\n| `jymaster` | 超清母带 | 黑胶 SVIP |\n\n---\n\n## 📱 使用说明\n\n### 推荐的自动登录\n打开 Ncrust → 用户页面 → 头像 → 浏览器登录\n\n### 获取 Cookie（手动登录）\n\n1. 登录 [网易云音乐网页版](https:\u002F\u002Fmusic.163.com)\n2. 按 `F12` → `Application` → `Cookies` → `music.163.com`\n3. 找到 `MUSIC_U` 和 `__csrf` 字段，或直接复制完整 Cookie 字符串\n4. 打开 Ncrust → 用户页面 → 粘贴 Cookie → 保存\n\n### 安装 APK\n\n从 [Releases](https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002FNcrust\u002Freleases) 下载最新 `Ncrust-v1.1.4.apk`，允许\"未知来源\"安装。\n\n---\n\n## 🛠️ 技术架构\n\n```\napp\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Ftakahashirinta\u002Fncrust\u002F\n├── MainActivity.kt              # 主入口，顶层导航与状态协调\n├── auth\u002F\n│   └── CookieManager.kt         # Cookie 存储（SharedPreferences）\n├── crypto\u002F\n│   └── EapiCrypto.kt            # eapi 加密（AES-128-ECB）\n├── library\u002F\n│   └── LibraryManager.kt        # 本地曲库管理\n├── lyric\u002F\n│   └── LrcParser.kt             # LRC 歌词解析\n├── network\u002F\n│   ├── NcmApi.kt                # Retrofit API 接口\n│   ├── PlaylistApi.kt           # 歌单\u002F艺人 eapi 端点\n│   ├── RetrofitClient.kt        # OkHttp 客户端\n│   └── SearchResponse.kt        # 搜索响应模型\n├── player\u002F\n│   ├── PlaybackService.kt       # MediaSessionService 媒体服务\n│   ├── PlaybackStateManager.kt  # 播放状态与队列持久化\n│   └── SongUrlFetcher.kt        # 歌曲 URL 获取\n└── ui\u002F\n    ├── ResponsiveContent.kt     # 多屏幕适配组件\n    ├── theme\u002F\n    │   └── MarkdownText.kt      # 简易 Markdown 渲染器\n    ├── screen\u002F\n    │   ├── AboutScreen.kt       # 关于页面\n    │   ├── AlbumDetailScreen.kt # 专辑详情\n    │   ├── ArtistDetailScreen.kt# 艺人详情\n    │   ├── HomeScreen.kt        # 首页（新歌\u002F推荐\u002F日推）\n    │   ├── LibraryScreen.kt     # 本地曲库\n    │   ├── PlaylistDetailScreen.kt # 歌单详情\n    │   ├── SongDetailScreen.kt  # 歌曲详情\n    │   └── SplashScreen.kt      # 启动屏（JIT 预热 + 渐隐）\n    └── viewmodel\u002F\n        ├── PlayerViewModel.kt   # 播放状态管理\n        └── SearchViewModel.kt   # 搜索状态管理\n```\n\n### 核心设计决策\n\n| 决策 | 说明 |\n|------|------|\n| 三层图层架构 | 主页面 → 卡片层 → 导航栏，视觉与触摸独立 |\n| GPU 零重组动画 | `graphicsLayer` 替代 `animateFloatAsState`，组件常驻不销毁 |\n| 单 Animatable 驱动 | `progress` 0→1 控制所有播放器动画状态 |\n| Metro Design | 直角切割，纯色细线进度条，信息优先，拒绝装饰 |\n| 专辑派生 | 由本地单曲按 `albumId` 去重，非独立实体 |\n| 懒加载分页 | 新歌速递每批 10 首，日推 5 行 × N 列横向滑动 |\n| SharedPreferences + Gson | 本地存储，无数据库依赖 |\n\n---\n\n## 📋 版本历史\n\n| 版本 | 日期 | 主要内容 |\n|------|------|---------|\n| v0.1.0-beta | 4 月 26 日 | 初始 MVP，核心播放流程跑通 |\n| v1.0.0 | 4 月 29 日 | 首个正式版：多屏幕适配、状态持久化、队列管理 |\n| v1.0.1 | 5 月 4 日 | 性能优化（零重组修复）、主题色系统、多语言框架、导航兼容性修复 |\n| v1.0.2 | 5 月 4 日 | 紧急修复：歌单页闪退（Issue #11）、WebView 小屏登录 |\n| v1.1.4 | 5 月 17 日 | 无缝播放元数据同步修复、URL 缓存去重、多语言扩充至 13 种 |\n\n---\n\n## 📋 版本 1.1.4 功能状态\n\n### ✅ 已完成\n\n| 功能 | 状态 |\n|------|:--:|\n| 首页（新歌速递\u002F推荐歌单\u002F日推） | ✅ |\n| 单曲\u002F专辑\u002F艺人搜索 | ✅ |\n| 本地曲库（单曲+专辑派生） | ✅ |\n| 全屏播放卡片（拖拽手势\u002F迷你栏切换） | ✅ |\n| 播放队列（插播\u002F追加\u002F移除\u002F持久化） | ✅ |\n| 三种播放模式（列表\u002F单曲\u002F随机） | ✅ |\n| 歌词滚动显示（黄金分割点定位） | ✅ |\n| 进度条拖拽跳转 | ✅ |\n| 系统媒体控制（通知栏\u002F锁屏\u002F控制中心） | ✅ |\n| 音频焦点管理 | ✅ |\n| Cookie 管理（WebView 登录 + 手动降级） | ✅ |\n| 进程被杀后状态恢复（含队列） | ✅ |\n| 多屏幕比例适配（16:9～21:9） | ✅ |\n| 关于页面（Markdown 渲染） | ✅ |\n| 应用图标（绿色唱片 Adaptive Icon） | ✅ |\n| Splash Screen 渐隐 + JIT 预热 | ✅ |\n| 竖屏锁定 | ✅ |\n| 库页面单曲操作（插播\u002F加队列） | ✅ |\n| 主题色系统（6 种预设，持久化） | ✅ |\n| 多语言系统（13 种，运行时切换） | ✅ |\n| 无缝播放（gapless + URL 缓存去重） | ✅ |\n| 分网络音质设置（Wi-Fi \u002F 移动数据） | ✅ |\n\n### ⏳ 待完成\n\n| 功能 | 优先级 |\n|------|:--:|\n| 艺人热门单曲（真实排行而非搜索过滤） | ⭐⭐⭐ |\n| 专辑\u002F艺人搜索独立页面 | ⭐⭐⭐ |\n| 歌单创建\u002F编辑 | ⭐⭐ |\n| 本地封面图片缓存 | ⭐⭐ |\n| Release 签名打包 | ⭐ |\n\n### 🐛 已知问题\n\n| 问题 | 状态 |\n|------|:--:|\n| 艺人热门单曲为搜索过滤结果，非真正热门 | 🔧 |\n| WebView Cookie 提取偶有失败 | ⚠️ |\n| 日推接口使用 eapi 替代 weapi，长期可能失效 | ⚠️ |\n| Coil 封面缓存策略待优化（偶有模糊） | ⚠️ |\n| 4GB RAM 设备进程易被杀（已通过状态持久化缓解） | ⚠️ |\n| `attributionTag` 系统日志警告（不影响功能） | ⚠️ |\n| gapless 未及时预加载时（短歌\u002F提前跳歌）等待 URL fetch | ⚠️ |\n\n---\n\n## 📦 编译\n\n### 环境要求\n- Android Studio Hedgehog+\n- Kotlin 1.9+\n- Gradle 8.x\n- Android SDK 24+\n\n### 步骤\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002FNcrust.git\ncd Ncrust\n.\u002Fgradlew assembleDebug\n# APK 位于 app\u002Fbuild\u002Foutputs\u002Fapk\u002Fdebug\u002Fapp-debug.apk\n```\n\n---\n\n## 🔗 相关项目\n\n| 项目 | 说明 |\n|------|------|\n| [163CMAnalyser](https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002F163CMAnalyser) | Rust CLI 无损下载工具，本项目的 API 参考 |\n| [Netease_url](https:\u002F\u002Fgithub.com\u002FSuxiaoqinx\u002FNetease_url) | Python 原版网易云解析（MIT） |\n\n---\n\n## 📜 白茶\n\n我做 Ncrust 的时候，脑子里想的不是代码，不是架构，不是用户增长。\n\n我想的是白茶。\n\n清水什么也没有，太淡。\n糖水太热烈，甜得发腻。\n\n白茶不一样。\n它有味道，但温和。\n它不吵，你需要安静下来，才能品到它的回甘。\n\nNcrust 就是白茶。\n直角是白茶，原生是白茶，无下载是白茶。\n不讨好，但有立场。\n不炫耀，但有质感。\n\n如果你习惯了糖水，Ncrust 可能不适合你。\n但如果你想试试白茶——我泡好了。\n\n---\n\n## 📄 许可证\n\n```\nMIT License\n\nCopyright (c) 2026 Takahashi_Rinta\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and\u002For sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n```\n\n---\n\n## ⭐ 支持项目\n\n若此工具对你有用，请赐一颗 **Star** ⭐\n\n有问题或建议，欢迎提交 [Issue](https:\u002F\u002Fgithub.com\u002FGuitaristRin\u002FNcrust\u002Fissues)。\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=GuitaristRin%2FNcrust&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=GuitaristRin\u002FNcrust&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=GuitaristRin\u002FNcrust&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=GuitaristRin\u002FNcrust&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n","Ncrust 是一款基于 Jetpack Compose 与 Material 3 设计的网易云音乐第三方 Android 客户端，支持无损音频播放、歌词滚动、本地曲库管理、系统媒体控制及多模式播放队列。其核心功能包括首页发现、多维度搜索、本地曲库管理和无损音质播放等，采用 Kotlin 和 Jetpack Compose 构建，并使用 Media3 作为播放引擎。Ncrust 适合对音乐播放体验有较高要求的用户，特别是喜欢自定义播放界面和享受无缝播放体验的用户。此外，它还支持多种语言和主题色切换，适应不同用户的个性化需求。","2026-06-11 03:56:10","CREATED_QUERY"]