补充混淆规则

This commit is contained in:
2026-07-14 11:16:42 +08:00
parent a25e4a093d
commit 0e8af36c87
4 changed files with 218 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
# ============================================================
# FastBleLib 库模块 consumer-rules.pro传递给依赖本库的 App 模块)
# 库的实际包名com.clj.fastblenamespace
# 要求:完全不混淆,关键系统回调必须 100% 保留
# 问题根因BleManager.getInstance().isConnected(mac) 执行不正常
# 因为 Parcelable CREATOR / 系统 BluetoothGattCallback 覆写方法
# / Handler 内部类 handleMessage / 枚举 / 静态 Holder 单例 R8 优化
# ============================================================
# -------------- 核心类 keep基础包 --------------
-keep class com.clj.fastble.** { *; }
-keepclassmembers class com.clj.fastble.** {
public <init>(...);
protected <init>(...);
<fields>;
<methods>;
}
# -------------- Parcelable 强化规则核心BleDevice / BleConnectStateParameter 等) --------------
# 解决:跨 Binder 传递 BleDevice 时反序列化失败getMac() 返回 null导致 equals(mac) 永远 false
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
public static final android.os.Parcelable$ClassLoaderCreator *;
public <init>(android.os.Parcel);
public <init>(android.os.Parcel, java.lang.ClassLoader);
public void writeToParcel(android.os.Parcel, int);
public int describeContents();
}
# 针对 FastBle 自己的 Parcelable 类再单独声明一次,优先匹配
# 说明:因为上面已经 -keep class com.clj.fastble.** { *; },所以这些类所有成员已全量保留
# 这里只做显式声明(防止 outer keep 失效时的兜底)
-keep class com.clj.fastble.data.BleDevice { *; }
-keep class com.clj.fastble.data.BleConnectStateParameter { *; }
-keep class com.clj.fastble.data.BleScanState { *; }
# -------------- 系统蓝牙回调覆写方法最关键Binder 回调触发必须保留原签名) --------------
# 解决onConnectionStateChange / onServicesDiscovered 等系统回调不触发 无法 addBleBluetooth 列表为空 isConnected() 永远 false
# 所有 extends BluetoothGattCallbackBleBluetooth.coreGattCallback 匿名内部类继承它)
-keepclassmembers class * extends android.bluetooth.BluetoothGattCallback {
public *;
protected *;
void onConnectionStateChange(...);
void onServicesDiscovered(...);
void onCharacteristicRead(...);
void onCharacteristicWrite(...);
void onCharacteristicChanged(...);
void onDescriptorRead(...);
void onDescriptorWrite(...);
void onReliableWriteCompleted(...);
void onReadRemoteRssi(...);
void onMtuChanged(...);
void onPhyUpdate(...);
void onPhyRead(...);
void onServiceChanged(...);
}
# 所有 implements BluetoothAdapter.LeScanCallbackBleScanPresenter 实现它,老版扫描回调)
-keepclassmembers class * implements android.bluetooth.BluetoothAdapter$LeScanCallback {
void onLeScan(...);
}
# 所有 extends android.bluetooth.le.ScanCallbackAndroid 5.0+ 新版扫描 API,万一用到)
-keepclassmembers class * extends android.bluetooth.le.ScanCallback {
void onScanResult(...);
void onBatchScanResults(...);
void onScanFailed(...);
}
# -------------- Handler 内部类 handleMessage系统 Handler.Callback 机制触发) --------------
# 解决MainHandler / ScanHandler handleMessage 被混淆 消息不处理 连接流程卡死
-keepclassmembers class * extends android.os.Handler {
public void handleMessage(android.os.Message);
protected void handleMessage(android.os.Message);
void handleMessage(...);
}
# -------------- 枚举类保留BleScanStateLastState 内部枚举) --------------
# 解决:枚举 values() / valueOf() / ordinal() 被优化 状态判断错误
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
public static ** valueOf(java.lang.Class, java.lang.String);
}
-keep enum com.clj.fastble.** { *; }
-keepclassmembers enum com.clj.fastble.** { *; }
# 显式保留 BleBluetooth.LastState 内部枚举
-keep class com.clj.fastble.bluetooth.BleBluetooth$LastState { *; }
# -------------- 静态 Holder 单例模式BleManager / BleScanner 单例) --------------
# 解决R8 full mode private static 内部类做特殊优化,导致单例失效,多次 init 覆盖
-keep class com.clj.fastble.BleManager$BleManagerHolder { *; }
-keepclassmembers class com.clj.fastble.BleManager$BleManagerHolder {
static com.clj.fastble.BleManager sBleManager;
<init>(...);
}
-keep class com.clj.fastble.scan.BleScanner$BleScannerHolder { *; }
-keepclassmembers class com.clj.fastble.scan.BleScanner$BleScannerHolder {
static com.clj.fastble.scan.BleScanner sBleScanner;
<init>(...);
}
# -------------- 内部类 + 匿名内部类(禁止类合并,保留外部类引用) --------------
# 解决R8 class merging BleBluetooth$1coreGattCallback 匿名类)合并到外层,导致 Binder 回调找不到
-keepattributes InnerClasses,EnclosingMethod,Signature,*Annotation*,RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,Exceptions
-keep class com.clj.fastble.**$* { *; }
-keepclassmembers class com.clj.fastble.**$* {
<init>(...);
<fields>;
<methods>;
}
# -------------- 反射支持BleBluetooth.refreshDeviceCache() 反射调用 BluetoothGatt#refresh --------------
# 说明:
# - java.lang.reflect.* / android.bluetooth.BluetoothGatt 均为 Android 系统框架类R8 不会修改/混淆/优化系统类
# - BluetoothGatt#refresh() @hide 隐藏 API,编译期 SDKandroid.jar中不存在故无需也无法 keep
# - 运行时反射 Class.getMethod("refresh") 可正常查找系统 ROM 中的真实方法,不受 ProGuard/R8 影响
# - 因此这里不需要写任何 -keep 规则,仅保留 -dontwarn 防止反射类的警告
-dontwarn java.lang.reflect.**
-dontwarn android.bluetooth.BluetoothGatt
# -------------- 回调接口保留(动态代理/反射查找可能用到) --------------
-keep interface com.clj.fastble.callback.** { *; }
-keepclassmembers interface com.clj.fastble.callback.** { <methods>; }
-keep class * implements com.clj.fastble.callback.BleGattCallback { *; }
-keep class * implements com.clj.fastble.callback.BleScanCallback { *; }
-keep class * implements com.clj.fastble.callback.BleScanAndConnectCallback { *; }
-keep class * implements com.clj.fastble.callback.BleNotifyCallback { *; }
-keep class * implements com.clj.fastble.callback.BleWriteCallback { *; }
-keep class * implements com.clj.fastble.callback.BleReadCallback { *; }
-keep class * implements com.clj.fastble.callback.BleIndicateCallback { *; }
-keep class * implements com.clj.fastble.callback.BleRssiCallback { *; }
-keep class * implements com.clj.fastble.callback.BleMtuChangedCallback { *; }
# -------------- 关键核心类额外 keep单例控制器) --------------
# 说明BluetoothBLEManager 类不存在于当前 FastBle 代码中,已移除(之前是误加的)
-keep class com.clj.fastble.BleManager { *; }
-keep class com.clj.fastble.bluetooth.BleBluetooth { *; }
-keep class com.clj.fastble.bluetooth.MultipleBluetoothController { *; }
-keep class com.clj.fastble.bluetooth.BleConnector { *; }
-keep class com.clj.fastble.scan.BleScanner { *; }
-keep class com.clj.fastble.scan.BleScanPresenter { *; }
-keep class com.clj.fastble.scan.BleScanRuleConfig { *; }
-keep class com.clj.fastble.data.BleMsg { *; }
-keep class com.clj.fastble.utils.BleLog { *; }
-dontwarn com.clj.fastble.**
-dontwarn android.bluetooth.**
-dontwarn java.lang.reflect.**

View File

@@ -0,0 +1,45 @@
# ============================================================
# easyPhotos 库模块 consumer-rules.pro传递给 App
# 库实际包名com.huantansheng.easyphotosnamespace
# 要求:完全不混淆,包括其依赖的第三方库
# ============================================================
# 保留整个库包
-keep class com.huantansheng.easyphotos.** { *; }
-keepclassmembers class com.huantansheng.easyphotos.** {
public <init>(...);
<fields>;
<methods>;
}
# 依赖的子采样缩放图片 View
-keep class com.davemorrissey.labs.subscaleview.** { *; }
-keepclassmembers class com.davemorrissey.labs.subscaleview.** {
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
<fields>;
<methods>;
}
# 依赖的 PhotoView
-keep class com.github.chrisbanes.photoview.** { *; }
-keepclassmembers class com.github.chrisbanes.photoview.** {
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
<fields>;
<methods>;
}
# 通用自定义 View 构造保留XML LayoutInflater 反射调用)
-keepclassmembers class * extends android.view.View {
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public <init>(android.content.Context, android.util.AttributeSet, int, int);
}
-keepclassmembers class * extends android.view.ViewGroup {
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public <init>(android.content.Context, android.util.AttributeSet, int, int);
}
# 保留注解泛型签名
-keepattributes Signature,*Annotation*,InnerClasses,EnclosingMethod,RuntimeVisibleAnnotations
-dontwarn com.huantansheng.easyphotos.**
-dontwarn com.davemorrissey.labs.subscaleview.**
-dontwarn com.github.chrisbanes.photoview.**

View File

@@ -0,0 +1,14 @@
# ============================================================
# easysocket 库模块 consumer-rules.pro传递给 App
# 库实际包名com.easysocketnamespace
# 要求:完全不混淆
# ============================================================
-keep class com.easysocket.** { *; }
-keepclassmembers class com.easysocket.** {
public <init>(...);
<fields>;
<methods>;
}
-keepattributes Signature,*Annotation*,InnerClasses,EnclosingMethod,RuntimeVisibleAnnotations
-dontwarn com.easysocket.**

13
easysocket/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,13 @@
# ============================================================
# easysocket 自身的混淆规则(仅当本模块 minifyEnabled=true 时生效,当前默认 false
# 实际包名com.easysocket
# ============================================================
-keep class com.easysocket.** { *; }
-keepclassmembers class com.easysocket.** {
public <init>(...);
<fields>;
<methods>;
}
-keepattributes Signature,*Annotation*,InnerClasses,EnclosingMethod,RuntimeVisibleAnnotations,SourceFile,LineNumberTable
-dontwarn com.easysocket.**