Skills

Gsy Proguard R8

在启用了 R8 优化 / Full Mode / Configuration Analyzer 的项目里,为 GSYVideoPlayer 配置正确、最小面积的保留规则。

Install

npx skills add CarGuo/GSYVideoPlayer --skill gsy-proguard-r8 -g -a claude-code -y
Repository
CarGuo/GSYVideoPlayer21.5k
Category
Engineering
Updated
25d ago
License
Apache-2.0
Context cost
Lightabout 969 tokens
Runs scripts
No, instructions only

What it does

在启用了 R8 优化 / Full Mode / Configuration Analyzer 的项目里,为 GSYVideoPlayer 配置正确、最小面积的保留规则。

gsy-proguard-r8

三个必须的反射热点

分别在源代码里:

  1. PlayerFactory #L11-L13, , Class.newInstance() 反射构造 IPlayerManager 实现。
  2. CacheFactory, , 同上,构造 ICacheManager 实现(见 CacheFactory)。
  3. GSYBaseVideoPlayer.startWindowFullscreen, , 通过 getConstructor(Context, Boolean) 复刻自身,实现"全屏时另起一份 player",见 GSYBaseVideoPlayer。

推荐 proguard-rules.pro(IJK 内核,含 Media3 抑警)

# ---- ijkplayer JNI ----
-keep class tv.danmaku.ijk.media.player.** { *; }
-dontwarn tv.danmaku.ijk.media.player.**

# ---- GSYVideoPlayer 反射热点 ----
-keep class * extends com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer {
    public <init>(android.content.Context);
    public <init>(android.content.Context, java.lang.Boolean);
}
-keep class * implements com.shuyu.gsyvideoplayer.player.IPlayerManager {
    public <init>();
}
-keep interface com.shuyu.gsyvideoplayer.player.IPlayerManager { *; }
-keep class * implements com.shuyu.gsyvideoplayer.cache.ICacheManager {
    public <init>();
}
-keep interface com.shuyu.gsyvideoplayer.cache.ICacheManager { *; }

# ---- Media3 aar 已自带 consumer rules,仅抑警 ----
-dontwarn androidx.media3.**
-dontwarn com.google.android.exoplayer2.**

# ---- 常规序列化 ----
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

完整版参照仓库当前的 proguard-rules.pro。

Read the whole SKILL.md on GitHub

More in Engineering