构建Android APK遇缺失类错误,已尝试方案无效求解决
解决方案
1. 修正ProGuard规则的拼写错误
你当前的ProGuard规则中把org.conscrypt误写为org.conscript,这直接导致规则无法生效。更新后的规则如下:
# 修复conscrypt包名拼写,保留相关类和接口 -keep class org.conscrypt.** { *; } -keep interface org.conscrypt.** -dontwarn org.conscrypt.** # 保留BouncyCastle相关类 -keep class org.bouncycastle.** { *; } -keep interface org.bouncycastle.** -dontwarn org.bouncycastle.** # 保留JP2解码器类,避免被混淆移除 -keep class com.gemalto.jp2.JP2Decoder { *; } -dontwarn com.gemalto.jp2.**
2. 补充缺失的依赖到build.gradle
根据报错中的缺失类,添加对应的依赖项(版本可根据项目适配调整):
// Conscrypt SSL库依赖 implementation("org.conscrypt:conscrypt-android:2.5.2") // PDFBox的JPX扩展,解决JP2Decoder缺失问题 implementation("com.tom-roush:pdfbox-android-jpx:2.0.29") // BouncyCastle JSSE相关依赖,解决BCSSL系列类缺失 implementation("org.bouncycastle:bcprov-android:1.70") implementation("org.bouncycastle:bctls-android:1.70")
3. 初始化Conscrypt(可选但推荐)
若项目需要使用Conscrypt作为默认SSL提供者,在自定义Application的onCreate方法中添加初始化代码:
import org.conscrypt.Conscrypt; import java.security.Security; @Override public void onCreate() { super.onCreate(); // 将Conscrypt设置为优先SSL安全提供者 Security.insertProviderAt(Conscrypt.newProvider(), 1); }
4. 清理并重新构建
执行以下命令确保修改生效:
# 清理项目缓存 ./gradlew clean # 构建Release APK ./gradlew assembleRelease
内容的提问来源于stack exchange,提问作者Bruciew
相关产品推荐
相关产品推荐

