Files
MeowOS-For-R3P2/patch_v2/ncm_app/build_ncm.sh
T
AskaEth ea645ce2a6 feat(ncm): 风控加固——接口响应短 TTL 缓存 + 游客 MUSIC_A + track/all 死代码
三(按 NCMAPI_NOTES §2.1/§4/§6):
① 接口级响应缓存(对齐参考 apicache 2 分钟,防风控高频 ip 错误):
   - 新增 core/ncm_apicache.{c,h}——内存 4 槽 LRU(单槽≤128KB,TTL 120s,
     键=md5(path+\x01+json))+ 可选盘缓存 <data_dir>/ncm_api_cache/.json
     (8B 墙钟头+body,超 TTL miss 并删,30s 节流清过期)。自包含模块
     (仅 libc+pthread+clock_gettime),可独立链接无符号冲突。
   - ncm_api.c:api_post 拆「请求+解析」两段,新增 api_post_cached;四个只读
     接口接线:user_playlist/playlist_detail/song_detail/cloudsearch。
     song_url/lyric/vip 不入缓存。
   - 手动刷新绕过:ncm_api_cache_refresh_path(path) 一次性标记;home/歌单
     topbar ↻ 接入;playlist_open/search 不标记(走缓存)。
   - 盘层挂载 appstate_init;登出 appstate_logout 全清(防串账号)。
② 游客 MUSIC_A:ncm_req.c weapi+eapi 无 MUSIC_U 且非 login 路径补
   MUSIC_A=anonymous_token(对齐参考 cookie 伪装)。
③ track/all 死代码清理:移除 ncm_api_playlist_track_all(真实服务器 8 形态全
   404,无调用点);ncm_api_parse_track_all 保留(离线重放/单测),注释标注
   「已验证不存在,勿用于真实请求」。

验证:新 bench/apicache_sim.c(0 网络)①TTL 内不重复请求/②过期重拉/③手动
刷新绕过/④cloudsearch 按键区分/⑤清空重拉/⑥盘缓存写入+clear 全 PASS;stream/
player_flow/window/search/cache_evict(1-9)/pagination/playlist_race sim 全
PASS;test_ncm_core host+mipsel(qemu) PASS;build_ncm.sh -Wall -Wextra 0
warning(text 1026914/data 1664/bss 1363460);0 高频真实请求。新 ncm md5
a69c93538920eba9d42a2ebb42f8fdca(留主会话上卡)。
2026-09-02 12:48:34 +08:00

50 lines
2.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# build_ncm.sh — 构建 dev.player.ncm(网易云 App,SDK framework=1):链 meow_ui.a + 核心库 + minimp3 + dr_flac + mbedtls。
# 静态 MIPS32r2 (musl sf)。自有代码(app/ + core/)+ core 支撑 vendor 编译;vendor/minimp3/dr_flac/qrcodegen/jsmn 豁免告警。
# 仅改本 App 目录;编译期不改 SDK(patch_v2/sdk/)、不动 meow_launcherd/。mipsel -Wall -Wextra 0 warning。
set -e
cd "$(dirname "$0")"
ROOT="$HOME/Project/R3ProII"
CC="$ROOT/.tools/zig-mipsel-cc"
SYSROOT="$ROOT/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf"
OUT="$PWD/out"
mkdir -p "$OUT/app-mipsel"
INC="-Icore -I../sdk -I../meow_launcherd \
-Ivendor/mbedtls/include -Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/minimp3 -Ivendor/dr_flac"
STRICT="-Wall -Wextra -Os -DJSMN_HEADER"
CORE="core/ncm_common.c core/ncm_json.c core/ncm_store.c core/ncm_http.c \
core/ncm_crypto.c core/ncm_req.c core/ncm_login.c core/ncm_api.c \
core/ncm_cache.c core/ncm_ctx.c core/ncm_apicache.c"
APP="app/app.c app/ui/login.c app/ui/home.c app/ui/playlist.c app/ui/player.c \
app/ui/settings.c app/ui/search.c app/ui/ncm_colors.c app/ui/chrome.c \
app/logic/appstate.c app/logic/lyric.c app/logic/songmeta.c \
app/logic/cover.c app/logic/account.c app/play/player_manager.c app/play/audio_out.c \
app/play/ipc_media.c app/play/decoder.c app/play/stream_src.c app/play/minimp3_impl.c"
echo "==> app+core (strict)"
for f in $APP $CORE; do
b=$(basename "$f" .c)
$CC -static -c $STRICT $INC "$f" -o "$OUT/app-mipsel/$b.o"
done
echo "==> vendor impl (warn-exempt)"
$CC -static -c -Os -I../meow_launcherd -Ivendor/minimp3 app/play/minimp3_impl.c -o "$OUT/app-mipsel/minimp3_impl.o"
$CC -static -c -Os -Ivendor/dr_flac app/play/dr_flac_impl.c -o "$OUT/app-mipsel/dr_flac_impl.o"
$CC -static -c -Os -Ivendor/jsmn core/jsmn_impl.c -o "$OUT/app-mipsel/jsmn_impl.o"
$CC -static -c -Os -Ivendor/qrcodegen/c vendor/qrcodegen/c/qrcodegen.c -o "$OUT/app-mipsel/qrcodegen.o"
echo "==> link"
MIPS_LIBS="$OUT/mbedtls/mipsel/libmbedtls.a $OUT/mbedtls/mipsel/libmbedx509.a $OUT/mbedtls/mipsel/libmbedcrypto.a"
$CC -Os -static -Wl,--gc-sections -o ncm \
$OUT/app-mipsel/*.o \
../sdk/meow_ui.a "$SYSROOT/lib/libz.a" \
$MIPS_LIBS -lpthread -lm
ls -la ncm
file ncm
echo
echo "== size =="
size ncm
echo "(own code -Wall -Wextra: 0 warning enforced above; vendor exempt)"