# ==================================================================
# AdMaster SDK consumer ProGuard/R8 rules（下发给接入方）
#
# 收敛策略（设计文档 docs/design_r8_proguard_upgrade.md ADR-2/3）：
# 只 keep 公开 API + 反射目标 + 系统实例化组件 + 跨边界接口 + 序列化，
# 其余内部实现类（remote.component/style/util 等）允许接入方 R8 裁剪/重命名。
# 保守扩大：remote.container 与 rdk 整包 keep，避免反射字符串失联导致崩溃。
# ==================================================================

# ============ 公开 API 层（对外契约，全 keep）============
-keep public class cc.admaster.android.proxy.api.** { public protected *; }
-keep public interface cc.admaster.android.proxy.api.** { *; }

# ============ Manifest 组件 + Provider（系统按类名实例化）============
-keep class cc.admaster.android.proxy.api.BdShellActivity { *; }
-keep class cc.admaster.android.proxy.api.MobRewardVideoActivity { *; }
-keep class cc.admaster.android.proxy.api.AppActivity { *; }
-keep class cc.admaster.android.proxy.api.MobVideoActivity { *; }
-keep class cc.admaster.android.proxy.api.BdGlobalFileProvider { *; }

# ============ 反射登记表（值为类名字符串，类被裁则失联）============
-keep class cc.admaster.android.proxy.internal.ISecurityInfo { *; }
-keep class cc.admaster.android.remote.container.util.IReflectionInfo { *; }
-keep class cc.admaster.android.remote.container.dex.SkyDex { *; }

# ============ 跨边界接口 + remote.container 整包（ADR-3 保守扩大）============
-keep interface cc.admaster.android.rdk.** { *; }
-keep class cc.admaster.android.rdk.** { *; }
-keep class cc.admaster.android.remote.container.** { *; }
-keepclassmembers class * implements cc.admaster.android.rdk.IActivityImpl {
    <init>();
}

# ============ 反射目标类（含保守项，ADR-7）============
-keep class cc.admaster.android.remote.component.interfaces.RemoteReflectInterface { public *; }
-keep class cc.admaster.android.remote.component.feed.RemoteFeedPortraitView { *; }
-keep class cc.admaster.android.remote.style.widget.marketing.RemoteRefinedActButton { *; }

# ============ 序列化 ============
-keepclassmembers class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
}

# ============ embed 的 native 依赖 ============
-keep class com.preff.admmkv.MMKV { *; }
-keepclasseswithmembernames class * {
    native <methods>;
}

# ============ 属性保留 ============
-keepattributes *Annotation*, Signature, InnerClasses, EnclosingMethod
-keepattributes JavascriptInterface



# Keep all native methods, their classes and any classes in their descriptors
-keepclasseswithmembers,includedescriptorclasses class com.preff.admmkv.** {
    native <methods>;
    long nativeHandle;
    private static *** onMMKVCRCCheckFail(***);
    private static *** onMMKVFileLengthError(***);
    private static *** mmkvLogImp(...);
    private static *** onContentChangedByOuterProcess(***);
}




# Keep all native methods, their classes and any classes in their descriptors
-keepclasseswithmembers,includedescriptorclasses class com.preff.admmkv.** {
    native <methods>;
    long nativeHandle;
    private static *** onMMKVCRCCheckFail(***);
    private static *** onMMKVFileLengthError(***);
    private static *** mmkvLogImp(...);
    private static *** onContentChangedByOuterProcess(***);
}


