80 lines
4.2 KiB
Markdown
80 lines
4.2 KiB
Markdown
# LoveLive Music Player — KMP + Compose Multiplatform
|
||
|
||
与 Flutter 仓库 `LoveLiveMusicPlayerMobile` **并列**。UI 使用 Compose Multiplatform(Android / iOS 一致);PC 仍为 Electron,本仓库提供协议客户端与共享模型。
|
||
|
||
包名:`top.zhushenwudi.llmp`
|
||
|
||
## Maven / Nexus
|
||
|
||
`settings.gradle.kts` 已对齐 Flutter `android/nexus_repos.gradle`:
|
||
|
||
- 探测 `http://192.168.123.100:18081/service/rest/v1/status`(2s)
|
||
- 可达 → `maven-public` / `google` / `mob` / `gradle`(插件) / `jitpack`
|
||
- 不可达 → 公网 `google()` / `mavenCentral()` / `gradlePluginPortal()` 等
|
||
- 强制:`-PuseNexus=true|false`
|
||
|
||
## 模块
|
||
|
||
| 模块 | 职责 |
|
||
|------|------|
|
||
| `:shared` | 协议、模型、SQLDelight、OSS、歌词、传歌/同步、Player、Settings、FileSystem、PlatformServices |
|
||
| `:composeApp` | CMP UI + Android 原生(Glance Widget、LyricService、扫码、WebView) |
|
||
| `iosApp/` | Xcode 脚手架(CarPlay / PiP / WidgetKit),需 macOS 签名链接 |
|
||
|
||
## 构建(Windows)
|
||
|
||
```bash
|
||
./gradlew.bat :shared:testDebugUnitTest
|
||
./gradlew.bat :composeApp:assembleDebug
|
||
./gradlew.bat :composeApp:installDebug
|
||
```
|
||
|
||
Debug APK:`composeApp/build/outputs/apk/debug/composeApp-debug.apk`
|
||
|
||
## 原生功能矩阵
|
||
|
||
| 功能 | Android | iOS | 状态 |
|
||
|------|---------|-----|------|
|
||
| 播放引擎 | ExoPlayer(单实例 + MediaSession) | AVPlayer + MPNowPlaying / RemoteCommand | **done** |
|
||
| `FileSystem.writeBytes` | 完整 | NSData 原子写入 | **done** |
|
||
| 桌面歌词 | `LyricService` 悬浮窗 + 设置开关 | PiP(`iosApp/pip/*`,Swift) | **done**(iOS 需 Mac 链 framework) |
|
||
| Home Widget | Glance 四样式 + `HomeWidgetPreferences` | WidgetKit White/Black(`iosApp/WidgetExtension`) | **done**(iOS 需 Xcode target) |
|
||
| CarPlay | 目录模型 `CarPlayCatalog`(common) | `CarPlaySceneDelegate` Tab Music/Album/Mine | **sources done**;真机需 Apple **carplay-audio** entitlement |
|
||
| 深链 `llmp://` | Manifest + `DeepLinkHandler` | SceneDelegate + App Group | **done** |
|
||
| USB 挂载监听 | Broadcast + `UsbMountMonitor` | N/A(NoOp) | **done**(Android) |
|
||
| 系统分享 | `ACTION_SEND` | UIActivity / Notification → Swift | **done**(最低系统分享) |
|
||
| QR 扫码 | ZXing embedded `QrScanActivity` | IP 粘贴(相机可在 Swift 补) | **done**(Android 真扫) |
|
||
| 萌娘百科 / 立绘 | `WebViewActivity` + assets/tachie | `openURL` / Safari | **done** |
|
||
| 友盟 | `UmengBridge` 反射(key `634bd9c688ccdf4b7e4ac67b`) | 需在 Swift 初始化 iOS key | **done**(Android 反射;SDK 可选) |
|
||
| PlatformServices | MainActivity `installAndroidPlatformServices` | `installIosPlatformServices` | **done**(非 NoOp 默认) |
|
||
|
||
### 仍需 macOS / Apple 开发者完成的项
|
||
|
||
1. **Xcode 工程**:创建 App + Widget Extension,链接 `ComposeApp.framework`(`./gradlew :composeApp:linkDebugFrameworkIosSimulatorArm64`)
|
||
2. **签名 / App Group**:`group.top.zhushenwudi.llmp`(已从 Flutter `group.com.zhushenwudi.lovelivemusicplayer` 迁移;见 `iosApp/README.md`)
|
||
3. **CarPlay entitlement**:`com.apple.developer.carplay-audio` + `playable-content` 需 Apple 审批后真机可用
|
||
4. **PiP 资源**:`black.mp4`(Flutter 仓库若缺失需自行放入 `iosApp/iosApp/pip/`)
|
||
5. **Swift ↔ Kotlin 播放回调**:Widget/CarPlay 的 NotificationCenter 事件需在 Mac 上接到 `AppContainer.player`
|
||
|
||
## 已实现业务(相对骨架)
|
||
|
||
1. OSS 元数据入库、曲库 6 Tab、播放队列、滚动歌词、Love/歌单/History
|
||
2. WiFi 传歌 / 数据同步、驾驶模式、SD/USB、设置、每日推送
|
||
3. 桌面歌词 / Widget / 扫码 / WebView / 分享 / 深链 / 友盟桥
|
||
4. `FeatureModuleIndex` 模块清单(日志页)
|
||
|
||
## 对照
|
||
|
||
| 主题 | Flutter | 本仓库 |
|
||
|------|---------|--------|
|
||
| Nexus | `android/nexus_repos.gradle` | `settings.gradle.kts` |
|
||
| 常量 | `lib/global/const.dart` | `Const.kt` |
|
||
| 入库 | `global_db.dart` | `DataImportService` |
|
||
| 协议 | Docs `03` | `protocol/*` + `transfer/*` |
|
||
| 歌词 | `global_lyric.dart` | `lyric/*` + `native/LyricService` |
|
||
| Widget SP | `HomeWidgetPreferences` | 同名键 |
|
||
| CarPlay | `lib/pages/carplay/*` | `CarPlayCatalog` + Swift Scene |
|
||
| UI | GetX | `composeApp` CMP |
|
||
|
||
文档:`E:\LoveLiveMusicPlayer-Docs\`
|