Files
maidong-ktv/app/build.gradle
T
zijunchiang 4c22826ea1 V1.3.4: 新增音频均衡器(参考 OpenEQ) + 随机续播改为伪随机公放清单
1) 音频均衡器
   - 新增 KtvEqualizer:参考开源项目 OpenEQ(Turbofan3360/OpenEQ, GPL-3.0) 的 EQUtils,
     直接用系统 android.media.audiofx.Equalizer, 按设备真实频段数与增益范围自适应
     (频段动态生成, 频段标签规则同 OpenEQ: 60/230/910/3.6K ...)。
   - 挂载方式改为按"实际播放会话": player.audioSessionId() /
     vocalPlayer.audioSessionId / embeddedVocalEngine.audioSessionId()(IJK 原生
     IjkMediaPlayer_getAudioSessionId 即真实 AudioTrack 会话)。会话随歌曲变化,
     由 500ms lyricTicker -> syncEqualizerSessions() 周期对齐, 消失会话延迟 3s 释放;
     设备不支持按会话挂载时可显式开启 globalMix(会话 0, 默认关闭)。
   - UI(showEqualizerDialog)与调音弹窗同风格: 深色圆角面板/紫色频段卡/橙色焦点反馈;
     滑杆固定 30 档、步进由设备增益范围均分(保证 0 dB 可选中), 5 个预设
     标准/流行/抒情/摇滚/唱将, 手动调整后转"自定义"。
   - 四个入口: 主页顶栏「调音」弹窗、播放界面「调音」面板、声音设置「均衡器入口」、
     远程点歌页面「均衡器」卡片(PATCH /api/v1/player/equalizer, 状态随
     GET /api/v1/state 的 equalizer 下发)。
   - 设置持久化: KtvStore.eqEnabled/eqPreset/eqLevels/eqGlobalMix。

2) 随机续播改为伪随机公放清单
   - 新增 RandomPlayQueue(纯内存): 随机续播一次性生成打乱顺序的临时清单, 一轮内不重复;
     播完一首 markFinished +1; next() 每次重新比对曲库, 自动吸纳新增歌曲、剔除已删除歌曲;
     一轮播完自动开新一轮(尽量不把刚播完的放开头)。
   - 不显示(界面不展示)、不关联已点清单(orderQueue 完全独立, 随机歌曲不入队)、
     App 退出即清理(onDestroy 里 isFinishing 时 clear(), 不落盘)。

版本号 1.3.3 -> 1.3.4(versionCode 9 -> 10)。按约定本次不发布 Release, 仅本地打包测试。
2026-09-20 12:02:07 +08:00

96 lines
2.9 KiB
Groovy

plugins {
id "com.android.application"
id "org.jetbrains.kotlin.android"
}
android {
namespace "com.local.ktv"
compileSdk 35
defaultConfig {
applicationId "com.local.ktv"
minSdk 21
targetSdk 25
versionCode 10
versionName "1.3.4"
ndk {
// 双 ABI 打包:兼容 64 位(Exynos 1580 等 arm64-v8a)与 32 位设备(极米 Play 超越版
// 的 Amlogic 950X2/S905X2 采用 32 位 Android 用户态,必须包含 armeabi-v7a,否则
// 会出现 INSTALL_FAILED_NO_MATCHING_ABIS 安装失败)。
// Package each ABI's complete IJK set; never mix individual SOs across the two sets.
abiFilters "armeabi-v7a", "arm64-v8a"
}
// 曲库已改为官方 Muse 同步(database_publish 不再发布到 Gitee),
// 不再需要 GITEE_DATABASE_* 构建参数。
}
// 签名配置:使用已有的 ktv_keystore.jks
signingConfigs {
release {
storeFile file("../../ktv_keystore.jks")
storePassword "123456"
keyAlias "ktv"
keyPassword "123456"
}
}
buildTypes {
release {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
applicationIdSuffix ".qa"
}
}
// 支持 .ts 视频文件(aapt 不压缩这些文件以避免 SoundPool/MediaPlayer 问题)
androidResources {
noCompress 'ts', 'mp3', 'mp4', 'aac', 'm4a', 'flac', 'wav'
}
// 关闭发布构建的 lint vital 检查(本地分发的 APK 不需要 Google Play 上架要求)
lint {
checkReleaseBuilds false
abortOnError false
}
// 启用 BuildConfig 生成,供 AboutFragment 读取版本号/版本Code等信息
buildFeatures {
buildConfig = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
// 强制统一 Kotlin 标准库版本,避免 appcompat 与其他依赖的版本冲突
configurations.all {
resolutionStrategy {
force "org.jetbrains.kotlin:kotlin-stdlib:1.8.22"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22"
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22"
force "org.jetbrains.kotlin:kotlin-stdlib-common:1.8.22"
}
}
dependencies {
implementation files('libs/original-ijk-runtime.jar')
implementation "androidx.core:core:1.12.0"
implementation "androidx.appcompat:appcompat:1.6.1"
implementation "com.google.zxing:core:3.5.3"
implementation "com.liulishuo.okdownload:okdownload:1.0.7"
testImplementation "junit:junit:4.13.2"
}