Files
Abbidot_Android/FastBleLib/consumer-rules.pro
2026-07-14 11:16:42 +08:00

147 lines
7.5 KiB
Prolog
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.

# ============================================================
# 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.**