91
0
0

PiliPala音乐(1n34.top首发)

2026-08-29
2026-09-26

为了使bilibili变成一款纯音乐软件故制作了PiliPala音乐

使用:

https://trae.cn

制作并编译安装包,额度用尽后

https://dumate.cn

接盘修改网页与README.md

下载链接:

https://pan.1n34.top/ilanzou/1n34/code/pilipala-installers-v1.4

(提示:ios需自签)

源码链接:

https://pan.1n34.top/ilanzou/1n34/code/pilipala-all-src-v1.4.zip

介绍站:https://www.dumate.cn/artifacts/pilipala_single

纯开源,没有开源协议,转载不需要保留作者,但修改后必须删除作者,且不能商用

侵删 联系user_1n34@yeah.net

README.md

# PiliPala 音乐(噼里啪啦)

> 当前版本:**v1.4**

一款基于 WebView 的 iOS / Android 双平台第三方音乐播放客户端,采用 Hybrid 应用架构,以"听音乐"为核心场景重新组织 bilibili 内容。桌面显示名为**噼里啪啦**。

> 本应用为非官方第三方工具,仅用于个人学习与技术交流,与哔哩哔哩(bilibili)官方无任何关联。所有内容版权均归 bilibili 及原作者所有。

🌐 应用介绍站:[pilipala.1n34.top](https://pilipala.1n34.top)

👤 作者:[1n34](https://1n34.top)

✉️ 联系方式:user_1n34@yeah.net

## 功能特点

- 发行商聚合:预设万代南梦宫、索尼音乐、环球音乐、华纳音乐、Avex、波丽佳音等主流音乐发行商,支持自定义添加

- 音乐版块:从发行商投稿中过滤音乐分区内容,自动获取封面、时长、播放量等信息

- 单页加载 + 继续加载:发行商投稿与搜索结果均为单页加载,列表底部提供「继续加载」按钮按需翻页,告别一次性拉取大量数据带来的卡顿

- 后台播放:通过隐藏 WebView 静默播放视频并取音频,支持后台续播、暂停、跳转

- 后台播放通知:iOS 通过 MPNowPlayingInfoCenter 在锁屏与控制中心显示标题、作者与封面;Android 通过 NotificationCompat 显示相同信息

- 全屏播放器:深色毛玻璃背景、封面、标题、进度条、上一首/下一首、单曲循环、分 P 列表;切换歌曲时 mini 播放器不再凭空出现;支持下滑 / 侧滑关闭

- MV 视频播放:点击 MV 条目在应用内打开 bilibili html5player,通过 JS 注入 CSS 隐藏网页多余元素,仅保留播放器(含进度条与清晰度选项),全屏沉浸观看

- 搜索能力:支持 UP 主和视频关键词搜索;搜索采用回车触发,避免输入过程中频繁请求;搜索结果可按发行商筛选;筛选无结果时不再显示「继续加载」按钮

- 个人收藏:登录 bilibili 后可将视频一键收藏至"音乐收藏夹"

- 浏览器模式:在应用内浏览 bilibili 页面,顶部返回栏可退出

- 首次启动免责协议:首次开启需阅读并同意免责协议,不同意则退出应用;协议中包含联系方式

- 浅色毛玻璃 UI:所有 Toast 提示、mini 播放器统一采用浅色毛玻璃效果(backdrop-filter: blur(20px) saturate(180%));全屏播放器采用深色毛玻璃背景,与系统视觉一致

- 全局侧滑返回:搜索页、子视图、全屏播放器均支持侧滑手势返回/关闭(大播放器支持下滑与任意位置右滑关闭)

- 平板适配:宽屏自动居中,限定内容列宽,保证大屏体验

- 发行商标题栏紧凑化:发行商主页头部调整为紧凑布局

- 开屏动画:展示"由 bilibili 强力驱动"标语

- 钉钉进步体字体:全局应用「钉钉进步体」开源字体,视觉更统一、更具辨识度

- 跨平台一致体验:iOS / Android 双端 JS 桥接回调格式统一为 { ok, status, text },搜索页样式与发行商选择行为完全一致

## 技术架构

应用采用多 WebView 分层架构:

| 层级 | WebView | 职责 |

| --- | --- | --- |

| UI 层 | uiWebView | 加载本地 HTML,渲染顶部导航、发行商快捷条、歌曲列表、播放器界面 |

| 内容层 | contentWebView | 加载 bilibili 网页(浏览器模式 / MV 模式) |

| 爬虫层 | crawlerWebView | 隐藏离屏,加载 bilibili 页面或 API 提取数据 |

| 播放层 | playerWebView | 隐藏离屏,静默加载视频页播放音频 |

关键设计:

- iOS 通过 WKScriptMessageHandler 实现 JS 与 Native 双向通信;Android 通过 @JavascriptInterface 暴露 NativeBridge 对象,并通过 evaluateJavascript 回调 JS

- 播放器状态采用 Native 轮询方案(每 500ms 查询 <video> 元素状态),避免事件转发不可靠问题;状态变化(playing / paused / ended / timeupdate)去重后通过 __onPlayerEvent 推送给前端,确保进度条与播放按钮在双端一致更新

- 进度条使用三层结构(底层背景、中层填充、顶层透明 input range)实现"已读部分白色实心"效果

- Android 端使用 Foreground Service + 静态引用机制实现后台播放与 UI 层回调;iOS 端通过 AVAudioSessionCategoryPlayback + 后台任务保证后台续播,在 playerWebView 初始化与进入后台时均重新激活会话

- 列表分页:发行商投稿与搜索均为单页加载(每页 30 条),列表底部「继续加载」按钮触发下一页请求;避免一次性爬取 20 页 600 条造成的等待过长与风控触发

- 视图栈版本号:_viewEpoch 在每次 pushView / popView / replaceTopView 时递增,异步加载完成后比对版本号,防止已切换视图被旧数据污染(典型场景:收藏夹未加载完成退出时丢弃结果)

- hasMore 判断:优先根据返回数量是否小于页大小判定为最后一页,再结合 total 字段精确判断,避免 total 不可靠时错误显示「继续加载」

- MV 纯视频展示:进入 MV 模式后,onPageFinished 回调中执行 injectMVCSS,通过 JS 找到 <video> 元素并向上遍历到 body 直接子节点(播放器容器),全屏 fixed 显示该容器,仅隐藏其兄弟元素;保留进度条、清晰度等所有播放器控件

- 后台播放元数据传递:前端 nativePlayAudio 调用时附带 { title, cover, author },原生端接收后下载封面图并更新 MPNowPlayingInfoCenter(iOS)/ NotificationCompat(Android)

## 项目结构

```

.

├── README.md # 项目说明(本文档)

├── pilipala-ios/ # iOS 项目(Theos)

│ ├── Makefile # theos 编译配置

│ ├── PiliPala.ipa # 预编译安装包(arm64,需自签)

│ ├── Payload/ # ipa 携带的 .app 目录

│ │ └── PiliPala.app/

│ │ ├── Info.plist # 应用配置

│ │ ├── PiliPala # 可执行文件

│ │ ├── AppIcon*.png # 应用图标(黑胶唱机 + PiliPala 字样)

│ │ └── Web/ # 前端资源(iOS 内嵌)

│ │ ├── index.html

│ │ ├── style.css

│ │ ├── app.js

│ │ └── DingTalk-JinBuTi.ttf

│ ├── Resources/ # 源码资源(编译时嵌入)

│ │ ├── Info.plist

│ │ ├── AppIcon*.png

│ │ └── Web/ # 前端资源(与 Android 共用)

│ │ ├── index.html

│ │ ├── style.css

│ │ ├── app.js

│ │ └── DingTalk-JinBuTi.ttf

│ └── Sources/

│ ├── AppDelegate.h / .m # 应用生命周期 + AVAudioSession 配置

│ ├── ViewController.h / .m # 主控制器:WebView 管理、JSBridge、播放控制、后台播放、MV 注入

│ └── main.m

├── pilipala-android/ # Android 项目(Gradle)

│ ├── build.gradle # 根项目构建脚本

│ ├── settings.gradle

│ ├── gradle.properties

│ ├── local.properties # 本地 SDK 路径

│ ├── gen_icons.py # 应用图标生成脚本(黑胶唱机)

│ ├── release.keystore # 签名密钥

│ ├── PiliPala-android-debug.apk # Debug 预编译安装包

│ ├── PiliPala-android-v1.4.apk # Release v1.4 安装包(v1+v2+v3 签名)

│ ├── PiliPala-android-v1.4.apk.idsig# apksigner 签名校验文件

│ └── app/

│ ├── build.gradle # 应用模块配置

│ ├── proguard-rules.pro

│ └── src/main/

│ ├── AndroidManifest.xml

│ ├── assets/Web/ # 前端资源(与 iOS 共用)

│ │ ├── index.html

│ │ ├── style.css

│ │ ├── app.js

│ │ └── DingTalk-JinBuTi.ttf

│ ├── java/com/pilipala/music/

│ │ ├── MainActivity.java # 入口、WebView 与桥接初始化、MV 注入、原生对话框

│ │ ├── LoginActivity.java # bilibili 登录页(CookieManager 共享登录态)

│ │ ├── MusicPlaybackService.java # 后台音频 Service(Foreground + 状态轮询 + 通知封面标题)

│ │ └── WebAppInterface.java # JS <-> Native 桥接接口

│ └── res/ # 图标(mipmap-*)、布局、字符串、样式

└── pilipala-single/ # 应用介绍网站(单文件版本)

└── index.html # HTML/CSS/JS/截图全部内联的自包含文件

```

## 环境要求

### iOS

- macOS + [Theos](https://theos.dev) 工具链

- iOS SDK 16.5+(Makefile 中 TARGET := iphone:clang:16.5:14.0)

- 部署目标:iOS 14.0+

- 架构:arm64

- 依赖框架:UIKit / WebKit / Security / CoreGraphics / AVFoundation / MediaPlayer

### Android

- JDK 17

- Android SDK Build-Tools 34.0.0、Platform 34

- Gradle 8.5+

- 最低部署版本:Android 5.0(API 21)

- 目标版本:Android 14(API 34)

## 编译与打包

### iOS

在 pilipala-ios/ 目录执行:

```bash

# 编译

make clean && make

# 手动打包为 ipa

mkdir -p Payload

cp -R .theos/obj/debug/PiliPala.app Payload/PiliPala.app

cd Payload && zip -rq ../PiliPala.ipa PiliPala.app -x "*.DS_Store" && cd ..

```

生成的 PiliPala.ipa 文件位于项目根目录。

iOS 安装方式(需自签):

本应用**不上架 App Store**,需通过以下方式自签安装:

- 越狱设备:使用 Filza 或 Sileo 直接安装

- 非越狱设备:配合开发者证书或免费 Apple ID,通过 Sideloadly / AltStore / TrollStore 等工具自签安装(免费证书每 7 天需重新签名)

### Android

在 pilipala-android/ 目录执行:

```bash

# Debug APK

gradle :app:assembleDebug

# Release APK(需配置签名密钥)

gradle :app:assembleRelease

```

生成的 APK 位于 app/build/outputs/apk/debug/app-debug.apk(或 release/app-release.apk),可直接通过 adb install 或文件管理器安装。

> 沙箱/CI 环境编译提示:仓库的 gradle.properties 已写入代理配置(http.proxyHost=127.0.0.1、http.proxyPort=18080)和 -XX:-UseContainerSupport(规避 Java 17.0.2 在 cgroup v2 下的 NPE bug),普通开发机可移除这两段配置。

#### 签名方案(Android 14 / 定制 ROM 兼容)

Android 14 要求 targetSdk ≥ 34 的应用必须使用 v2+ 签名,但部分定制 ROM(MIUI、EMUI 等)仍要求 v1 签名才能识别为合法安装包。仓库的 minSdkVersion 已设为 21,使 apksigner 默认启用 v1+v2+v3 三重签名,完整命令如下:

```bash

# 1. 移除旧签名

zip -d app-debug.apk "META-INF/*.MF" "META-INF/*.SF" "META-INF/*.RSA"

# 2. ZIP 4 字节对齐(apksigner 要求)

$ANDROID_HOME/build-tools/34.0.0/zipalign -f 4 app-debug.apk app-aligned.apk

# 3. 一次性生成 v1 + v2 + v3 签名

$ANDROID_HOME/build-tools/34.0.0/apksigner sign \

--ks debug.keystore --ks-pass pass:android --ks-key-alias androiddebugkey --key-pass pass:android \

--v1-signing-enabled true --v2-signing-enabled true --v3-signing-enabled true \

--out app-signed.apk app-aligned.apk

# 4. 验证

apksigner verify --verbose app-signed.apk

```

期望输出:Verified using v1 scheme: true / v2 scheme: true / v3 scheme: true,三者全为 true 时才能在 Android 14 及定制 ROM 上同时正常安装。

### 介绍网站

pilipala-single/ 为单文件版介绍网站,无构建步骤,直接在浏览器打开 index.html 或部署至任意静态托管即可。特点:

- 单文件自包含:HTML / CSS / JS 与全部截图均内联(截图以 base64 data URI 嵌入),无任何外部资源依赖

- 提供 iOS(IPA,需自签)与 Android(APK,v1+v2+v3 签名)下载入口,含版本、系统要求、文件大小与签名方式说明

- 含自签安装引导弹窗,说明越狱/非越狱设备的安装方式

### 重新生成应用图标

```bash

cd pilipala-android

python3 gen_icons.py

```

脚本会同时输出 Android app/src/main/res/mipmap-*/ic_launcher*.png 与 iOS pilipala-ios/Resources/AppIcon*.png。图标为粉色渐变背景 + 黑胶唱机 + "PiliPala" 字样。

## 使用说明

1. 首次启动会弹出**免责协议**,需点击"同意"才能进入应用;点击"不同意"将退出应用;协议中包含作者联系方式

2. 同意后协议状态保存在本地,后续启动不再提示;首次启动还会提示登录 bilibili 账号以获得更稳定的播放与搜索体验

3. 启动后默认展示发行商「万代南梦宫音乐」的投稿内容;主页顶部可点击头像登录 bilibili 账号,登录后可使用收藏功能

4. 顶部标题栏右侧的 ⓘ 图标点击可跳转应用介绍页;发行商快捷条点击切换发行商,点击"+"可粘贴 bilibili UP 主主页链接或 uid 添加自定义发行商

5. 点击歌曲项开始播放,底部出现 mini 播放器(浅色毛玻璃);点击 mini 播放器展开全屏播放器

6. 全屏播放器(深色毛玻璃)支持拖动进度条跳转、上一首/下一首、单曲循环、查看分 P 列表;下滑或侧滑可关闭返回 mini 播放器

7. 点击 MV 按钮可在应用内观看 MV 视频(保留进度条与清晰度控件)

8. 搜索框输入关键词后按回车开始搜索;列表拉到底部时点击「继续加载」按钮加载下一页(每页 30 条)

9. 应用进入后台时音乐继续播放(iOS 支持后台续播);iOS 打开应用不再打断系统正在播放的音乐

## 更新日志

### v1.4(2026-09-22)

- 修复 iOS 后台播放:退到后台时设置 __inBackground 标记,播放器 JS 在视频被系统暂停时自动恢复播放(事件监听 + 500ms 轮询双保险)

- 发行商卡片(发行商快捷条、pill 按钮、标题栏、分段控件)统一改用毛玻璃背景 + 低不透明度

- Toast 提示移至 body 层(原在 #app 内受 overflow:hidden 影响导致毛玻璃失效),与 mini 播放器保持一致的毛玻璃通透效果

- 大播放器简介区域增强可见性(字号 13px、颜色提亮、居中对齐)

### v1.3(2026-09-22)

- 修复 iOS 后台无法播放的问题:退到后台时不再暂停视频,保持音频会话活跃,配合 AVAudioSessionCategoryPlayback + audio 后台模式实现后台续播

- 大播放器新增简介展示区域:显示当前歌曲的视频简介,最多 3 行

- mini 播放器与 Toast 提示降低背景不透明度(0.72 → 0.55),视觉更通透

- 发行商歌曲卡片改用毛玻璃背景 + 低不透明度(backdrop-filter: blur(18px)),滑动时更具层次感

### v1.2(2026-09-21)

- 全局启用「钉钉进步体」开源字体,提升视觉统一性与辨识度

- Android 版本号升至 1.2(versionCode 3),iOS 版本号升至 1.2(CFBundleVersion 3)

### v1.1(2026-09-20)

- 修复大播放器切换下一曲时 mini 播放器凭空出现的问题(统一由 _showMiniPlayer 控制显隐)

- 大播放器改用深色毛玻璃背景并调亮,删除原有文字阴影、封面阴影与控件阴影

- 首页不再展示作者提示信息,启动后直接展示发行商「万代南梦宫音乐」的投稿内容

- 标题栏 "PiliPala 音乐" 右侧紧邻新增 ⓘ 图标,点击跳转应用介绍页

- 首次启动提示登录 bilibili 账号以获得更稳定体验;移除"账号已失效"弹窗,改为静默清除登录态

- 全局侧滑返回:搜索页、子视图、全屏播放器均支持侧滑手势(大播放器支持下滑与任意位置右滑关闭)

- 平板适配:宽屏自动居中并限定内容列宽

- 发行商主页标题栏调整为紧凑布局

- 退出应用到后台时音乐自动暂停

- 修复 iOS 打开应用时打断系统正在播放音乐的问题(音频会话延迟到实际播放时才激活)

### v1.0

- 初始版本:双平台 Hybrid 架构、发行商聚合、音乐版块、后台播放、全屏播放器、MV 播放、搜索、个人收藏等核心功能

## 隐私与免责

- 本应用**不收集、不上传**任何用户数据

- 所有内容均来源于 bilibili 公开接口,本应用不存储、不修改、不分发任何音视频内容

- 所有音视频作品著作权归原作者所有

- 本应用仅供个人学习与欣赏使用,严禁用于任何商业用途或二次分发

- 使用本应用产生的一切后果由用户自行承担,开发者不对因使用本应用而导致的任何直接或间接损失负责

## 致谢

- [bilibili](https://www.bilibili.com/) — 内容来源

- [钉钉进步体](https://github.com/阿里巴巴集团/钉钉进步体) — 开源字体

- [Theos](https://theos.dev) — iOS 编译工具链

- [Android Gradle Plugin](https://developer.android.com/studio/build) — Android 构建系统

- [Trae AI](https://trae.cn/) — AI 编程助手

- bilibili 开放接口提供数据支持

## 许可

本项目仅供学习交流使用,不提供任何明示或暗示的担保。请遵守所在国家/地区的法律法规及 bilibili 平台规则。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论

欢迎来到我的博客!