Files
lumaplayer/app/proguard-rules.pro
beyondandClaude Opus 5 6e5c9fce95 全面安全加固 + UI一致性 + 功能修复 + 性能优化
安全修复:
- usesCleartextTraffic=false + network_security_config.xml (LAN例外)
- 备份规则排除数据库/SP/缓存 (backup_rules.xml, data_extraction_rules.xml)
- ProGuard Release移除 Log.d/Log.v
- EmbyRepository 日志脱敏 + API Key安全注释
- EmbyServer URL长度/主机名/端口验证

UI一致性:
- LumaDesignSystem 新增16个颜色令牌 + LumaBorders + 2个排版令牌
- 6个屏幕文件硬编码颜色统一到LumaColors
- 排版统一 17sp→18sp, 30sp→32sp, 34sp→32sp

功能修复:
- 首页MyMediaGrid点击导航到库列表
- 搜索齿轮图标导航到设置
- FavoritesAllScreen/HomeLibraryAllScreen 添加下拉刷新
- RecordsScreen 13+硬编码中文→stringResource() + 修复count bug
- 新增16个日历字符串(中英文)

性能优化:
- TMDB数据类添加@Immutable注解
- HomeContentCache添加LRU驱逐策略(最多3个快照)
- VideoPlayerScreen内部轮询从250ms降至500ms

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-06 16:43:25 +08:00

72 lines
2.8 KiB
Prolog

# ── Room entities & DAOs (reflection-based by Room) ──
-keep class com.example.myapplication.data.ServerEntity { *; }
-keep class com.example.myapplication.data.FavoriteEntity { *; }
-keep class com.example.myapplication.data.WatchlistEntity { *; }
-keep class com.example.myapplication.data.IconLibraryEntity { *; }
-keep class com.example.myapplication.data.*Dao { *; }
-keep class com.example.myapplication.data.AppDatabase { *; }
# ── Gson / Retrofit (keep serialized field names) ──
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.** { *; }
-keep class retrofit2.** { *; }
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
# ── Keep Emby API models (Gson deserialization) ──
-keep class com.example.myapplication.data.EmbyItem { *; }
-keep class com.example.myapplication.data.EmbyServer { *; }
-keep class com.example.myapplication.data.EmbyPerson { *; }
-keep class com.example.myapplication.data.EmbyMediaStream { *; }
-keep class com.example.myapplication.data.EmbyMediaSource { *; }
-keep class com.example.myapplication.data.EmbyChapter { *; }
-keep class com.example.myapplication.data.EmbyUserData { *; }
-keep class com.example.myapplication.data.EmbyNamedReference { *; }
-keep class com.example.myapplication.data.EmbyAuthRequest { *; }
-keep class com.example.myapplication.data.EmbyAuthResponse { *; }
-keep class com.example.myapplication.data.EmbyUser { *; }
-keep class com.example.myapplication.data.EmbyMediaFoldersResponse { *; }
-keep class com.example.myapplication.data.EmbyMediaFolder { *; }
-keep class com.example.myapplication.data.EmbyItemsResponse { *; }
-keep class com.example.myapplication.data.EmbyPlaybackInfoResponse { *; }
-keep class com.example.myapplication.data.EmbyResourceStats { *; }
# ── OkHttp ──
-dontwarn okhttp3.**
-dontwarn okio.**
-keep class okhttp3.** { *; }
# ── OkHttp Logging Interceptor ──
-dontwarn okhttp3.logging.**
# ── Coil ──
-dontwarn coil.**
# ── Media3 / ExoPlayer ──
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
# ── Kyant Backdrop ──
-keep class com.kyant.backdrop.** { *; }
-dontwarn com.kyant.backdrop.**
# ── Miuix ──
-keep class top.yukonga.miuix.** { *; }
-dontwarn top.yukonga.miuix.**
# ── Palette ──
-keep class androidx.palette.** { *; }
# ── Strip debug/verbose logs in Release builds ──
-assumenosideeffects class android.util.Log {
public static int d(...);
public static int v(...);
}
# Keep error and warning logs for crash reporting
# Log.e and Log.w are intentionally NOT stripped