如何禁用Android APK的MD5签名解决MDM上传报错问题
修复APK上传MDM平台报「不支持MD5签名」问题方案
问题本质
Android旧版构建、签名工具默认会在v1签名中加入MD5哈希算法,目前主流移动设备管理(MDM)平台、Android 11及以上版本系统均已废弃MD5签名校验逻辑,会直接拦截带MD5签名的APK上传、安装。
具体解决步骤
场景1:有源码,通过Android Studio/Gradle构建APK
- 先将项目使用的Android Gradle插件(AGP)升级到7.0及以上版本,低版本AGP默认签名逻辑无法手动排除MD5算法。
- 在模块级
build.gradle(Groovy语法)或build.gradle.kts(Kotlin语法)中,修改release签名配置,明确指定允许的签名、摘要算法,彻底移除MD5:
android { signingConfigs { release { // 替换为你自己的签名文件信息 storeFile file("your-release-keystore.jks") storePassword "your-keystore-password" keyAlias "your-key-alias" keyPassword "your-key-password" // 启用全版本签名支持 v1SigningEnabled true v2SigningEnabled true v3SigningEnabled true v4SigningEnabled false // 强制指定仅使用安全哈希算法,排除MD5 signingConfigExtensions { digestAlgorithms = ["SHA-256", "SHA-1"] signatureAlgorithms = ["SHA256withRSA", "SHA1withRSA"] } } } buildTypes { release { signingConfig signingConfigs.release // 其余release构建配置保持原有逻辑即可 } } }
- 配置完成后执行
./gradlew clean assembleRelease命令,重新打出的release包就不会带MD5签名。
场景2:无源码,对已有APK手动重签名
如果只有编译好的APK文件,可以直接用Android SDK自带的签名工具重新签名移除MD5:
- 打开Android SDK的
build-tools目录,选择30.0.0及以上版本的工具目录,找到zipalign和apksigner两个可执行文件,建议把这个目录加到系统环境变量方便调用。 - 先执行对齐优化命令:
zipalign -v 4 original-unsigned.apk aligned.apk
- 再执行重签名命令,明确指定不使用MD5算法:
apksigner sign --ks your-release-keystore.jks \ --ks-pass pass:your-keystore-password \ --key-pass pass:your-key-password \ --ks-key-alias your-key-alias \ --digest-algorithm SHA-256,SHA-1 \ --signature-algorithm SHA256withRSA,SHA1withRSA \ --out final-no-md5.apk \ aligned.apk
结果校验
签名完成后执行以下命令验证签名信息:
apksigner verify -v final-no-md5.apk
查看输出的签名算法列表,没有MD5相关条目即可正常上传MDM平台。
注意:不要使用过时的
jarsigner工具默认配置签名APK,老版本jarsigner会默认加入MD5摘要。如果必须使用jarsigner,需要追加-sigalg SHA256withRSA -digestalg SHA-256参数强制指定安全算法。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

