安卓应用签名报java.lang.SecurityException无效签名文件摘要问题咨询
问题根因
该报错是第三方依赖包内置的签名校验文件与APK自身签名流程冲突导致,微软依赖携带的META-INF/msftsig.sf属于这类冲突文件,会打断签名时对Manifest属性的摘要校验逻辑。
修复方案
在app模块级的build.gradle配置文件中添加packagingOptions排除规则,根据你使用的Gradle语法选择对应配置:
Groovy 语法(通用默认配置)
在android闭包中添加如下配置:
android { // 保留原有其他配置不变 packagingOptions { // 定向排除微软依赖带的冲突签名文件 exclude 'META-INF/msftsig.sf' // 通用排除规则,可避免其他第三方依赖带来的同类签名冲突 exclude 'META-INF/*.SF' exclude 'META-INF/*.DSA' exclude 'META-INF/*.RSA' exclude 'META-INF/*.MF' } }
Kotlin DSL 语法
对应配置如下:
android { // 保留原有其他配置不变 packagingOptions { exclude("META-INF/msftsig.sf") exclude("META-INF/*.SF") exclude("META-INF/*.DSA") exclude("META-INF/*.RSA") exclude("META-INF/*.MF") } }
生效验证
- 配置完成后同步Gradle项目
- 清理历史构建缓存:执行
./gradlew clean(Windows系统执行gradlew clean) - 重新触发APK打包签名流程,报错即可消除
补充说明
如果仅需解决当前微软依赖带来的问题,只保留META-INF/msftsig.sf的排除规则即可;添加通用排除规则不会影响APK本身的签名有效性,还能提前规避后续引入其他第三方依赖时的同类冲突。
内容的提问来源于stack exchange,提问作者DS009
相关产品推荐
相关产品推荐

