Skip to content

Commit 96d3ba3

Browse files
committed
fix(build): 保留 BouncyCastle 类不被 R8 裁剪修复 release BKS not found
release 开 R8 后 BouncyCastleProvider 注册的各算法 SPI 类被当死代码 裁剪掉,导致 HTTPS 请求实例化 BKS KeyStore 时抛 KeyStoreException。 keep 整个 org.bouncycastle.** 阻止裁剪/混淆。
1 parent 29423e8 commit 96d3ba3

1 file changed

Lines changed: 6 additions & 10 deletions

File tree

app/proguard-rules.pro

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,16 @@
2020
-dontwarn okhttp3.**
2121
-dontwarn okio.**
2222
-dontwarn org.conscrypt.**
23-
-dontwarn org.bouncycastle.**
2423
-dontwarn org.openjsse.**
2524

2625
# ---- BouncyCastle (bcprov-jdk18on) ----
2726
# AIEditorApp.registerBouncyCastle() 在启动时注册完整版 BC 取代 Android 裁剪版,供 sshj 做 X25519 密钥交换。
28-
# JCE 框架通过反射按类名加载 Provider 注册的各算法 SPI(KeyStore/Cipher/Signature/AlgorithmParameters 等),
29-
# 类名一旦被 R8 混淆,BouncyCastleProvider 注册的 BKS KeyStore 等类型实例化失败,
30-
# 表现为 release 下 HTTPS 请求抛 KeyStoreException: BKS not found(debug 不开 R8 故正常)。
31-
# 故保留整个 BC provider 包及其内部 *Mappings(BouncyCastleProvider 靠反射加载这些注册类)。
32-
-keep class org.bouncycastle.jce.provider.** { *; }
33-
-keep class org.bouncycastle.jce.provider.BouncyCastleProvider
34-
-keepclassmembers class org.bouncycastle.jce.provider.BouncyCastleProvider {
35-
<init>();
36-
}
27+
# BouncyCastleProvider 在构造时通过反射加载散布在各包下的 *Mappings 注册类,再由 JCE 框架按类名反射实例化
28+
# 各算法 SPI(KeyStore/Cipher/Signature/AlgorithmParameters 等)。R8 静态分析看不到这些反射引用,
29+
# 会把「无人调用」的 BC 类当死代码裁剪掉——release 下 BKS KeyStore 等 SPI 类被删,实例化时抛
30+
# KeyStoreException: BKS not found(debug 不开 R8 故正常)。故保留整个 BC 库不被裁剪/混淆。
31+
-keep class org.bouncycastle.** { *; }
32+
-dontwarn org.bouncycastle.**
3733

3834
# ---- Gson(Retrofit converter + AILogger 用 GsonBuilder 反射序列化)----
3935
# Retrofit/Gson 通过反射读写 data class 字段,类名与字段名不可混淆/裁剪。

0 commit comments

Comments
 (0)