依据 docs/项目工程改进方案.md 实施(第五梯队 CI/协作除外)。
安全性
- Release 剥离 Log.v/d/i/w(-assumenosideeffects),保留 Log.e
- 全量频道/成员 dump、消息正文、发送者 UID 改为 BuildConfig.DEBUG 保护
(实测 release dex 中 "Channel: id=" / "Client: id=" / selfId= 等均为 0 命中)
构建产物体积
- .gitignore 补 *.a(保留 .opus/lib 四个 ABI 预编译库)、.opus/install、
app/libs/*.aar、dnn/torch
- git rm --cached 除名 AAR、.gradle、.opus/{build,install}、dnn/torch
跟踪体积 50MB → 17.4MB,工作区文件不受影响
跨语言契约(本方案核心)
- 新增 go/teamspeak/contract.go:字段名常量 + BridgeContractVersion 单一事实来源
- 新增契约测试:反射断言常量与 struct tag 一致;Go/Kotlin 共用 golden 样本
- 新增 BridgeContract.kt:启动校验 AAR 契约版本,不匹配则阻止连接
- 修正文档:channel_order 是前驱频道 ID(链表指针)而非排序权重,
按它数值排序会打乱频道树;ChannelInfo.order 在 Go 侧不存在
状态模型
- ConnectionState 增 Idle 取代 null 编码,connectionState 不再可空
- applyClients 改为按频道差分更新,避免全量刷新导致频道树整体重组
- 频道数据 freshness 统一由 Repository 维护,修复 ViewModel 与 Repository
两份时间戳不同步导致的重复刷新
UI
- 修复 collectAsState() 在参数位置调用导致的 isSelf 快照失效
- 消除 9 处 !! 断言(ChannelListScreen)
- 硬编码 24.5/14.5dp 与 depth*24 收敛到 UiTokens.Spacing,缩进加 4 层上限
测试
- Kotlin 测试 7 → 106;Go 契约测试新增 24 个用例
- 各覆盖 InputValidator、消息送达确认、僵尸会话过滤、频道差分、
频道顺序语义、错误分类
其他修复
- classifyError 提取为纯函数并补测试;修复 too many clones (id=521)
未识别导致英文原文直接暴露给用户
版本号提升至 1.0.13(versionCode 13)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
119 lines
3.2 KiB
Plaintext
119 lines
3.2 KiB
Plaintext
# ============================================================
|
|
# Build artifacts
|
|
# ============================================================
|
|
android/.gradle/
|
|
android/app/.cxx/
|
|
android/app/build/
|
|
android/.kotlin/
|
|
android/build/
|
|
android/*/build/
|
|
go/teamspeak/.opus/build/
|
|
go/teamspeak/.opus/install/
|
|
release/
|
|
*.apk
|
|
*.aab
|
|
|
|
# gomobile 产物:由 build.bat / build.sh 第 1 步现场生成,不入库
|
|
android/app/libs/*.aar
|
|
|
|
# opus 的 PyTorch DNN 训练资源(含 5.3MB training_files.txt)。
|
|
# 仅用于 LPCNet/DRED 模型训练,CMake 从不引用(dnn/*.c 只在 OPUS_DRED/OSCE/
|
|
# DEEP_PLC 开启时编译,本项目的 build-opus-android 三个开关全关),
|
|
# Android 构建完全用不到,历史入库纯属冗余。
|
|
android/app/src/main/cpp/third_party/opus/dnn/torch/
|
|
|
|
# ============================================================
|
|
# Android
|
|
# ============================================================
|
|
android/local.properties
|
|
android/gradle/gradle-daemon-jvm.properties
|
|
*.iml
|
|
|
|
# ============================================================
|
|
# IDE — workspace/state files (local only)
|
|
# ============================================================
|
|
.idea/workspace.xml
|
|
.idea/tasks.xml
|
|
.idea/shelf/
|
|
.idea/caches/
|
|
.idea/modules/
|
|
.idea/libraries/
|
|
android/.idea/workspace.xml
|
|
android/.idea/tasks.xml
|
|
android/.idea/shelf/
|
|
android/.idea/caches/
|
|
android/.idea/modules/
|
|
android/.idea/libraries/
|
|
|
|
# ============================================================
|
|
# Kotlin / Java
|
|
# ============================================================
|
|
*.class
|
|
*.jar
|
|
*.war
|
|
*.nar
|
|
*.ear
|
|
|
|
# ============================================================
|
|
# Go
|
|
# ============================================================
|
|
*.exe
|
|
*.exe~
|
|
*.dll
|
|
*.so
|
|
*.dylib
|
|
*.test
|
|
*.out
|
|
go.work
|
|
|
|
# 静态库默认忽略(.opus/install 与 .opus/build 下的 libopus.a 是中间产物)。
|
|
# 例外:.opus/lib 下的四个 ABI 预编译库是**有意入库**的,
|
|
# 用于免去每次克隆后的 opus 交叉编译,见 CLAUDE.md。
|
|
*.a
|
|
!go/teamspeak/.opus/lib/**/*.a
|
|
|
|
# ============================================================
|
|
# Archives
|
|
# ============================================================
|
|
*.zip
|
|
*.tar.gz
|
|
*.rar
|
|
|
|
# ============================================================
|
|
# Logs & crash dumps
|
|
# ============================================================
|
|
*.log
|
|
hs_err_pid*
|
|
replay_pid*
|
|
|
|
# ============================================================
|
|
# OS files
|
|
# ============================================================
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# ============================================================
|
|
# Sensitive — DO NOT COMMIT
|
|
# ============================================================
|
|
keystore/
|
|
*.jks
|
|
*.keystore
|
|
|
|
# ============================================================
|
|
# Reference SDK (not project source)
|
|
# ============================================================
|
|
docs/teamspeak-sdk-3.5.2/
|
|
|
|
# ============================================================
|
|
# Session / tool files
|
|
# ============================================================
|
|
.ai/
|
|
.claude/
|
|
memory/
|
|
plan/
|
|
|
|
# ============================================================
|
|
# Misc
|
|
# ============================================================
|
|
test.txt
|