AGP 8 下TheRouter和bcprov的神坑

前言

  • 上篇文章我写了关于:Gradle 8.11.1的升级之旅
  • 在上次升级之后,这次为了合规,我引入了SM2加密库bcprov,出乎意料的第一步就失败了,搞了好几天才搞定

1. SHA-256 digest error for org/bouncycastle/LICENSE.class

我查看了下官网的Issues,有个4天前给的方案,链接是:github.com/HuolalaTech...

官方提供的2种解决方案:

  1. 方案1:如果使用 1.3.x 版本,可以编译期配置forceIncremental = false;,需要注意保存好编译缓存目录。

  2. 方案2:(只针对特殊情况)如果使用 1.3.0-rc6及之后的版本,可以直接配置removeClass = ["org/bouncycastle/LICENSE.class"];过滤掉无用类

我查看了下,最新的TheRouter的版本是1.3.0-rc6,于是我就升级到最新版本,然后在build.gradle下添加代码

ini 复制代码
TheRouter {
    removeClass = [
        "org/bouncycastle/**", // 排除整个包
    ]
}

但是很不幸,马上遇到了第二个错误

2. java.lang.SecurityException: SHA-256 digest error for org/bouncycastle/cert/bc/BcX509ExtensionUtils$1.class

  • 我尝试移除所有签名
ruby 复制代码
TheRouter {
    removeClass = [
        "org/bouncycastle/**",         // 移除 BouncyCastle 所有 class
        "META-INF/*.SF",               // 清理签名文件
        "META-INF/*.RSA",
        "META-INF/*.DSA"
    ]
}

运行还是不行,于是我尝试强制排除BC 依赖

csharp 复制代码
configurations.all {
    exclude group: 'org.bouncycastle'
}

然后我就发现我加密库找不到包了😂,我以为是我的版本不是最新导致的,我的版本是1.71

arduino 复制代码
implementation 'org.bouncycastle:bcprov-jdk15to18:1.71'

我就升级到最新版本1.81失败,降级到1.68失败

最终解决办法

  • 它不是说签名有问题吗?那我就干掉签名不就好了
  • 于是我就将jar包导出,导出方法如下,找到对应的jar包,右击选择Open in->Finder

移除签名

  1. 解压 jar 包
bash 复制代码
mkdir temp_jar
cd temp_jar
jar xf ../your-original.jar
  1. 删除 META-INF 中的签名文件
bash 复制代码
rm META-INF/*.SF META-INF/*.DSA

我不确定最新版本的有没有RSA,如果有大家对应删除就好了

bash 复制代码
rm META-INF/*.SF META-INF/*.RSA META-INF/*.DSA

注意 :不要删掉 MANIFEST.MF,不要删掉 MANIFEST.MF,不要删掉 `MANIFEST.MF。

我第一次傻乎乎的全删了,然后加密工具找不到了源码了~

  1. 重新打包成新的无签名 jar
arduino 复制代码
jar cf ../your-unsigned.jar *
  • your-unsigned:你自己随便起名字,这个看你自己,假设就叫bouncycastle.jar
  1. 移除gradle依赖的bouncycastle,将没有签名的bouncycastle.jar包放到libs重新构建

这里有个注意的细节,我刚才不是将theRouter升级到1.3.0-rc6了吗,这里一定要改回1.3.0-rc4,因为最新版本我这边疯狂失败,说是空指针异常,当然你如果不失败那是最完美的

相关推荐
xingxiliang1 小时前
深入浅出 Android CTS 视频测试:从环境搭建、用例设计到底层通信原理
android·音视频
我命由我123451 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
雨白3 小时前
深入理解 Kotlin 协程 (八):拾遗补阙,探秘官方框架的调度细节与取消闭环
android·kotlin
海天鹰4 小时前
PHP上传文件
android·开发语言·php
2501_915918416 小时前
详解iOS App上架至App Store的全流程步骤与注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
码农coding7 小时前
android12 SystemUI之StatusBar(二)
android
Lesile9 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
杉氧9 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter
我命由我1234512 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee12 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin