极简音乐 开源声明
第三方组件声明 与 LGPL-2.1 合规声明
「极简音乐」在编译时链接/使用了以下第三方开源组件。本页同时说明 LGPL-2.1 赋予你的权利与对象码/源码的获取方式。完整许可证文本可向开发者索取 (working12.3@126.com)或访问各组件官方仓库。
一、关键组件(涉及原生库或本地补丁)
| 组件 | 版本 | 许可证 | 用途 |
|---|---|---|---|
| libmpv / FFmpeg(安卓) | 经 media_kit_libs_android_audio 1.3.8 | LGPL-2.1 | 安卓端音频解码(WMA/ASF/APE/ALAC/WavPack 等扩展格式)。default flavor,未启用 --enable-gpl |
| libmpv / FFmpeg(iOS 真机) | 经 media_kit_libs_ios_audio 1.1.4 | LGPL-2.1 | iOS 真机端音频解码(同上)。default flavor,真机切片启用 audiounit |
| FFmpeg(鸿蒙自研模块) | 7.1.1(自构建) | LGPL-2.1 | 鸿蒙端 wma/asf 解码(系统 AVPlayer 不支持微软格式)。仅启用 asf demuxer 与 wma 系列解码器,动态 .so,详见下文 LGPL 声明 |
| libsmb2 | v6.1.0(经 dart_smb2 0.1.1 打包) | LGPL-2.1 | SMB2/3 协议访问(安卓/iOS 端文件访问层底层),以预编译二进制分发 |
| dart_smb2 | 0.1.1 | BSD-3-Clause | libsmb2 的 Dart FFI 绑定(SMB 连接/浏览/区间读主实现);其打包的 libsmb2 原生库为 LGPL,单列于上 |
| media_kit | 1.2.6 | MIT | libmpv 的 Dart 绑定。安卓 / iOS 真机启用;iOS 模拟器与鸿蒙不启用 |
| mbedtls(Mbedcrypto / Mbedtls / Mbedx509) | 随 media_kit 构建线 | Apache-2.0 | TLS 加密库,libmpv 的依赖,经 media_kit_libs_ios_audio 1.1.4 的 xcframework 捆绑分发(iOS 端随 IPA 分发的实际二进制,对象码已入库开源交付仓库) |
| just_audio_media_kit | 2.1.0 | Unlicense | 将 media_kit 桥接为 just_audio 后端。安卓 / iOS 真机启用;iOS 模拟器与鸿蒙不启用 |
| smb_connect | 0.0.x(本地补丁) | Apache-2.0 | SMB/CIFS 局域网发现层(LAN 握手确认)。含本地 UNC 路径修复补丁,原始版权及声明保留 |
二、其他依赖(均为宽松许可证)
| 组件 | 许可证 | 用途 |
|---|---|---|
| flutter / flutter_localizations | BSD-3-Clause | UI 框架 |
| flutter_riverpod | MIT | 状态管理 |
| go_router | BSD-3-Clause | 路由 |
| just_audio | MIT | 音频播放抽象 |
| audio_session / audio_service(本地补丁) | MIT | 音频会话 / 后台播放(fork 自定义媒体通知布局) |
| hive_ce | Apache-2.0 | 本地结构化存储 |
| shared_preferences | BSD-3-Clause | 设置项存储 |
| flutter_secure_storage(本地补丁) | Apache-2.0 | SMB 密码加密存储 |
| path_provider / file_picker | BSD-3-Clause / MIT | 文件系统 |
| saf_util / saf_stream | MIT | 安卓 SAF content:// 访问 |
| http | BSD-3-Clause | 网络请求(专辑封面在线检索 / 图片下载) |
| url_launcher | BSD-3-Clause | 打开外部链接(协议网页跳转、mailto) |
| permission_handler | MIT | 运行时权限申请(安卓 POST_NOTIFICATIONS 等) |
| in_app_purchase | BSD-3-Clause | iOS 应用内购买(会员订阅/买断) |
| package_info_plus | BSD-3-Clause | 版本号读取 |
| disk_space_plus | MIT | 磁盘可用空间预检(批量缓存前) |
| reorderables | MIT | 主页专辑网格长按拖拽与重排动画 |
| collection / intl / path | BSD-3-Clause | 基础工具 |
以上清单可能随版本迭代更新,完整且权威的清单以构建时
flutter pub deps为准; 完整许可证文本可向开发者索取,或访问各组件官方仓库。
三、smb_connect 本地补丁声明
本项目以本地补丁版本(vendor/smb_connect)替代 smb_connect 官方发布版。补丁内容:修复
getUncPath 对 share 根目录产生畸形 UNC 路径(\\host\share\\)的缺陷,
该缺陷导致群晖等服务器在枚举 share 根目录时返回 NT_STATUS_INVALID_NAME。
补丁依据 Apache-2.0 第 4 条保留原始版权与声明;修改部分以注释标注。原始仓库:smb_connect(pub.dev)。
四、LGPL-2.1 涉及的库与平台
本部分适用于「极简音乐」安卓端、iOS 真机端与鸿蒙端发布件。本应用在运行时链接以下遵循 LGPL-2.1 的第三方库(均未启用 --enable-gpl / --enable-nonfree,属可再分发的 LGPL 构建):
| 库 | 许可证 | 安卓 | iOS 真机 | 鸿蒙 | 引入方式 |
|---|---|---|---|---|---|
| libmpv(内含 FFmpeg) | LGPL-2.1 | ✅ | ✅ | — | 经 media_kit 预编译库动态链接 |
| FFmpeg(鸿蒙自研模块) | LGPL-2.1 | — | — | ✅ | 自构建 FFmpeg 7.1.1,动态链接 .so |
| libsmb2 | LGPL-2.1 | ✅ | ✅ | — | 经 dart_smb2 打包的预编译二进制,Dart FFI 动态调用 |
平台差异说明:安卓经 media_kit_libs_android_audio 引入 libmpv(动态 .so), libsmb2 经 dart_smb2 jniLibs 引入;iOS 真机切片启用 audiounit 音频输出,libsmb2 经 xcframework 引入;iOS 模拟器受预编译产物限制不使用 libmpv/FFmpeg(改用系统 AVPlayer);鸿蒙不使用 libmpv 与 libsmb2(media_kit 与 dart_smb2 均无 ohos 原生库),为补齐系统 AVPlayer 不支持的 wma/asf,自研 FFmpeg 解码模块:交叉编译 FFmpeg 7.1.1 (aarch64-ohos,--disable-everything 后仅启用 asf demuxer、wmav1/wmav2/wmapro/wmalossless 解码器与 swresample,--disable-network),产出 libavcodec / libavformat / libavutil / libswresample 四个动态库(合计约 1.1MB),经自有 N-API 封装层 libwma.so 动态链接。封装层为 自有代码,不受 LGPL 约束;四个 FFmpeg 库受 LGPL-2.1 约束。
关于商用:libsmb2 以 LGPL-2.1 分发,该许可证不限制商用场景; 上游仓库(sahlberg/libsmb2)无附加协议条款,企业付费商用同样适用,无需额外授权。 FFmpeg 本应用采用 LGPL 构建(未启用 --enable-gpl / --enable-nonfree), 同样允许商用分发。
五、经 FFmpeg 解码的扩展格式
下列格式由 FFmpeg(LGPL-2.1,LGPL 构建)解码:
| 扩展名 | 容器 / 编码 | 支持平台 | 说明 |
|---|---|---|---|
| wma / asf | ASF(Windows Media Audio) | 安卓 / iOS 真机 / 鸿蒙 | 微软容器,FFmpeg 内置 wmav1/wmav2 解码器;鸿蒙模块另启用 wmapro/wmalossless |
| ape | Monkey's Audio 无损 | 安卓 / iOS 真机 | FFmpeg 内置 ape 解码器;移动端解码耗 CPU 较 FLAC 高 |
| alac | 裸 ALAC(Apple Lossless) | 安卓 / iOS 真机 | FFmpeg 内置 alac 解码器;ALAC 在 .m4a 容器内由系统解码器直接支持 |
| wv | WavPack 无损 / 混合 | 安卓 / iOS 真机 | FFmpeg 内置 wavpack 解码器 |
关于 DSD(DSF/DFF):DSD 涉及索尼专利布局,且移动端需 PCM 转码能耗高, 本应用暂不支持该格式。如未来支持,将另行评估专利许可。
六、LGPL-2.1 赋予你的权利
依据 LGPL-2.1 第 6 条,你作为终端用户拥有以下权利:
- 获取对象码与源码:你可以向我们索取上述库对应的对象码(object code) 或完整的可独立编译的源码,以便你能够重新链接并生成等价的可执行文件。
- 替换库:你有权用修改后或不同版本的上述库替换本应用内附带的版本, 前提是你自行确保替换后的库与本应用兼容。
- 逆向工程:为调试上述库的运行行为,LGPL 允许你对应用与库的接口进行逆向工程。
七、如何获取对象码与源码
公开交付仓库(推荐,即时获取,无需申请):各版本对应的 LGPL 库 源码、构建材料与对象码已同步至独立的开源交付仓库,任何第三方均可自由获取与再分发 (遵循各组件原始许可证):
- GitHub(主):github.com/workingGitHub/jijian-oss
- Gitee 镜像(国内可达性保障):暂未开通,后续补充
仓库以「应用版本 ↔ git 标签」索引(如 music-v0.0.6+8),每个标签包含:
- 该版本实际分发的各 LGPL 库对象码(鸿蒙 .so / 安卓 .jar 与 .so /
iOS .xcframework,附
SHA256SUMS校验); - FFmpeg(n7.1.1,鸿蒙构建实际所用源码归档)与 libsmb2(6.1)的完整对应源码快照;
- 鸿蒙模块完整交叉编译脚本(
build-ffmpeg-ohos.sh)、工具链版本记录 (TOOLCHAIN-VERSION.txt)与预编译件上游出处清单 (md5 锁定,含安卓 / iOS media_kit 发行件),三者合用可复现同等二进制; - 本地补丁源码(smb_connect / flutter_secure_storage / audio_service)。
邮箱渠道(兜底):以下材料不适宜公开于仓库,请邮件联系开发者 王珂景:working12.3@126.com,附上你使用的 应用版本号(见「关于 → 关于我们」)、平台(安卓 / iOS / 鸿蒙)与你的诉求。我们将在 3 个工作日内回复确认收到请求,并在收到索取邮件后 30 个工作日内 完成交付:
- iOS / 鸿蒙平台:应用主程序(应用自有代码部分,不含 LGPL 库)对应版本的 目标文件(object files)与完整构建说明,供你重链接替换 LGPL 库后 重新生成等价的可执行文件(见第八节);
- 交付仓库建立之前的更早历史版本对应物料;
- 正式书面交付证明、合规回函等法律文书场景所需的材料。
上述 LGPL 库的上游源码仓库(亦可直接获取):
- libmpv / FFmpeg(iOS / macOS 构建): github.com/media-kit/libmpv-darwin-build(LGPL 构建)
- libmpv / FFmpeg(Android 构建): github.com/media-kit/libmpv-android-audio-build(LGPL 构建)
- FFmpeg 上游源码(鸿蒙模块基于 7.1.1): github.com/FFmpeg/FFmpeg(tag n7.1.1)
- libsmb2 上游源码(安卓 / iOS 打包基于 v6.1.0): github.com/sahlberg/libsmb2
八、关于 iOS 静态链接的说明
iOS 应用受 Apple App Store 代码签名与分发机制限制,最终用户难以在设备上 自行替换已签名的库。这是 LGPL 在 iOS 平台长期存在的已知张力(见 FFmpeg 官方 Trac #1229)。我们通过上述「书面要约 + 公开源码」的方式履行 LGPL-2.1 的义务, 确保任何第三方均可获取源码与对象码。鸿蒙 HAP 分发机制同理,亦以本声明作为书面要约。
需要说明的是:本应用 iOS 端的 FFmpeg(libavcodec / libavformat / libavutil / libswresample)与 libsmb2 均以独立动态 framework(未合并进主程序二进制) 的形式随 IPA 分发,安卓端与鸿蒙端亦全部为动态库(.so)链接——即 LGPL-2.1 第 4 条 所述「共享库机制」,替换库无需重新编译主程序,用户重新签名(如 Xcode 自签、侧载) 后即可自行替换这些库。在此之上,我们仍按第七节额外承诺提供应用主程序目标文件, 作为兜底举证材料。
九、免责
本应用自身的源代码、UI、业务逻辑(即除上述 LGPL 库之外的全部内容,含鸿蒙模块的 N-API 封装层 libwma.so)不适用 LGPL,保留所有权利。LGPL 的义务仅限于上述库本身。